From f2e7cf7441af2ac83db87121dfcb44b4e3dada85 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 7 Aug 2024 11:40:01 +0200 Subject: [PATCH 001/534] [btcpay] better handling for invoice expiration --- .../bitcoin-invoice.component.html | 4 ++ .../bitcoin-invoice.component.ts | 62 +++++++++++-------- 2 files changed, 40 insertions(+), 26 deletions(-) diff --git a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.html b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.html index 790f046f7..932586c6d 100644 --- a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.html +++ b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.html @@ -10,6 +10,10 @@ } +
+ +
+
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..e248079f9 100644 --- a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts +++ b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts @@ -1,9 +1,8 @@ import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; 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 { Subscription, tap, catchError, of } from 'rxjs'; +import { retry } from 'rxjs/operators'; import { ServicesApiServices } from '../../services/services-api.service'; @Component({ @@ -18,30 +17,17 @@ export class BitcoinInvoiceComponent implements OnInit, OnChanges, OnDestroy { @Output() completed = new EventEmitter(); paymentForm: FormGroup; - requestSubscription: Subscription | undefined; paymentStatusSubscription: Subscription | undefined; paymentStatus = 1; // 1 - Waiting for invoice | 2 - Pending payment | 3 - Payment completed - paramMapSubscription: Subscription | undefined; - invoiceSubscription: Subscription | undefined; - invoiceTimeout; // Wait for angular to load all the things before making a request + paymentErrorMessage: string = ''; constructor( private formBuilder: FormBuilder, private apiService: ServicesApiServices, - private sanitizer: DomSanitizer, - private activatedRoute: ActivatedRoute + private sanitizer: DomSanitizer ) { } ngOnDestroy() { - if (this.requestSubscription) { - this.requestSubscription.unsubscribe(); - } - if (this.paramMapSubscription) { - this.paramMapSubscription.unsubscribe(); - } - if (this.invoiceSubscription) { - this.invoiceSubscription.unsubscribe(); - } if (this.paymentStatusSubscription) { this.paymentStatusSubscription.unsubscribe(); } @@ -72,15 +58,39 @@ export class BitcoinInvoiceComponent implements OnInit, OnChanges, OnDestroy { } else { this.paymentStatus = 4; } + + this.monitorPendingInvoice(); + } + + monitorPendingInvoice(): void { + if (!this.invoice) { + return; + } + if (this.paymentStatusSubscription) { + this.paymentStatusSubscription.unsubscribe(); + } this.paymentStatusSubscription = this.apiService.getPaymentStatus$(this.invoice.btcpayInvoiceId).pipe( - retry({ delay: () => timer(2000)}), - repeat({delay: 2000}), - filter((response) => response.status !== 204 && response.status !== 404), - take(1), - ).subscribe(() => { - this.paymentStatus = 3; - this.completed.emit(); - }); + tap(result => { + if (result.status === 204) { // Manually trigger an error in that case so we can retry + throw result; + } else if (result.status === 200) { // Invoice settled + this.paymentStatus = 3; + this.completed.emit(); + } + }), + catchError(err => { + if (err.status === 204 || err.status === 504) { + throw err; // Will trigger the retry + } else if (err.status === 400) { + this.paymentErrorMessage = 'Invoice has expired'; + } else if (err.status === 404) { + this.paymentErrorMessage = 'Invoice is no longer valid'; + } + this.paymentStatus = -1; + return of(null); + }), + retry({ delay: 1000 }), + ).subscribe(); } get availableMethods(): string[] { From 72ddb8c6a48ac274964846c99055e51a6ead1c63 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 14 Nov 2024 16:46:18 +0100 Subject: [PATCH 002/534] [accelerator] display payment errors, auto reload after 10 secs instead of 3 secs --- .../accelerate-checkout.component.html | 16 ++++++++++++---- .../accelerate-checkout.component.ts | 6 +++--- 2 files changed, 15 insertions(+), 7 deletions(-) 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 df67de65c..644d3e9d5 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -1,10 +1,18 @@
@if (accelerateError) { -
-
-

Sorry, something went wrong!

+ @if (accelerateError.includes('Payment declined')) { +
+
+

{{ accelerateError }}

+
-
+ } @else { +
+
+

Sorry, something went wrong!

+
+
+ }
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 9d2d2ad46..763332ceb 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -543,7 +543,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { // 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); + }, 10000); } } }); @@ -643,7 +643,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { // 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); + }, 10000); } } }); @@ -738,7 +738,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { // 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); + }, 10000); } } }); From 2de16322ae2df5e975a6bebd566bc391bb6864a5 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 27 Nov 2024 17:54:07 +0100 Subject: [PATCH 003/534] Utils functions for decoding tx client side --- frontend/src/app/shared/transaction.utils.ts | 746 ++++++++++++++++++- 1 file changed, 744 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index b3678986b..8d7281a20 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1,8 +1,9 @@ import { TransactionFlags } from '@app/shared/filters.utils'; -import { getVarIntLength, opcodes, parseMultisigScript, isPoint } from '@app/shared/script.utils'; -import { Transaction } from '@interfaces/electrs.interface'; +import { getVarIntLength, parseMultisigScript, isPoint } from '@app/shared/script.utils'; +import { Transaction, Vin } from '@interfaces/electrs.interface'; import { CpfpInfo, RbfInfo, TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; +import { Hash } from './sha256'; // Bitcoin Core default policy settings const MAX_STANDARD_TX_WEIGHT = 400_000; @@ -588,3 +589,744 @@ export function identifyPrioritizedTransactions(transactions: TransactionStrippe return { prioritized, deprioritized }; } + +function convertScriptSigAsm(hex: string): string { + + const buf = new Uint8Array(hex.length / 2); + for (let i = 0; i < buf.length; i++) { + buf[i] = parseInt(hex.substr(i * 2, 2), 16); + } + + const b = []; + let i = 0; + + while (i < buf.length) { + const op = buf[i]; + if (op >= 0x01 && op <= 0x4e) { + i++; + let push; + if (op === 0x4c) { + push = buf[i]; + b.push('OP_PUSHDATA1'); + i += 1; + } else if (op === 0x4d) { + push = buf[i] | (buf[i + 1] << 8); + b.push('OP_PUSHDATA2'); + i += 2; + } else if (op === 0x4e) { + push = buf[i] | (buf[i + 1] << 8) | (buf[i + 2] << 16) | (buf[i + 3] << 24); + b.push('OP_PUSHDATA4'); + i += 4; + } else { + push = op; + b.push('OP_PUSHBYTES_' + push); + } + + const data = buf.slice(i, i + push); + if (data.length !== push) { + break; + } + + b.push(uint8ArrayToHexString(data)); + i += data.length; + } else { + if (op === 0x00) { + b.push('OP_0'); + } else if (op === 0x4f) { + b.push('OP_PUSHNUM_NEG1'); + } else if (op === 0xb1) { + b.push('OP_CLTV'); + } else if (op === 0xb2) { + b.push('OP_CSV'); + } else if (op === 0xba) { + b.push('OP_CHECKSIGADD'); + } else { + const opcode = opcodes[op]; + if (opcode) { + b.push(opcode); + } else { + b.push('OP_RETURN_' + op); + } + } + i += 1; + } + } + + return b.join(' '); +} + +/** + * This function must only be called when we know the witness we are parsing + * is a taproot witness. + * @param witness An array of hex strings that represents the witness stack of + * the input. + * @returns null if the witness is not a script spend, and the hex string of + * the script item if it is a script spend. + */ +function witnessToP2TRScript(witness: string[]): string | null { + if (witness.length < 2) return null; + // Note: see BIP341 for parsing details of witness stack + + // If there are at least two witness elements, and the first byte of the + // last element is 0x50, this last element is called annex a and + // is removed from the witness stack. + const hasAnnex = witness[witness.length - 1].substring(0, 2) === '50'; + // If there are at least two witness elements left, script path spending is used. + // Call the second-to-last stack element s, the script. + // (Note: this phrasing from BIP341 assumes we've *removed* the annex from the stack) + if (hasAnnex && witness.length < 3) return null; + const positionOfScript = hasAnnex ? witness.length - 3 : witness.length - 2; + return witness[positionOfScript]; +} + +export function addInnerScriptsToVin(vin: Vin): void { + if (!vin.prevout) { + return; + } + + if (vin.prevout.scriptpubkey_type === 'p2sh') { + const redeemScript = vin.scriptsig_asm.split(' ').reverse()[0]; + vin.inner_redeemscript_asm = convertScriptSigAsm(redeemScript); + if (vin.witness && vin.witness.length > 2) { + const witnessScript = vin.witness[vin.witness.length - 1]; + vin.inner_witnessscript_asm = convertScriptSigAsm(witnessScript); + } + } + + if (vin.prevout.scriptpubkey_type === 'v0_p2wsh' && vin.witness) { + const witnessScript = vin.witness[vin.witness.length - 1]; + vin.inner_witnessscript_asm = convertScriptSigAsm(witnessScript); + } + + if (vin.prevout.scriptpubkey_type === 'v1_p2tr' && vin.witness) { + const witnessScript = witnessToP2TRScript(vin.witness); + if (witnessScript !== null) { + vin.inner_witnessscript_asm = convertScriptSigAsm(witnessScript); + } + } +} + +function fromBuffer(buffer: Uint8Array, network: string): Transaction { + let offset = 0; + + function readInt8(): number { + if (offset + 1 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + return buffer[offset++]; + } + + function readInt16() { + if (offset + 2 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + const value = buffer[offset] | (buffer[offset + 1] << 8); + offset += 2; + return value; + } + + function readInt32(unsigned = false): number { + if (offset + 4 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + const value = buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24); + offset += 4; + if (unsigned) { + return value >>> 0; + } + return value; + } + + function readInt64(): bigint { + if (offset + 8 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + const low = BigInt(buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)); + const high = BigInt(buffer[offset + 4] | (buffer[offset + 5] << 8) | (buffer[offset + 6] << 16) | (buffer[offset + 7] << 24)); + offset += 8; + return (high << 32n) | (low & 0xffffffffn); + } + + function readVarInt(): bigint { + const first = readInt8(); + if (first < 0xfd) { + return BigInt(first); + } else if (first === 0xfd) { + return BigInt(readInt16()); + } else if (first === 0xfe) { + return BigInt(readInt32(true)); + } else if (first === 0xff) { + return readInt64(); + } else { + throw new Error("Invalid VarInt prefix"); + } + } + + function readSlice(n: number | bigint): Uint8Array { + const length = Number(n); + if (offset + length > buffer.length) { + throw new Error('Cannot read slice out of bounds'); + } + const slice = buffer.slice(offset, offset + length); + offset += length; + return slice; + } + + function readVarSlice(): Uint8Array { + return readSlice(readVarInt()); + } + + function readVector(): Uint8Array[] { + const count = readVarInt(); + const vector = []; + for (let i = 0; i < count; i++) { + vector.push(readVarSlice()); + } + return vector; + } + + // Parse raw transaction + const tx = { + status: { + confirmed: null, + block_height: null, + block_hash: null, + block_time: null, + } + } as Transaction; + + tx.version = readInt32(); + + const marker = readInt8(); + const flag = readInt8(); + + let hasWitnesses = false; + if ( + marker === 0x00 && + flag === 0x01 + ) { + hasWitnesses = true; + } else { + offset -= 2; + } + + const vinLen = readVarInt(); + tx.vin = []; + for (let i = 0; i < vinLen; ++i) { + const txid = uint8ArrayToHexString(readSlice(32).reverse()); + const vout = readInt32(true); + const scriptsig = uint8ArrayToHexString(readVarSlice()); + const sequence = readInt32(true); + const is_coinbase = txid === '0'.repeat(64); + const scriptsig_asm = convertScriptSigAsm(scriptsig); + tx.vin.push({ txid, vout, scriptsig, sequence, is_coinbase, scriptsig_asm, prevout: null }); + } + + const voutLen = readVarInt(); + tx.vout = []; + for (let i = 0; i < voutLen; ++i) { + const value = Number(readInt64()); + const scriptpubkeyArray = readVarSlice(); + const scriptpubkey = uint8ArrayToHexString(scriptpubkeyArray) + const scriptpubkey_asm = convertScriptSigAsm(scriptpubkey); + const toAddress = scriptPubKeyToAddress(scriptpubkey, network); + const scriptpubkey_type = toAddress.type; + const scriptpubkey_address = toAddress?.address; + tx.vout.push({ value, scriptpubkey, scriptpubkey_asm, scriptpubkey_type, scriptpubkey_address }); + } + + let witnessSize = 0; + if (hasWitnesses) { + const startOffset = offset; + for (let i = 0; i < vinLen; ++i) { + tx.vin[i].witness = readVector().map(uint8ArrayToHexString); + } + witnessSize = offset - startOffset + 2; + } + + tx.locktime = readInt32(true); + + if (offset !== buffer.length) { + throw new Error('Transaction has unexpected data'); + } + + tx.size = buffer.length; + tx.weight = (tx.size - witnessSize) * 3 + tx.size; + + tx.txid = txid(tx); + + return tx; +} + +export function decodeRawTransaction(rawtx: string, network: string): Transaction { + if (!rawtx.length || rawtx.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(rawtx)) { + throw new Error('Invalid hex string'); + } + + const buffer = new Uint8Array(rawtx.length / 2); + for (let i = 0; i < rawtx.length; i += 2) { + buffer[i / 2] = parseInt(rawtx.substring(i, i + 2), 16); + } + + return fromBuffer(buffer, network); +} + +function serializeTransaction(tx: Transaction): Uint8Array { + const result: number[] = []; + + // Add version + result.push(...intToBytes(tx.version, 4)); + + // Add input count and inputs + result.push(...varIntToBytes(tx.vin.length)); + for (const input of tx.vin) { + result.push(...hexStringToUint8Array(input.txid).reverse()); + result.push(...intToBytes(input.vout, 4)); + const scriptSig = hexStringToUint8Array(input.scriptsig); + result.push(...varIntToBytes(scriptSig.length)); + result.push(...scriptSig); + result.push(...intToBytes(input.sequence, 4)); + } + + // Add output count and outputs + result.push(...varIntToBytes(tx.vout.length)); + for (const output of tx.vout) { + result.push(...bigIntToBytes(BigInt(output.value), 8)); + const scriptPubKey = hexStringToUint8Array(output.scriptpubkey); + result.push(...varIntToBytes(scriptPubKey.length)); + result.push(...scriptPubKey); + } + + // Add locktime + result.push(...intToBytes(tx.locktime, 4)); + + return new Uint8Array(result); +} + +function txid(tx: Transaction): string { + const serializedTx = serializeTransaction(tx); + const hash1 = new Hash().update(serializedTx).digest(); + const hash2 = new Hash().update(hash1).digest(); + return uint8ArrayToHexString(hash2.reverse()); +} + +export function countSigops(transaction: Transaction): number { + let sigops = 0; + + for (const input of transaction.vin) { + if (input.scriptsig_asm) { + sigops += countScriptSigops(input.scriptsig_asm, true); + } + if (input.prevout) { + switch (true) { + case input.prevout.scriptpubkey_type === 'p2sh' && input.witness?.length === 2 && input.scriptsig && input.scriptsig.startsWith('160014'): + case input.prevout.scriptpubkey_type === 'v0_p2wpkh': + sigops += 1; + break; + + case input.prevout?.scriptpubkey_type === 'p2sh' && input.witness?.length && input.scriptsig && input.scriptsig.startsWith('220020'): + case input.prevout.scriptpubkey_type === 'v0_p2wsh': + if (input.witness?.length) { + sigops += countScriptSigops(convertScriptSigAsm(input.witness[input.witness.length - 1]), false, true); + } + break; + + case input.prevout.scriptpubkey_type === 'p2sh': + if (input.inner_redeemscript_asm) { + sigops += countScriptSigops(input.inner_redeemscript_asm); + } + break; + } + } + } + + for (const output of transaction.vout) { + if (output.scriptpubkey_asm) { + sigops += countScriptSigops(output.scriptpubkey_asm, true); + } + } + + return sigops; +} + +function scriptPubKeyToAddress(scriptPubKey: string, network: string): { address: string, type: string } { + // P2PKH + if (/^76a914[0-9a-f]{40}88ac$/.test(scriptPubKey)) { + return { address: p2pkh(scriptPubKey.substring(6, 6 + 40), network), type: 'p2pkh' }; + } + // P2PK + if (/^21[0-9a-f]{66}ac$/.test(scriptPubKey) || /^41[0-9a-f]{130}ac$/.test(scriptPubKey)) { + return { address: null, type: 'p2pk' }; + } + // P2SH + if (/^a914[0-9a-f]{40}87$/.test(scriptPubKey)) { + return { address: p2sh(scriptPubKey.substring(4, 4 + 40), network), type: 'p2sh' }; + } + // P2WPKH + if (/^0014[0-9a-f]{40}$/.test(scriptPubKey)) { + return { address: p2wpkh(scriptPubKey.substring(4, 4 + 40), network), type: 'v0_p2wpkh' }; + } + // P2WSH + if (/^0020[0-9a-f]{64}$/.test(scriptPubKey)) { + return { address: p2wsh(scriptPubKey.substring(4, 4 + 64), network), type: 'v0_p2wsh' }; + } + // P2TR + if (/^5120[0-9a-f]{64}$/.test(scriptPubKey)) { + return { address: p2tr(scriptPubKey.substring(4, 4 + 64), network), type: 'v1_p2tr' }; + } + // multisig + if (/^[0-9a-f]+ae$/.test(scriptPubKey)) { + return { address: null, type: 'multisig' }; + } + // anchor + if (scriptPubKey === '51024e73') { + return { address: 'bc1pfeessrawgf', type: 'anchor' }; + } + // op_return + if (/^6a/.test(scriptPubKey)) { + return { address: null, type: 'op_return' }; + } + return { address: null, type: 'unknown' }; +} + +function p2pkh(pubKeyHash: string, network: string): string { + const pubkeyHashArray = hexStringToUint8Array(pubKeyHash); + const version = ['testnet', 'testnet4', 'signet'].includes(network) ? 0x6f : 0x00; + const versionedPayload = Uint8Array.from([version, ...pubkeyHashArray]); + const hash1 = new Hash().update(versionedPayload).digest(); + const hash2 = new Hash().update(hash1).digest(); + const checksum = hash2.slice(0, 4); + const finalPayload = Uint8Array.from([...versionedPayload, ...checksum]); + const bitcoinAddress = base58Encode(finalPayload); + return bitcoinAddress; +} + +function p2sh(scriptHash: string, network: string): string { + const scriptHashArray = hexStringToUint8Array(scriptHash); + const version = ['testnet', 'testnet4', 'signet'].includes(network) ? 0xc4 : 0x05; + const versionedPayload = Uint8Array.from([version, ...scriptHashArray]); + const hash1 = new Hash().update(versionedPayload).digest(); + const hash2 = new Hash().update(hash1).digest(); + const checksum = hash2.slice(0, 4); + const finalPayload = Uint8Array.from([...versionedPayload, ...checksum]); + const bitcoinAddress = base58Encode(finalPayload); + return bitcoinAddress; +} + +function p2wpkh(pubKeyHash: string, network: string): string { + const pubkeyHashArray = hexStringToUint8Array(pubKeyHash); + const hrp = ['testnet', 'testnet4', 'signet'].includes(network) ? 'tb' : 'bc'; + const version = 0; + const words = [version].concat(toWords(pubkeyHashArray)); + const bech32Address = bech32Encode(hrp, words); + return bech32Address; +} + +function p2wsh(scriptHash: string, network: string): string { + const scriptHashArray = hexStringToUint8Array(scriptHash); + const hrp = ['testnet', 'testnet4', 'signet'].includes(network) ? 'tb' : 'bc'; + const version = 0; + const words = [version].concat(toWords(scriptHashArray)); + const bech32Address = bech32Encode(hrp, words); + return bech32Address; +} + +function p2tr(pubKeyHash: string, network: string): string { + const pubkeyHashArray = hexStringToUint8Array(pubKeyHash); + const hrp = ['testnet', 'testnet4', 'signet'].includes(network) ? 'tb' : 'bc'; + const version = 1; + const words = [version].concat(toWords(pubkeyHashArray)); + const bech32Address = bech32Encode(hrp, words, 0x2bc830a3); + return bech32Address; +} + +// base58 encoding +function base58Encode(data: Uint8Array): string { + const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; + + let hexString = Array.from(data) + .map(byte => byte.toString(16).padStart(2, '0')) + .join(''); + + let num = BigInt("0x" + hexString); + + let encoded = ""; + while (num > 0) { + const remainder = Number(num % 58n); + num = num / 58n; + encoded = BASE58_ALPHABET[remainder] + encoded; + } + + for (let byte of data) { + if (byte === 0) { + encoded = "1" + encoded; + } else { + break; + } + } + + return encoded; +} + +// bech32 encoding +// Adapted from https://github.com/bitcoinjs/bech32/blob/5ceb0e3d4625561a459c85643ca6947739b2d83c/src/index.ts +function bech32Encode(prefix: string, words: number[], constant: number = 1) { + const BECH32_ALPHABET = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; + + const checksum = createChecksum(prefix, words, constant); + const combined = words.concat(checksum); + let result = prefix + '1'; + for (let i = 0; i < combined.length; ++i) { + result += BECH32_ALPHABET.charAt(combined[i]); + } + return result; +} + +function polymodStep(pre) { + const GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]; + const b = pre >> 25; + return ( + ((pre & 0x1ffffff) << 5) ^ + ((b & 1 ? GENERATORS[0] : 0) ^ + (b & 2 ? GENERATORS[1] : 0) ^ + (b & 4 ? GENERATORS[2] : 0) ^ + (b & 8 ? GENERATORS[3] : 0) ^ + (b & 16 ? GENERATORS[4] : 0)) + ); +} + +function prefixChk(prefix) { + let chk = 1; + for (let i = 0; i < prefix.length; ++i) { + const c = prefix.charCodeAt(i); + chk = polymodStep(chk) ^ (c >> 5); + } + chk = polymodStep(chk); + for (let i = 0; i < prefix.length; ++i) { + const c = prefix.charCodeAt(i); + chk = polymodStep(chk) ^ (c & 0x1f); + } + return chk; +} + +function createChecksum(prefix: string, words: number[], constant: number) { + const POLYMOD_CONST = constant; + let chk = prefixChk(prefix); + for (let i = 0; i < words.length; ++i) { + const x = words[i]; + chk = polymodStep(chk) ^ x; + } + for (let i = 0; i < 6; ++i) { + chk = polymodStep(chk); + } + chk ^= POLYMOD_CONST; + + const checksum = []; + for (let i = 0; i < 6; ++i) { + checksum.push((chk >> (5 * (5 - i))) & 31); + } + return checksum; +} + +function convertBits(data, fromBits, toBits, pad) { + let acc = 0; + let bits = 0; + const ret = []; + const maxV = (1 << toBits) - 1; + + for (let i = 0; i < data.length; ++i) { + const value = data[i]; + if (value < 0 || value >> fromBits) throw new Error('Invalid value'); + acc = (acc << fromBits) | value; + bits += fromBits; + while (bits >= toBits) { + bits -= toBits; + ret.push((acc >> bits) & maxV); + } + } + if (pad) { + if (bits > 0) { + ret.push((acc << (toBits - bits)) & maxV); + } + } else if (bits >= fromBits || ((acc << (toBits - bits)) & maxV)) { + throw new Error('Invalid data'); + } + return ret; +} + +function toWords(bytes) { + return convertBits(bytes, 8, 5, true); +} + +// Helper functions +function uint8ArrayToHexString(uint8Array: Uint8Array): string { + return Array.from(uint8Array).map(byte => byte.toString(16).padStart(2, '0')).join(''); +} + +function hexStringToUint8Array(hex: string): Uint8Array { + const buf = new Uint8Array(hex.length / 2); + for (let i = 0; i < buf.length; i++) { + buf[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return buf; +} + +function intToBytes(value: number, byteLength: number): number[] { + const bytes = []; + for (let i = 0; i < byteLength; i++) { + bytes.push((value >> (8 * i)) & 0xff); + } + return bytes; +} + +function bigIntToBytes(value: bigint, byteLength: number): number[] { + const bytes = []; + for (let i = 0; i < byteLength; i++) { + bytes.push(Number((value >> BigInt(8 * i)) & 0xffn)); + } + return bytes; +} + +function varIntToBytes(value: number | bigint): number[] { + const bytes = []; + + if (typeof value === 'number') { + if (value < 0xfd) { + bytes.push(value); + } else if (value <= 0xffff) { + bytes.push(0xfd, value & 0xff, (value >> 8) & 0xff); + } else if (value <= 0xffffffff) { + bytes.push(0xfe, ...intToBytes(value, 4)); + } + } else { + if (value < 0xfdn) { + bytes.push(Number(value)); + } else if (value <= 0xffffn) { + bytes.push(0xfd, Number(value & 0xffn), Number((value >> 8n) & 0xffn)); + } else if (value <= 0xffffffffn) { + bytes.push(0xfe, ...intToBytes(Number(value), 4)); + } else { + bytes.push(0xff, ...bigIntToBytes(value, 8)); + } + } + + return bytes; +} + +const opcodes = { + 0: 'OP_0', + 76: 'OP_PUSHDATA1', + 77: 'OP_PUSHDATA2', + 78: 'OP_PUSHDATA4', + 79: 'OP_PUSHNUM_NEG1', + 80: 'OP_RESERVED', + 81: 'OP_PUSHNUM_1', + 82: 'OP_PUSHNUM_2', + 83: 'OP_PUSHNUM_3', + 84: 'OP_PUSHNUM_4', + 85: 'OP_PUSHNUM_5', + 86: 'OP_PUSHNUM_6', + 87: 'OP_PUSHNUM_7', + 88: 'OP_PUSHNUM_8', + 89: 'OP_PUSHNUM_9', + 90: 'OP_PUSHNUM_10', + 91: 'OP_PUSHNUM_11', + 92: 'OP_PUSHNUM_12', + 93: 'OP_PUSHNUM_13', + 94: 'OP_PUSHNUM_14', + 95: 'OP_PUSHNUM_15', + 96: 'OP_PUSHNUM_16', + 97: 'OP_NOP', + 98: 'OP_VER', + 99: 'OP_IF', + 100: 'OP_NOTIF', + 101: 'OP_VERIF', + 102: 'OP_VERNOTIF', + 103: 'OP_ELSE', + 104: 'OP_ENDIF', + 105: 'OP_VERIFY', + 106: 'OP_RETURN', + 107: 'OP_TOALTSTACK', + 108: 'OP_FROMALTSTACK', + 109: 'OP_2DROP', + 110: 'OP_2DUP', + 111: 'OP_3DUP', + 112: 'OP_2OVER', + 113: 'OP_2ROT', + 114: 'OP_2SWAP', + 115: 'OP_IFDUP', + 116: 'OP_DEPTH', + 117: 'OP_DROP', + 118: 'OP_DUP', + 119: 'OP_NIP', + 120: 'OP_OVER', + 121: 'OP_PICK', + 122: 'OP_ROLL', + 123: 'OP_ROT', + 124: 'OP_SWAP', + 125: 'OP_TUCK', + 126: 'OP_CAT', + 127: 'OP_SUBSTR', + 128: 'OP_LEFT', + 129: 'OP_RIGHT', + 130: 'OP_SIZE', + 131: 'OP_INVERT', + 132: 'OP_AND', + 133: 'OP_OR', + 134: 'OP_XOR', + 135: 'OP_EQUAL', + 136: 'OP_EQUALVERIFY', + 137: 'OP_RESERVED1', + 138: 'OP_RESERVED2', + 139: 'OP_1ADD', + 140: 'OP_1SUB', + 141: 'OP_2MUL', + 142: 'OP_2DIV', + 143: 'OP_NEGATE', + 144: 'OP_ABS', + 145: 'OP_NOT', + 146: 'OP_0NOTEQUAL', + 147: 'OP_ADD', + 148: 'OP_SUB', + 149: 'OP_MUL', + 150: 'OP_DIV', + 151: 'OP_MOD', + 152: 'OP_LSHIFT', + 153: 'OP_RSHIFT', + 154: 'OP_BOOLAND', + 155: 'OP_BOOLOR', + 156: 'OP_NUMEQUAL', + 157: 'OP_NUMEQUALVERIFY', + 158: 'OP_NUMNOTEQUAL', + 159: 'OP_LESSTHAN', + 160: 'OP_GREATERTHAN', + 161: 'OP_LESSTHANOREQUAL', + 162: 'OP_GREATERTHANOREQUAL', + 163: 'OP_MIN', + 164: 'OP_MAX', + 165: 'OP_WITHIN', + 166: 'OP_RIPEMD160', + 167: 'OP_SHA1', + 168: 'OP_SHA256', + 169: 'OP_HASH160', + 170: 'OP_HASH256', + 171: 'OP_CODESEPARATOR', + 172: 'OP_CHECKSIG', + 173: 'OP_CHECKSIGVERIFY', + 174: 'OP_CHECKMULTISIG', + 175: 'OP_CHECKMULTISIGVERIFY', + 176: 'OP_NOP1', + 177: 'OP_CHECKLOCKTIMEVERIFY', + 178: 'OP_CHECKSEQUENCEVERIFY', + 179: 'OP_NOP4', + 180: 'OP_NOP5', + 181: 'OP_NOP6', + 182: 'OP_NOP7', + 183: 'OP_NOP8', + 184: 'OP_NOP9', + 185: 'OP_NOP10', + 186: 'OP_CHECKSIGADD', + 253: 'OP_PUBKEYHASH', + 254: 'OP_PUBKEY', + 255: 'OP_INVALIDOPCODE', +}; From 025b0585b483168f2ccfffd33e204f7ecfad8c71 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 27 Nov 2024 18:11:56 +0100 Subject: [PATCH 004/534] Preview transaction from raw data --- .../transaction-raw.component.html | 190 +++++++++++ .../transaction-raw.component.scss | 194 ++++++++++++ .../transaction/transaction-raw.component.ts | 296 ++++++++++++++++++ .../transaction/transaction.module.ts | 6 + .../transactions-list.component.ts | 12 +- frontend/src/app/route-guards.ts | 2 +- .../global-footer.component.html | 1 + .../truncate/truncate.component.html | 2 +- .../truncate/truncate.component.scss | 6 + .../components/truncate/truncate.component.ts | 1 + 10 files changed, 704 insertions(+), 6 deletions(-) create mode 100644 frontend/src/app/components/transaction/transaction-raw.component.html create mode 100644 frontend/src/app/components/transaction/transaction-raw.component.scss create mode 100644 frontend/src/app/components/transaction/transaction-raw.component.ts diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html new file mode 100644 index 000000000..15293e2dd --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -0,0 +1,190 @@ +
+ + @if (!transaction) { + +

Preview Transaction

+ + +
+ +
+ + + +

Error decoding transaction, reason: {{ error }}

+ + } + + @if (transaction && !error && !isLoading) { +
+

Preview Transaction

+ + + + + + + + + +
+ + + +
+ +
+ +

{{ errorBroadcast }}

+ +
+ + @if (!hasPrevouts) { +
+ This transaction is missing prevouts data. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} +
+ } + + + +
+ + +
+

Flow

+
+ + + +
+ +
+
+ + +
+
+ + + + +
+
+ +
+
+ + + + +
+
+

Inputs & Outputs

+
+ +
+ + +
+
+ + + + +
+

Details

+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
Size
Virtual size
Adjusted vsize + + + +
Weight
+
+
+ + + + + + + + + + + + + + + + + + + +
Version
Locktime
Sigops + + + +
Transaction hex
+
+
+
+ } + + @if (isLoading) { +
+
+

Loading transaction prevouts ({{ prevoutsLoadedCount }} / {{ prevoutsCount }})

+
+ } +
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.scss b/frontend/src/app/components/transaction/transaction-raw.component.scss new file mode 100644 index 000000000..5bbe5601e --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-raw.component.scss @@ -0,0 +1,194 @@ +.label { + margin: 0 5px; +} + +.container-buttons { + align-self: center; +} + +.title-block { + flex-wrap: wrap; + align-items: baseline; + @media (min-width: 650px) { + flex-direction: row; + } + h1 { + margin: 0rem; + margin-right: 15px; + line-height: 1; + } +} + +.tx-link { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + width: 0; + max-width: 100%; + margin-right: 0px; + margin-bottom: 0px; + margin-top: 8px; + @media (min-width: 651px) { + flex-grow: 1; + margin-bottom: 0px; + margin-right: 1em; + top: 1px; + position: relative; + } + @media (max-width: 650px) { + width: 100%; + order: 3; + } + + .txid { + width: 200px; + min-width: 200px; + flex-grow: 1; + } +} + +.container-xl { + margin-bottom: 40px; +} + +.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; +} + +.graph-container { + position: relative; + width: 100%; + background: var(--stat-box-bg); + padding: 10px 0; + padding-bottom: 0; +} + +.toggle-wrapper { + width: 100%; + text-align: center; + margin: 1.25em 0 0; +} + +.graph-toggle { + margin: auto; +} + +.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; + } +} + +.effective-fee-rating { + @media (max-width: 767px){ + margin-right: 0px !important; + } +} + +.title { + h2 { + line-height: 1; + margin: 0; + padding-bottom: 5px; + } +} + +.btn-outline-info { + margin-top: 5px; + @media (min-width: 768px){ + margin-top: 0px; + } +} + +.flow-toggle { + margin-top: -5px; + margin-left: 10px; + @media (min-width: 768px){ + display: inline-block; + margin-top: 0px; + margin-bottom: 0px; + } +} + +.subtitle-block { + display: flex; + flex-direction: row; + align-items: baseline; + justify-content: space-between; + + .title { + flex-shrink: 0; + } + + .title-buttons { + flex-shrink: 1; + text-align: right; + .btn { + margin-top: 0; + margin-bottom: 8px; + margin-left: 8px; + } + } +} + +.cpfp-details { + .txids { + width: 60%; + } + + @media (max-width: 500px) { + .txids { + width: 40%; + } + } +} + +.disabled { + opacity: 0.5; + pointer-events: none; +} + +.no-cursor { + cursor: default !important; + pointer-events: none; +} \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts new file mode 100644 index 000000000..cac7b595f --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -0,0 +1,296 @@ +import { Component, OnInit, HostListener, ViewChild, ElementRef, OnDestroy, ChangeDetectorRef } from '@angular/core'; +import { Transaction } from '@interfaces/electrs.interface'; +import { StateService } from '../../services/state.service'; +import { Filter, toFilters } from '../../shared/filters.utils'; +import { decodeRawTransaction, getTransactionFlags, addInnerScriptsToVin, countSigops } from '../../shared/transaction.utils'; +import { ETA, EtaService } from '../../services/eta.service'; +import { combineLatest, firstValueFrom, map, Observable, startWith, Subscription } from 'rxjs'; +import { WebsocketService } from '../../services/websocket.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { ElectrsApiService } from '../../services/electrs-api.service'; +import { SeoService } from '../../services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { ApiService } from '../../services/api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; + +@Component({ + selector: 'app-transaction-raw', + templateUrl: './transaction-raw.component.html', + styleUrls: ['./transaction-raw.component.scss'], +}) +export class TransactionRawComponent implements OnInit, OnDestroy { + + pushTxForm: UntypedFormGroup; + isLoading: boolean; + offlineMode: boolean = false; + transaction: Transaction; + error: string; + errorPrevouts: string; + hasPrevouts: boolean; + prevoutsLoadedCount: number = 0; + prevoutsCount: number; + isLoadingBroadcast: boolean; + errorBroadcast: string; + successBroadcast: boolean; + + isMobile: boolean; + @ViewChild('graphContainer') + graphContainer: ElementRef; + graphExpanded: boolean = false; + graphWidth: number = 1068; + graphHeight: number = 360; + inOutLimit: number = 150; + maxInOut: number = 0; + flowPrefSubscription: Subscription; + hideFlow: boolean = this.stateService.hideFlow.value; + flowEnabled: boolean; + adjustedVsize: number; + filters: Filter[] = []; + showCpfpDetails = false; + ETA$: Observable; + mempoolBlocksSubscription: Subscription; + + constructor( + public route: ActivatedRoute, + public router: Router, + public stateService: StateService, + public etaService: EtaService, + public electrsApi: ElectrsApiService, + public websocketService: WebsocketService, + public formBuilder: UntypedFormBuilder, + public cd: ChangeDetectorRef, + public seoService: SeoService, + public apiService: ApiService, + public relativeUrlPipe: RelativeUrlPipe, + ) {} + + ngOnInit(): void { + this.seoService.setTitle($localize`:@@meta.title.preview-tx:Preview Transaction`); + this.seoService.setDescription($localize`:@@meta.description.preview-tx:Preview a transaction to the Bitcoin${seoDescriptionNetwork(this.stateService.network)} network using the transaction's raw hex data.`); + this.websocketService.want(['blocks', 'mempool-blocks']); + this.pushTxForm = this.formBuilder.group({ + txRaw: ['', Validators.required], + }); + } + + async decodeTransaction(): Promise { + this.resetState(); + this.isLoading = true; + try { + const tx = decodeRawTransaction(this.pushTxForm.get('txRaw').value, this.stateService.network); + await this.fetchPrevouts(tx); + this.processTransaction(tx); + } catch (error) { + this.error = error.message; + } finally { + this.isLoading = false; + } + } + + async fetchPrevouts(transaction: Transaction): Promise { + if (this.offlineMode) { + return; + } + + this.prevoutsCount = transaction.vin.filter(input => !input.is_coinbase).length; + if (this.prevoutsCount === 0) { + this.hasPrevouts = true; + return; + } + + const txsToFetch: { [txid: string]: number } = transaction.vin.reduce((acc, input) => { + if (!input.is_coinbase) { + acc[input.txid] = (acc[input.txid] || 0) + 1; + } + return acc; + }, {} as { [txid: string]: number }); + + try { + + if (Object.keys(txsToFetch).length > 20) { + throw new Error($localize`:@@transaction.too-many-prevouts:Too many transactions to fetch (${Object.keys(txsToFetch).length})`); + } + + const fetchedTransactions = await Promise.all( + Object.keys(txsToFetch).map(txid => + firstValueFrom(this.electrsApi.getTransaction$(txid)) + .then(response => { + this.prevoutsLoadedCount += txsToFetch[txid]; + this.cd.markForCheck(); + return response; + }) + ) + ); + + const transactionsMap = fetchedTransactions.reduce((acc, transaction) => { + acc[transaction.txid] = transaction; + return acc; + }, {} as { [txid: string]: any }); + + const prevouts = transaction.vin.map((input, index) => ({ index, prevout: transactionsMap[input.txid]?.vout[input.vout] || null})); + + transaction.vin = transaction.vin.map((input, index) => { + if (!input.is_coinbase) { + input.prevout = prevouts.find(p => p.index === index)?.prevout; + addInnerScriptsToVin(input); + } + return input; + }); + this.hasPrevouts = true; + } catch (error) { + this.errorPrevouts = error.message; + } + } + + processTransaction(tx: Transaction): void { + this.transaction = tx; + + if (this.hasPrevouts) { + this.transaction.fee = this.transaction.vin.some(input => input.is_coinbase) + ? 0 + : this.transaction.vin.reduce((fee, input) => { + return fee + (input.prevout?.value || 0); + }, 0) - this.transaction.vout.reduce((sum, output) => sum + output.value, 0); + this.transaction.feePerVsize = this.transaction.fee / (this.transaction.weight / 4); + } + + this.transaction.flags = getTransactionFlags(this.transaction, null, null, null, this.stateService.network); + this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; + this.transaction.sigops = countSigops(this.transaction); + if (this.transaction.sigops >= 0) { + this.adjustedVsize = Math.max(this.transaction.weight / 4, this.transaction.sigops * 5); + } + + this.setupGraph(); + this.setFlowEnabled(); + this.flowPrefSubscription = this.stateService.hideFlow.subscribe((hide) => { + this.hideFlow = !!hide; + this.setFlowEnabled(); + }); + this.setGraphSize(); + + this.ETA$ = combineLatest([ + this.stateService.mempoolTxPosition$.pipe(startWith(null)), + this.stateService.mempoolBlocks$.pipe(startWith(null)), + this.stateService.difficultyAdjustment$.pipe(startWith(null)), + ]).pipe( + map(([position, mempoolBlocks, da]) => { + return this.etaService.calculateETA( + this.stateService.network, + this.transaction, + mempoolBlocks, + position, + da, + null, + null, + null + ); + }) + ); + + this.mempoolBlocksSubscription = this.stateService.mempoolBlocks$.subscribe(() => { + if (this.transaction) { + this.stateService.markBlock$.next({ + txid: this.transaction.txid, + txFeePerVSize: this.transaction.feePerVsize, + }); + } + }); + } + + async postTx(): Promise { + this.isLoadingBroadcast = true; + this.errorBroadcast = null; + return new Promise((resolve, reject) => { + this.apiService.postTransaction$(this.pushTxForm.get('txRaw').value) + .subscribe((result) => { + this.isLoadingBroadcast = false; + this.successBroadcast = true; + resolve(result); + }, + (error) => { + if (typeof error.error === 'string') { + const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); + this.errorBroadcast = 'Failed to broadcast transaction, reason: ' + (matchText && matchText[1] || error.error); + } else if (error.message) { + this.errorBroadcast = 'Failed to broadcast transaction, reason: ' + error.message; + } + this.isLoadingBroadcast = false; + reject(this.error); + }); + }); + } + + resetState() { + this.transaction = null; + this.error = null; + this.errorPrevouts = null; + this.errorBroadcast = null; + this.successBroadcast = false; + this.isLoading = false; + this.adjustedVsize = null; + this.filters = []; + this.hasPrevouts = false; + this.prevoutsLoadedCount = 0; + this.prevoutsCount = 0; + this.stateService.markBlock$.next({}); + this.mempoolBlocksSubscription?.unsubscribe(); + } + + resetForm() { + this.resetState(); + this.pushTxForm.reset(); + } + + @HostListener('window:resize', ['$event']) + setGraphSize(): void { + this.isMobile = window.innerWidth < 850; + if (this.graphContainer?.nativeElement && this.stateService.isBrowser) { + setTimeout(() => { + if (this.graphContainer?.nativeElement?.clientWidth) { + this.graphWidth = this.graphContainer.nativeElement.clientWidth; + } else { + setTimeout(() => { this.setGraphSize(); }, 1); + } + }, 1); + } else { + setTimeout(() => { this.setGraphSize(); }, 1); + } + } + + setupGraph() { + this.maxInOut = Math.min(this.inOutLimit, Math.max(this.transaction?.vin?.length || 1, this.transaction?.vout?.length + 1 || 1)); + this.graphHeight = this.graphExpanded ? this.maxInOut * 15 : Math.min(360, this.maxInOut * 80); + } + + toggleGraph() { + const showFlow = !this.flowEnabled; + this.stateService.hideFlow.next(!showFlow); + } + + setFlowEnabled() { + this.flowEnabled = !this.hideFlow; + } + + expandGraph() { + this.graphExpanded = true; + this.graphHeight = this.maxInOut * 15; + } + + collapseGraph() { + this.graphExpanded = false; + this.graphHeight = Math.min(360, this.maxInOut * 80); + } + + onOfflineModeChange(e): void { + this.offlineMode = !e.target.checked; + } + + ngOnDestroy(): void { + this.mempoolBlocksSubscription?.unsubscribe(); + this.flowPrefSubscription?.unsubscribe(); + this.stateService.markBlock$.next({}); + } + +} diff --git a/frontend/src/app/components/transaction/transaction.module.ts b/frontend/src/app/components/transaction/transaction.module.ts index 80de0cf40..58b6493d8 100644 --- a/frontend/src/app/components/transaction/transaction.module.ts +++ b/frontend/src/app/components/transaction/transaction.module.ts @@ -9,6 +9,7 @@ import { TransactionExtrasModule } from '@components/transaction/transaction-ext 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'; +import { TransactionRawComponent } from '@components/transaction/transaction-raw.component'; const routes: Routes = [ { @@ -16,6 +17,10 @@ const routes: Routes = [ redirectTo: '/', pathMatch: 'full', }, + { + path: 'preview', + component: TransactionRawComponent, + }, { path: ':id', component: TransactionComponent, @@ -49,6 +54,7 @@ export class TransactionRoutingModule { } TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, + TransactionRawComponent, ], exports: [ TransactionComponent, diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index b07546e5e..d1764442e 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -37,6 +37,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { @Input() addresses: string[] = []; @Input() rowLimit = 12; @Input() blockTime: number = 0; // Used for price calculation if all the transactions are in the same block + @Input() txPreview = false; @Output() loadMore = new EventEmitter(); @@ -81,7 +82,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { this.refreshOutspends$ .pipe( switchMap((txIds) => { - if (!this.cached) { + if (!this.cached && !this.txPreview) { // break list into batches of 50 (maximum supported by esplora) const batches = []; for (let i = 0; i < txIds.length; i += 50) { @@ -119,7 +120,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { ), this.refreshChannels$ .pipe( - filter(() => this.stateService.networkSupportsLightning()), + filter(() => this.stateService.networkSupportsLightning() && !this.txPreview), switchMap((txIds) => this.apiService.getChannelByTxIds$(txIds)), catchError((error) => { // handle 404 @@ -187,7 +188,10 @@ export class TransactionsListComponent implements OnInit, OnChanges { } this.transactionsLength = this.transactions.length; - this.cacheService.setTxCache(this.transactions); + + if (!this.txPreview) { + this.cacheService.setTxCache(this.transactions); + } const confirmedTxs = this.transactions.filter((tx) => tx.status.confirmed).length; this.transactions.forEach((tx) => { @@ -347,7 +351,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { } loadMoreInputs(tx: Transaction): void { - if (!tx['@vinLoaded']) { + if (!tx['@vinLoaded'] && !this.txPreview) { this.electrsApiService.getTransaction$(tx.txid) .subscribe((newTx) => { tx['@vinLoaded'] = true; diff --git a/frontend/src/app/route-guards.ts b/frontend/src/app/route-guards.ts index 780e997db..81cbf03ae 100644 --- a/frontend/src/app/route-guards.ts +++ b/frontend/src/app/route-guards.ts @@ -14,7 +14,7 @@ class GuardService { 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)); + return (preferredRoute === 'status' || (preferredRoute !== 'details' && this.navigationService.isInitialLoad())) && window.innerWidth <= 767.98 && !(path.length === 2 && ['push', 'test', 'preview'].includes(path[1].path)); } } 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 d82bb8062..edce7bb88 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 @@ -76,6 +76,7 @@

Recent Blocks

Broadcast Transaction

Test Transaction

+

Preview Transaction

Connect to our Nodes

API Documentation

diff --git a/frontend/src/app/shared/components/truncate/truncate.component.html b/frontend/src/app/shared/components/truncate/truncate.component.html index 066f83244..b7e31483e 100644 --- a/frontend/src/app/shared/components/truncate/truncate.component.html +++ b/frontend/src/app/shared/components/truncate/truncate.component.html @@ -1,6 +1,6 @@ - + diff --git a/frontend/src/app/shared/components/truncate/truncate.component.scss b/frontend/src/app/shared/components/truncate/truncate.component.scss index 8c22dd836..739376ed2 100644 --- a/frontend/src/app/shared/components/truncate/truncate.component.scss +++ b/frontend/src/app/shared/components/truncate/truncate.component.scss @@ -37,6 +37,12 @@ max-width: 300px; overflow: hidden; } + + .disabled { + pointer-events: none; + opacity: 0.8; + color: #fff; + } } @media (max-width: 567px) { diff --git a/frontend/src/app/shared/components/truncate/truncate.component.ts b/frontend/src/app/shared/components/truncate/truncate.component.ts index 589f7aa36..f9ab34ee9 100644 --- a/frontend/src/app/shared/components/truncate/truncate.component.ts +++ b/frontend/src/app/shared/components/truncate/truncate.component.ts @@ -15,6 +15,7 @@ export class TruncateComponent { @Input() maxWidth: number = null; @Input() inline: boolean = false; @Input() textAlign: 'start' | 'end' = 'start'; + @Input() disabled: boolean = false; rtl: boolean; constructor( From 722eaa3e9638aaa712f35a662dc12715b0c9db77 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 28 Nov 2024 12:07:05 +0100 Subject: [PATCH 005/534] Add note on borrowed code used for transaction decoding --- frontend/src/app/shared/transaction.utils.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 8d7281a20..af1412838 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -590,6 +590,8 @@ export function identifyPrioritizedTransactions(transactions: TransactionStrippe return { prioritized, deprioritized }; } +// Adapted from mempool backend https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/api/transaction-utils.ts#L254 +// Converts hex bitcoin script to ASM function convertScriptSigAsm(hex: string): string { const buf = new Uint8Array(hex.length / 2); @@ -655,6 +657,7 @@ function convertScriptSigAsm(hex: string): string { return b.join(' '); } +// Copied from mempool backend https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/api/transaction-utils.ts#L327 /** * This function must only be called when we know the witness we are parsing * is a taproot witness. @@ -679,6 +682,8 @@ function witnessToP2TRScript(witness: string[]): string | null { return witness[positionOfScript]; } +// Copied from mempool backend https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/api/transaction-utils.ts#L227 +// Fills inner_redeemscript_asm and inner_witnessscript_asm fields of fetched prevouts for decoded transactions export function addInnerScriptsToVin(vin: Vin): void { if (!vin.prevout) { return; @@ -706,6 +711,8 @@ export function addInnerScriptsToVin(vin: Vin): void { } } +// Adapted from bitcoinjs-lib at https://github.com/bitcoinjs/bitcoinjs-lib/blob/32e08aa57f6a023e995d8c4f0c9fbdc5f11d1fa0/ts_src/transaction.ts#L78 +// Reads buffer of raw transaction data function fromBuffer(buffer: Uint8Array, network: string): Transaction { let offset = 0; @@ -910,6 +917,7 @@ function txid(tx: Transaction): string { return uint8ArrayToHexString(hash2.reverse()); } +// Copied from mempool backend https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/api/transaction-utils.ts#L177 export function countSigops(transaction: Transaction): number { let sigops = 0; @@ -1213,6 +1221,7 @@ function varIntToBytes(value: number | bigint): number[] { return bytes; } +// Inversed the opcodes object from https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/utils/bitcoin-script.ts#L1 const opcodes = { 0: 'OP_0', 76: 'OP_PUSHDATA1', From 74ecd1aaac90789855ab1436b5d3eeba9ab830ff Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 28 Nov 2024 14:32:20 +0100 Subject: [PATCH 006/534] Fix missing prevouts message --- .../components/transaction/transaction-raw.component.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 15293e2dd..461d77bc4 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -43,7 +43,11 @@ @if (!hasPrevouts) {
- This transaction is missing prevouts data. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} + @if (offlineMode) { + Prevouts are not loaded, some fields like fee rate cannot be displayed. + } @else { + Could not load prevouts. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} + }
} From c8e967cc0c1563287fb1fc6096b96ac7efcbddb0 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 29 Nov 2024 16:04:54 +0100 Subject: [PATCH 007/534] [blocks] save pools-v2.json hash in blocks table --- backend/src/api/database-migration.ts | 8 +++++- backend/src/api/pools-parser.ts | 9 ------- backend/src/repositories/BlocksRepository.ts | 28 +++++++++++--------- 3 files changed, 22 insertions(+), 23 deletions(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 0c17ab9f1..b9d8530bb 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 = 91; + private static currentVersion = 92; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -775,6 +775,12 @@ class DatabaseMigration { await this.$executeQuery('ALTER TABLE `blocks_audits` ADD INDEX `time` (`time`)'); await this.updateToSchemaVersion(91); } + + // blocks pools-v2.json hash + if (databaseSchemaVersion < 92) { + await this.$executeQuery('ALTER TABLE `blocks` ADD definition_hash varchar(255) NOT NULL DEFAULT "5f32a67401929169f225f5db43c9efa795d1b159"'); + await this.updateToSchemaVersion(92); + } } /** diff --git a/backend/src/api/pools-parser.ts b/backend/src/api/pools-parser.ts index 289389d5e..2fd55d6c5 100644 --- a/backend/src/api/pools-parser.ts +++ b/backend/src/api/pools-parser.ts @@ -19,15 +19,6 @@ class PoolsParser { 'addresses': '[]', 'slug': 'unknown' }; - private uniqueLogs: string[] = []; - - private uniqueLog(loggerFunction: any, msg: string): void { - if (this.uniqueLogs.includes(msg)) { - return; - } - this.uniqueLogs.push(msg); - loggerFunction(msg); - } public setMiningPools(pools): void { for (const pool of pools) { diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 424a668c7..f673e574b 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -15,6 +15,7 @@ import blocks from '../api/blocks'; import BlocksAuditsRepository from './BlocksAuditsRepository'; import transactionUtils from '../api/transaction-utils'; import { parseDATUMTemplateCreator } from '../utils/bitcoin-script'; +import poolsUpdater from '../tasks/pools-updater'; interface DatabaseBlock { id: string; @@ -114,16 +115,16 @@ class BlocksRepository { try { const query = `INSERT INTO blocks( - height, hash, blockTimestamp, size, - weight, tx_count, coinbase_raw, difficulty, - pool_id, fees, fee_span, median_fee, - reward, version, bits, nonce, - merkle_root, previous_block_hash, avg_fee, avg_fee_rate, - median_timestamp, header, coinbase_address, coinbase_addresses, - coinbase_signature, utxoset_size, utxoset_change, avg_tx_size, - total_inputs, total_outputs, total_input_amt, total_output_amt, - fee_percentiles, segwit_total_txs, segwit_total_size, segwit_total_weight, - median_fee_amt, coinbase_signature_ascii + height, hash, blockTimestamp, size, + weight, tx_count, coinbase_raw, difficulty, + pool_id, fees, fee_span, median_fee, + reward, version, bits, nonce, + merkle_root, previous_block_hash, avg_fee, avg_fee_rate, + median_timestamp, header, coinbase_address, coinbase_addresses, + coinbase_signature, utxoset_size, utxoset_change, avg_tx_size, + total_inputs, total_outputs, total_input_amt, total_output_amt, + fee_percentiles, segwit_total_txs, segwit_total_size, segwit_total_weight, + median_fee_amt, coinbase_signature_ascii, definition_hash ) VALUE ( ?, ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, @@ -134,7 +135,7 @@ class BlocksRepository { ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - ?, ? + ?, ?, ? )`; const poolDbId = await PoolsRepository.$getPoolByUniqueId(block.extras.pool.id); @@ -181,6 +182,7 @@ class BlocksRepository { block.extras.segwitTotalWeight, block.extras.medianFeeAmt, truncatedCoinbaseSignatureAscii, + poolsUpdater.currentSha ]; await DB.query(query, params); @@ -1013,9 +1015,9 @@ class BlocksRepository { public async $savePool(id: string, poolId: number): Promise { try { await DB.query(` - UPDATE blocks SET pool_id = ? + UPDATE blocks SET pool_id = ?, definition_hash = ? WHERE hash = ?`, - [poolId, id] + [poolId, poolsUpdater.currentSha, id] ); } catch (e) { logger.err(`Cannot update block pool. Reason: ` + (e instanceof Error ? e.message : e)); From ac997f3d9e8456548f58b4b29bd253da3a2c8b9d Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 29 Nov 2024 17:13:28 +0100 Subject: [PATCH 008/534] [blocks] add 2 endpoints to retreive pools-v2.json hashes --- backend/src/api/bitcoin/bitcoin.routes.ts | 31 +++++++++++++++++++++++ backend/src/api/blocks.ts | 15 ++++++++++- backend/src/api/database-migration.ts | 1 + backend/src/mempool.interfaces.ts | 2 ++ backend/src/tasks/pools-updater.ts | 2 +- 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index d2d298e09..c95d89d0f 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -21,6 +21,7 @@ import transactionRepository from '../../repositories/TransactionRepository'; import rbfCache from '../rbf-cache'; import { calculateMempoolTxCpfp } from '../cpfp'; import { handleError } from '../../utils/api'; +import poolsUpdater from '../../tasks/pools-updater'; class BitcoinRoutes { public initRoutes(app: Application) { @@ -46,6 +47,8 @@ class BitcoinRoutes { .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) + .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/list', this.getBlockDefinitionHashes) + .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/current', this.getCurrentBlockDefinitionHash) .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)) @@ -657,6 +660,34 @@ class BitcoinRoutes { } } + private async getBlockDefinitionHashes(req: Request, res: Response) { + try { + const result = await blocks.$getBlockDefinitionHashes(); + if (!result) { + handleError(req, res, 503, `Service Temporarily Unavailable`); + return; + } + res.setHeader('content-type', 'application/json'); + res.send(result); + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } + + private async getCurrentBlockDefinitionHash(req: Request, res: Response) { + try { + const currentSha = await poolsUpdater.getShaFromDb(); + if (!currentSha) { + handleError(req, res, 503, `Service Temporarily Unavailable`); + return; + } + res.setHeader('content-type', 'text/plain'); + res.send(currentSha); + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } + private getBlockTipHeight(req: Request, res: Response) { try { const result = blocks.getCurrentBlockHeight(); diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index e621056ab..2b468a8f8 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -33,8 +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'; +import database from '../database'; class Blocks { private blocks: BlockExtended[] = []; @@ -1462,6 +1462,19 @@ class Blocks { // not a fatal error, we'll try again next time the indexer runs } } + + public async $getBlockDefinitionHashes(): Promise { + try { + const [rows]: any = await database.query(`SELECT DISTINCT(definition_hash) FROM blocks`); + if (rows && rows.length) { + return rows.map(r => r.definition_hash); + } + } catch (e) { + // we just return an empty array + } + logger.debug(`Unable to retreive list of blocks.definition_hash from db`); + return []; + } } export default new Blocks(); diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index b9d8530bb..47fd696e4 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -779,6 +779,7 @@ class DatabaseMigration { // blocks pools-v2.json hash if (databaseSchemaVersion < 92) { await this.$executeQuery('ALTER TABLE `blocks` ADD definition_hash varchar(255) NOT NULL DEFAULT "5f32a67401929169f225f5db43c9efa795d1b159"'); + await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `definition_hash` (`definition_hash`)'); await this.updateToSchemaVersion(92); } } diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index dc703af21..e1da4be6f 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -325,6 +325,8 @@ export interface BlockExtension { // Requires coinstatsindex, will be set to NULL otherwise utxoSetSize: number | null; totalInputAmt: number | null; + // pools-v2.json git hash + definitionHash: string | undefined; } /** diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index 652383a2a..502e3613f 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -121,7 +121,7 @@ class PoolsUpdater { /** * Fetch our latest pools-v2.json sha from the db */ - private async getShaFromDb(): Promise { + public async getShaFromDb(): Promise { try { const [rows]: any[] = await DB.query('SELECT string FROM state WHERE name="pools_json_sha"'); return (rows.length > 0 ? rows[0].string : null); From 4ff2aad94aeb7edef637cb76cf54f29254db91a3 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 29 Nov 2024 17:55:06 +0100 Subject: [PATCH 009/534] [blocks] return list of block hash filtered by definition hash --- backend/src/api/bitcoin/bitcoin.routes.ts | 28 +++++++++++++++++++---- backend/src/api/blocks.ts | 27 ++++++++++++++++++---- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index c95d89d0f..eb5cca6f8 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -47,13 +47,15 @@ class BitcoinRoutes { .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) - .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/list', this.getBlockDefinitionHashes) - .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/definition/current', this.getCurrentBlockDefinitionHash) .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) + // Internal routes + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/blocks/definition/list', this.getBlockDefinitionHashes) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/blocks/definition/current', this.getCurrentBlockDefinitionHash) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/blocks/:definitionHash', this.getBlocksByDefinitionHash) ; if (config.MEMPOOL.BACKEND !== 'esplora') { @@ -660,7 +662,7 @@ class BitcoinRoutes { } } - private async getBlockDefinitionHashes(req: Request, res: Response) { + private async getBlockDefinitionHashes(req: Request, res: Response): Promise { try { const result = await blocks.$getBlockDefinitionHashes(); if (!result) { @@ -674,7 +676,7 @@ class BitcoinRoutes { } } - private async getCurrentBlockDefinitionHash(req: Request, res: Response) { + private async getCurrentBlockDefinitionHash(req: Request, res: Response): Promise { try { const currentSha = await poolsUpdater.getShaFromDb(); if (!currentSha) { @@ -688,6 +690,24 @@ class BitcoinRoutes { } } + private async getBlocksByDefinitionHash(req: Request, res: Response): Promise { + try { + if (typeof(req.params.definitionHash) !== 'string') { + res.status(400).send('Parameter "hash" must be a valid string'); + return; + } + const blocksHash = await blocks.$getBlocksByDefinitionHash(req.params.definitionHash as string); + if (!blocksHash) { + handleError(req, res, 503, `Service Temporarily Unavailable`); + return; + } + res.setHeader('content-type', 'application/json'); + res.send(blocksHash); + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } + private getBlockTipHeight(req: Request, res: Response) { try { const result = blocks.getCurrentBlockHeight(); diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 2b468a8f8..102601594 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1463,17 +1463,34 @@ class Blocks { } } - public async $getBlockDefinitionHashes(): Promise { + public async $getBlockDefinitionHashes(): Promise { try { const [rows]: any = await database.query(`SELECT DISTINCT(definition_hash) FROM blocks`); - if (rows && rows.length) { + if (rows && Array.isArray(rows)) { return rows.map(r => r.definition_hash); + } else { + logger.debug(`Unable to retreive list of blocks.definition_hash from db (no result)`); + return null; } } catch (e) { - // we just return an empty array + logger.debug(`Unable to retreive list of blocks.definition_hash from db (exception: ${e})`); + return null; + } + } + + public async $getBlocksByDefinitionHash(definitionHash: string): Promise { + try { + const [rows]: any = await database.query(`SELECT hash FROM blocks WHERE definition_hash = ?`, [definitionHash]); + if (rows && Array.isArray(rows)) { + return rows.map(r => r.hash); + } else { + logger.debug(`Unable to retreive list of blocks for definition hash ${definitionHash} from db (no result)`); + return null; + } + } catch (e) { + logger.debug(`Unable to retreive list of blocks for definition hash ${definitionHash} from db (exception: ${e})`); + return null; } - logger.debug(`Unable to retreive list of blocks.definition_hash from db`); - return []; } } From 8670897a50f71a1d080c25f92c3a1793f2527800 Mon Sep 17 00:00:00 2001 From: wiz Date: Sat, 14 Dec 2024 21:01:37 +0900 Subject: [PATCH 010/534] ops: Remove fmt, add hnl + sg1 --- production/mempool-config.liquid.json | 14 ++++++---- production/mempool-config.liquidtestnet.json | 14 ++++++---- .../mempool-config.mainnet-lightning.json | 14 ++++++---- production/mempool-config.mainnet.json | 28 +++++++++++-------- .../mempool-config.signet-lightning.json | 14 ++++++---- production/mempool-config.signet.json | 14 ++++++---- .../mempool-config.testnet-lightning.json | 14 ++++++---- production/mempool-config.testnet.json | 14 ++++++---- production/mempool-config.testnet4.json | 14 ++++++---- 9 files changed, 80 insertions(+), 60 deletions(-) diff --git a/production/mempool-config.liquid.json b/production/mempool-config.liquid.json index 9051bba74..316f99305 100644 --- a/production/mempool-config.liquid.json +++ b/production/mempool-config.liquid.json @@ -26,12 +26,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/elements/socket/esplora-elements-liquid", "FALLBACK": [ - "http://node201.fmt.mempool.space:3001", - "http://node202.fmt.mempool.space:3001", - "http://node203.fmt.mempool.space:3001", - "http://node204.fmt.mempool.space:3001", - "http://node205.fmt.mempool.space:3001", - "http://node206.fmt.mempool.space:3001", + "http://node201.hnl.mempool.space:3001", + "http://node202.hnl.mempool.space:3001", + "http://node203.hnl.mempool.space:3001", + "http://node204.hnl.mempool.space:3001", + "http://node201.sg1.mempool.space:3001", + "http://node202.sg1.mempool.space:3001", + "http://node203.sg1.mempool.space:3001", + "http://node204.sg1.mempool.space:3001", "http://node201.va1.mempool.space:3001", "http://node202.va1.mempool.space:3001", "http://node203.va1.mempool.space:3001", diff --git a/production/mempool-config.liquidtestnet.json b/production/mempool-config.liquidtestnet.json index ae6d7b1ac..e42bbadd6 100644 --- a/production/mempool-config.liquidtestnet.json +++ b/production/mempool-config.liquidtestnet.json @@ -26,12 +26,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/elements/socket/esplora-elements-liquidtestnet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3004", - "http://node202.fmt.mempool.space:3004", - "http://node203.fmt.mempool.space:3004", - "http://node204.fmt.mempool.space:3004", - "http://node205.fmt.mempool.space:3004", - "http://node206.fmt.mempool.space:3004", + "http://node201.hnl.mempool.space:3004", + "http://node202.hnl.mempool.space:3004", + "http://node203.hnl.mempool.space:3004", + "http://node204.hnl.mempool.space:3004", + "http://node201.sg1.mempool.space:3004", + "http://node202.sg1.mempool.space:3004", + "http://node203.sg1.mempool.space:3004", + "http://node204.sg1.mempool.space:3004", "http://node201.va1.mempool.space:3004", "http://node202.va1.mempool.space:3004", "http://node203.va1.mempool.space:3004", diff --git a/production/mempool-config.mainnet-lightning.json b/production/mempool-config.mainnet-lightning.json index b113a3c8a..0ec117691 100644 --- a/production/mempool-config.mainnet-lightning.json +++ b/production/mempool-config.mainnet-lightning.json @@ -19,12 +19,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-mainnet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3000", - "http://node202.fmt.mempool.space:3000", - "http://node203.fmt.mempool.space:3000", - "http://node204.fmt.mempool.space:3000", - "http://node205.fmt.mempool.space:3000", - "http://node206.fmt.mempool.space:3000", + "http://node201.hnl.mempool.space:3000", + "http://node202.hnl.mempool.space:3000", + "http://node203.hnl.mempool.space:3000", + "http://node204.hnl.mempool.space:3000", + "http://node201.sg1.mempool.space:3000", + "http://node202.sg1.mempool.space:3000", + "http://node203.sg1.mempool.space:3000", + "http://node204.sg1.mempool.space:3000", "http://node201.va1.mempool.space:3000", "http://node202.va1.mempool.space:3000", "http://node203.va1.mempool.space:3000", diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 39d82d8d1..cf26b0798 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -40,12 +40,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-mainnet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3000", - "http://node202.fmt.mempool.space:3000", - "http://node203.fmt.mempool.space:3000", - "http://node204.fmt.mempool.space:3000", - "http://node205.fmt.mempool.space:3000", - "http://node206.fmt.mempool.space:3000", + "http://node201.hnl.mempool.space:3000", + "http://node202.hnl.mempool.space:3000", + "http://node203.hnl.mempool.space:3000", + "http://node204.hnl.mempool.space:3000", + "http://node201.sg1.mempool.space:3000", + "http://node202.sg1.mempool.space:3000", + "http://node203.sg1.mempool.space:3000", + "http://node204.sg1.mempool.space:3000", "http://node201.va1.mempool.space:3000", "http://node202.va1.mempool.space:3000", "http://node203.va1.mempool.space:3000", @@ -101,12 +103,14 @@ "STATISTICS": true, "STATISTICS_START_TIME": "24h", "SERVERS": [ - "node201.fmt.mempool.space", - "node202.fmt.mempool.space", - "node203.fmt.mempool.space", - "node204.fmt.mempool.space", - "node205.fmt.mempool.space", - "node206.fmt.mempool.space", + "node201.hnl.mempool.space", + "node202.hnl.mempool.space", + "node203.hnl.mempool.space", + "node204.hnl.mempool.space", + "node201.sg1.mempool.space", + "node202.sg1.mempool.space", + "node203.sg1.mempool.space", + "node204.sg1.mempool.space", "node201.va1.mempool.space", "node202.va1.mempool.space", "node203.va1.mempool.space", diff --git a/production/mempool-config.signet-lightning.json b/production/mempool-config.signet-lightning.json index c087a9104..01ea9c39a 100644 --- a/production/mempool-config.signet-lightning.json +++ b/production/mempool-config.signet-lightning.json @@ -19,12 +19,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-signet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3003", - "http://node202.fmt.mempool.space:3003", - "http://node203.fmt.mempool.space:3003", - "http://node204.fmt.mempool.space:3003", - "http://node205.fmt.mempool.space:3003", - "http://node206.fmt.mempool.space:3003", + "http://node201.hnl.mempool.space:3003", + "http://node202.hnl.mempool.space:3003", + "http://node203.hnl.mempool.space:3003", + "http://node204.hnl.mempool.space:3003", + "http://node201.sg1.mempool.space:3003", + "http://node202.sg1.mempool.space:3003", + "http://node203.sg1.mempool.space:3003", + "http://node204.sg1.mempool.space:3003", "http://node201.va1.mempool.space:3003", "http://node202.va1.mempool.space:3003", "http://node203.va1.mempool.space:3003", diff --git a/production/mempool-config.signet.json b/production/mempool-config.signet.json index 57cb37443..a0a2353cb 100644 --- a/production/mempool-config.signet.json +++ b/production/mempool-config.signet.json @@ -28,12 +28,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-signet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3003", - "http://node202.fmt.mempool.space:3003", - "http://node203.fmt.mempool.space:3003", - "http://node204.fmt.mempool.space:3003", - "http://node205.fmt.mempool.space:3003", - "http://node206.fmt.mempool.space:3003", + "http://node201.hnl.mempool.space:3003", + "http://node202.hnl.mempool.space:3003", + "http://node203.hnl.mempool.space:3003", + "http://node204.hnl.mempool.space:3003", + "http://node201.sg1.mempool.space:3003", + "http://node202.sg1.mempool.space:3003", + "http://node203.sg1.mempool.space:3003", + "http://node204.sg1.mempool.space:3003", "http://node201.va1.mempool.space:3003", "http://node202.va1.mempool.space:3003", "http://node203.va1.mempool.space:3003", diff --git a/production/mempool-config.testnet-lightning.json b/production/mempool-config.testnet-lightning.json index 130410dc4..02f7451db 100644 --- a/production/mempool-config.testnet-lightning.json +++ b/production/mempool-config.testnet-lightning.json @@ -19,12 +19,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-testnet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3002", - "http://node202.fmt.mempool.space:3002", - "http://node203.fmt.mempool.space:3002", - "http://node204.fmt.mempool.space:3002", - "http://node205.fmt.mempool.space:3002", - "http://node206.fmt.mempool.space:3002", + "http://node201.hnl.mempool.space:3002", + "http://node202.hnl.mempool.space:3002", + "http://node203.hnl.mempool.space:3002", + "http://node204.hnl.mempool.space:3002", + "http://node201.sg1.mempool.space:3002", + "http://node202.sg1.mempool.space:3002", + "http://node203.sg1.mempool.space:3002", + "http://node204.sg1.mempool.space:3002", "http://node201.va1.mempool.space:3002", "http://node202.va1.mempool.space:3002", "http://node203.va1.mempool.space:3002", diff --git a/production/mempool-config.testnet.json b/production/mempool-config.testnet.json index 1a216c54b..81cd61dc4 100644 --- a/production/mempool-config.testnet.json +++ b/production/mempool-config.testnet.json @@ -28,12 +28,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-testnet", "FALLBACK": [ - "http://node201.fmt.mempool.space:3002", - "http://node202.fmt.mempool.space:3002", - "http://node203.fmt.mempool.space:3002", - "http://node204.fmt.mempool.space:3002", - "http://node205.fmt.mempool.space:3002", - "http://node206.fmt.mempool.space:3002", + "http://node201.hnl.mempool.space:3002", + "http://node202.hnl.mempool.space:3002", + "http://node203.hnl.mempool.space:3002", + "http://node204.hnl.mempool.space:3002", + "http://node201.sg1.mempool.space:3002", + "http://node202.sg1.mempool.space:3002", + "http://node203.sg1.mempool.space:3002", + "http://node204.sg1.mempool.space:3002", "http://node201.va1.mempool.space:3002", "http://node202.va1.mempool.space:3002", "http://node203.va1.mempool.space:3002", diff --git a/production/mempool-config.testnet4.json b/production/mempool-config.testnet4.json index db7f68ea4..91373d223 100644 --- a/production/mempool-config.testnet4.json +++ b/production/mempool-config.testnet4.json @@ -28,12 +28,14 @@ "ESPLORA": { "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-testnet4", "FALLBACK": [ - "http://node201.fmt.mempool.space:3005", - "http://node202.fmt.mempool.space:3005", - "http://node203.fmt.mempool.space:3005", - "http://node204.fmt.mempool.space:3005", - "http://node205.fmt.mempool.space:3005", - "http://node206.fmt.mempool.space:3005", + "http://node201.hnl.mempool.space:3005", + "http://node202.hnl.mempool.space:3005", + "http://node203.hnl.mempool.space:3005", + "http://node204.hnl.mempool.space:3005", + "http://node201.sg1.mempool.space:3005", + "http://node202.sg1.mempool.space:3005", + "http://node203.sg1.mempool.space:3005", + "http://node204.sg1.mempool.space:3005", "http://node201.va1.mempool.space:3005", "http://node202.va1.mempool.space:3005", "http://node203.va1.mempool.space:3005", From 727f22bc9d919e4b660f1134c6ed61f1fc92d149 Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 9 Dec 2024 23:24:11 +0100 Subject: [PATCH 011/534] Add backend endpoint to fetch prevouts --- backend/src/api/bitcoin/bitcoin.routes.ts | 50 ++++++++++++++- backend/src/api/transaction-utils.ts | 23 +++++++ .../transaction-raw.component.html | 4 +- .../transaction/transaction-raw.component.ts | 62 +++++++------------ frontend/src/app/services/api.service.ts | 4 ++ 5 files changed, 101 insertions(+), 42 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index d2d298e09..0dbd4fa27 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -12,7 +12,7 @@ import backendInfo from '../backend-info'; import transactionUtils from '../transaction-utils'; import { IEsploraApi } from './esplora-api.interface'; import loadingIndicators from '../loading-indicators'; -import { TransactionExtended } from '../../mempool.interfaces'; +import { MempoolTransactionExtended, TransactionExtended } from '../../mempool.interfaces'; import logger from '../../logger'; import blocks from '../blocks'; import bitcoinClient from './bitcoin-client'; @@ -49,6 +49,7 @@ class BitcoinRoutes { .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)) + .post(config.MEMPOOL.API_URL_PREFIX + 'prevouts', this.$getPrevouts) // Temporarily add txs/package endpoint for all backends until esplora supports it .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) ; @@ -824,6 +825,53 @@ class BitcoinRoutes { } } + private async $getPrevouts(req: Request, res: Response) { + try { + const outpoints = req.body; + if (!Array.isArray(outpoints) || outpoints.some((item) => !/^[a-fA-F0-9]{64}$/.test(item.txid) || typeof item.vout !== 'number')) { + return res.status(400).json({ error: 'Invalid input format' }); + } + + if (outpoints.length > 100) { + return res.status(400).json({ error: 'Too many prevouts requested' }); + } + + const result = Array(outpoints.length).fill(null); + const memPool = mempool.getMempool(); + + for (let i = 0; i < outpoints.length; i++) { + const outpoint = outpoints[i]; + let prevout: IEsploraApi.Vout | null = null; + let tx: MempoolTransactionExtended | null = null; + + const mempoolTx = memPool[outpoint.txid]; + if (mempoolTx) { + prevout = mempoolTx.vout[outpoint.vout]; + tx = mempoolTx; + } else { + const rawPrevout = await bitcoinClient.getTxOut(outpoint.txid, outpoint.vout, false); + if (rawPrevout) { + prevout = { + value: Math.round(rawPrevout.value * 100000000), + scriptpubkey: rawPrevout.scriptPubKey.hex, + scriptpubkey_asm: rawPrevout.scriptPubKey.asm ? transactionUtils.convertScriptSigAsm(rawPrevout.scriptPubKey.hex) : '', + scriptpubkey_type: transactionUtils.translateScriptPubKeyType(rawPrevout.scriptPubKey.type), + scriptpubkey_address: rawPrevout.scriptPubKey && rawPrevout.scriptPubKey.address ? rawPrevout.scriptPubKey.address : '', + }; + } + } + + if (prevout) { + result[i] = { prevout, tx }; + } + } + + res.json(result); + + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } } export default new BitcoinRoutes(); diff --git a/backend/src/api/transaction-utils.ts b/backend/src/api/transaction-utils.ts index 28fa72bba..519527d5c 100644 --- a/backend/src/api/transaction-utils.ts +++ b/backend/src/api/transaction-utils.ts @@ -420,6 +420,29 @@ class TransactionUtils { return { prioritized, deprioritized }; } + + // Copied from https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/api/bitcoin/bitcoin-api.ts#L324 + public translateScriptPubKeyType(outputType: string): string { + const map = { + 'pubkey': 'p2pk', + 'pubkeyhash': 'p2pkh', + 'scripthash': 'p2sh', + 'witness_v0_keyhash': 'v0_p2wpkh', + 'witness_v0_scripthash': 'v0_p2wsh', + 'witness_v1_taproot': 'v1_p2tr', + 'nonstandard': 'nonstandard', + 'multisig': 'multisig', + 'anchor': 'anchor', + 'nulldata': 'op_return' + }; + + if (map[outputType]) { + return map[outputType]; + } else { + return 'unknown'; + } + } + } export default new TransactionUtils(); diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 461d77bc4..ca76d0e78 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -46,7 +46,7 @@ @if (offlineMode) { Prevouts are not loaded, some fields like fee rate cannot be displayed. } @else { - Could not load prevouts. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} + Error loading prevouts. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} }
} @@ -188,7 +188,7 @@ @if (isLoading) {
-

Loading transaction prevouts ({{ prevoutsLoadedCount }} / {{ prevoutsCount }})

+

Loading transaction prevouts

}
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index cac7b595f..c9a0c2544 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, HostListener, ViewChild, ElementRef, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '@interfaces/electrs.interface'; +import { Component, OnInit, HostListener, ViewChild, ElementRef, OnDestroy } from '@angular/core'; +import { Transaction, Vout } from '@interfaces/electrs.interface'; import { StateService } from '../../services/state.service'; import { Filter, toFilters } from '../../shared/filters.utils'; import { decodeRawTransaction, getTransactionFlags, addInnerScriptsToVin, countSigops } from '../../shared/transaction.utils'; @@ -28,8 +28,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { error: string; errorPrevouts: string; hasPrevouts: boolean; - prevoutsLoadedCount: number = 0; - prevoutsCount: number; + missingPrevouts: string[]; isLoadingBroadcast: boolean; errorBroadcast: string; successBroadcast: boolean; @@ -59,7 +58,6 @@ export class TransactionRawComponent implements OnInit, OnDestroy { public electrsApi: ElectrsApiService, public websocketService: WebsocketService, public formBuilder: UntypedFormBuilder, - public cd: ChangeDetectorRef, public seoService: SeoService, public apiService: ApiService, public relativeUrlPipe: RelativeUrlPipe, @@ -93,52 +91,38 @@ export class TransactionRawComponent implements OnInit, OnDestroy { return; } - this.prevoutsCount = transaction.vin.filter(input => !input.is_coinbase).length; - if (this.prevoutsCount === 0) { + const prevoutsToFetch = transaction.vin.map((input) => ({ txid: input.txid, vout: input.vout })); + + if (!prevoutsToFetch.length || transaction.vin[0].is_coinbase) { this.hasPrevouts = true; return; } - const txsToFetch: { [txid: string]: number } = transaction.vin.reduce((acc, input) => { - if (!input.is_coinbase) { - acc[input.txid] = (acc[input.txid] || 0) + 1; - } - return acc; - }, {} as { [txid: string]: number }); - try { + this.missingPrevouts = []; - if (Object.keys(txsToFetch).length > 20) { - throw new Error($localize`:@@transaction.too-many-prevouts:Too many transactions to fetch (${Object.keys(txsToFetch).length})`); + const prevouts: { prevout: Vout, tx?: any }[] = await firstValueFrom(this.apiService.getPrevouts$(prevoutsToFetch)); + + if (prevouts?.length !== prevoutsToFetch.length) { + throw new Error(); } - const fetchedTransactions = await Promise.all( - Object.keys(txsToFetch).map(txid => - firstValueFrom(this.electrsApi.getTransaction$(txid)) - .then(response => { - this.prevoutsLoadedCount += txsToFetch[txid]; - this.cd.markForCheck(); - return response; - }) - ) - ); - - const transactionsMap = fetchedTransactions.reduce((acc, transaction) => { - acc[transaction.txid] = transaction; - return acc; - }, {} as { [txid: string]: any }); - - const prevouts = transaction.vin.map((input, index) => ({ index, prevout: transactionsMap[input.txid]?.vout[input.vout] || null})); - transaction.vin = transaction.vin.map((input, index) => { - if (!input.is_coinbase) { - input.prevout = prevouts.find(p => p.index === index)?.prevout; + if (prevouts[index]) { + input.prevout = prevouts[index].prevout; addInnerScriptsToVin(input); + } else { + this.missingPrevouts.push(`${input.txid}:${input.vout}`); } return input; }); + + if (this.missingPrevouts.length) { + throw new Error(`Some prevouts do not exist or are already spent (${this.missingPrevouts.length})`); + } + this.hasPrevouts = true; - } catch (error) { + } catch (error) { this.errorPrevouts = error.message; } } @@ -207,6 +191,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { .subscribe((result) => { this.isLoadingBroadcast = false; this.successBroadcast = true; + this.transaction.txid = result; resolve(result); }, (error) => { @@ -232,8 +217,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.adjustedVsize = null; this.filters = []; this.hasPrevouts = false; - this.prevoutsLoadedCount = 0; - this.prevoutsCount = 0; + this.missingPrevouts = []; this.stateService.markBlock$.next({}); this.mempoolBlocksSubscription?.unsubscribe(); } diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 3c8cf8807..ce0e67cbf 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -565,6 +565,10 @@ export class ApiService { return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/acceleration/request/' + txid, ''); } + getPrevouts$(outpoints: {txid: string; vout: number}[]): Observable { + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/prevouts', outpoints); + } + // Cache methods async setBlockAuditLoaded(hash: string) { this.blockAuditLoaded[hash] = true; From d852c48370066f3aba8b58853c7a12f0c969eeee Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 16 Dec 2024 18:06:01 +0100 Subject: [PATCH 012/534] Move 'related transactions' to dedicated component --- .../transaction/cpfp-info.component.html | 56 ++++++++++++++++++ .../transaction/cpfp-info.component.scss | 32 ++++++++++ .../transaction/cpfp-info.component.ts | 22 +++++++ .../transaction/transaction.component.html | 59 +------------------ .../transaction/transaction.component.scss | 12 ---- .../transaction/transaction.component.ts | 4 -- .../transaction/transaction.module.ts | 3 + 7 files changed, 114 insertions(+), 74 deletions(-) create mode 100644 frontend/src/app/components/transaction/cpfp-info.component.html create mode 100644 frontend/src/app/components/transaction/cpfp-info.component.scss create mode 100644 frontend/src/app/components/transaction/cpfp-info.component.ts diff --git a/frontend/src/app/components/transaction/cpfp-info.component.html b/frontend/src/app/components/transaction/cpfp-info.component.html new file mode 100644 index 000000000..55945c388 --- /dev/null +++ b/frontend/src/app/components/transaction/cpfp-info.component.html @@ -0,0 +1,56 @@ +
+
+

Related Transactions

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeTXIDVirtual sizeWeightFee rate
Descendant + +
Descendant + +
Ancestor + +
+
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/cpfp-info.component.scss b/frontend/src/app/components/transaction/cpfp-info.component.scss new file mode 100644 index 000000000..df2b622e7 --- /dev/null +++ b/frontend/src/app/components/transaction/cpfp-info.component.scss @@ -0,0 +1,32 @@ +.title { + h2 { + line-height: 1; + margin: 0; + padding-bottom: 5px; + } +} + +.cpfp-details { + .txids { + width: 60%; + } + + @media (max-width: 500px) { + .txids { + width: 40%; + } + } +} + +.arrow-green { + color: var(--success); +} + +.arrow-red { + color: var(--red); +} + +.badge { + position: relative; + top: -1px; +} \ No newline at end of file diff --git a/frontend/src/app/components/transaction/cpfp-info.component.ts b/frontend/src/app/components/transaction/cpfp-info.component.ts new file mode 100644 index 000000000..3d122183b --- /dev/null +++ b/frontend/src/app/components/transaction/cpfp-info.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit, Input, ChangeDetectionStrategy } from '@angular/core'; +import { CpfpInfo } from '@interfaces/node-api.interface'; +import { Transaction } from '@interfaces/electrs.interface'; + +@Component({ + selector: 'app-cpfp-info', + templateUrl: './cpfp-info.component.html', + styleUrls: ['./cpfp-info.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class CpfpInfoComponent implements OnInit { + @Input() cpfpInfo: CpfpInfo; + @Input() tx: Transaction; + + constructor() {} + + ngOnInit(): void {} + + roundToOneDecimal(cpfpTx: any): number { + return +(cpfpTx.fee / (cpfpTx.weight / 4)).toFixed(1); + } +} diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 8c2d9de01..099d7beb5 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -66,64 +66,7 @@ - -
-
-

Related Transactions

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeTXIDVirtual sizeWeightFee rate
Descendant - -
Descendant - -
Ancestor - -
-
-
+ diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index d35f26130..fed9f742c 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -227,18 +227,6 @@ } } -.cpfp-details { - .txids { - width: 60%; - } - - @media (max-width: 500px) { - .txids { - width: 40%; - } - } -} - .tx-list { .alert-link { display: block; diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 71ffaa2cd..50ff32340 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -1054,10 +1054,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.stateService.markBlock$.next({}); } - roundToOneDecimal(cpfpTx: any): number { - return +(cpfpTx.fee / (cpfpTx.weight / 4)).toFixed(1); - } - setupGraph() { this.maxInOut = Math.min(this.inOutLimit, Math.max(this.tx?.vin?.length || 1, this.tx?.vout?.length + 1 || 1)); this.graphHeight = this.graphExpanded ? this.maxInOut * 15 : Math.min(360, this.maxInOut * 80); diff --git a/frontend/src/app/components/transaction/transaction.module.ts b/frontend/src/app/components/transaction/transaction.module.ts index 58b6493d8..a05191346 100644 --- a/frontend/src/app/components/transaction/transaction.module.ts +++ b/frontend/src/app/components/transaction/transaction.module.ts @@ -10,6 +10,7 @@ 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'; import { TransactionRawComponent } from '@components/transaction/transaction-raw.component'; +import { CpfpInfoComponent } from '@components/transaction/cpfp-info.component'; const routes: Routes = [ { @@ -55,12 +56,14 @@ export class TransactionRoutingModule { } AccelerateCheckout, AccelerateFeeGraphComponent, TransactionRawComponent, + CpfpInfoComponent, ], exports: [ TransactionComponent, TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, + CpfpInfoComponent, ] }) export class TransactionModule { } From 2987f86cd38214edda204b6ea428a039192619c1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 17 Dec 2024 19:42:31 +0100 Subject: [PATCH 013/534] Compute decoded tx CPFP data in the backend --- backend/src/api/bitcoin/bitcoin.routes.ts | 44 +++++++++-- backend/src/api/cpfp.ts | 28 +++++++ .../transaction-raw.component.html | 15 +++- .../transaction/transaction-raw.component.ts | 79 +++++++++++++++---- frontend/src/app/services/api.service.ts | 4 + 5 files changed, 144 insertions(+), 26 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 0dbd4fa27..91dcf35c5 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -12,14 +12,14 @@ import backendInfo from '../backend-info'; import transactionUtils from '../transaction-utils'; import { IEsploraApi } from './esplora-api.interface'; import loadingIndicators from '../loading-indicators'; -import { MempoolTransactionExtended, TransactionExtended } from '../../mempool.interfaces'; +import { TransactionExtended } from '../../mempool.interfaces'; import logger from '../../logger'; import blocks from '../blocks'; import bitcoinClient from './bitcoin-client'; import difficultyAdjustment from '../difficulty-adjustment'; import transactionRepository from '../../repositories/TransactionRepository'; import rbfCache from '../rbf-cache'; -import { calculateMempoolTxCpfp } from '../cpfp'; +import { calculateMempoolTxCpfp, calculateLocalTxCpfp } from '../cpfp'; import { handleError } from '../../utils/api'; class BitcoinRoutes { @@ -50,6 +50,7 @@ class BitcoinRoutes { .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)) .post(config.MEMPOOL.API_URL_PREFIX + 'prevouts', this.$getPrevouts) + .post(config.MEMPOOL.API_URL_PREFIX + 'cpfp', this.getCpfpLocalTx) // Temporarily add txs/package endpoint for all backends until esplora supports it .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) ; @@ -829,11 +830,11 @@ class BitcoinRoutes { try { const outpoints = req.body; if (!Array.isArray(outpoints) || outpoints.some((item) => !/^[a-fA-F0-9]{64}$/.test(item.txid) || typeof item.vout !== 'number')) { - return res.status(400).json({ error: 'Invalid input format' }); + return res.status(400).json({ message: 'Invalid input format' }); } if (outpoints.length > 100) { - return res.status(400).json({ error: 'Too many prevouts requested' }); + return res.status(400).json({ message: 'Too many prevouts requested' }); } const result = Array(outpoints.length).fill(null); @@ -842,12 +843,14 @@ class BitcoinRoutes { for (let i = 0; i < outpoints.length; i++) { const outpoint = outpoints[i]; let prevout: IEsploraApi.Vout | null = null; - let tx: MempoolTransactionExtended | null = null; + let unconfirmed: boolean | null = null; const mempoolTx = memPool[outpoint.txid]; if (mempoolTx) { - prevout = mempoolTx.vout[outpoint.vout]; - tx = mempoolTx; + if (outpoint.vout < mempoolTx.vout.length) { + prevout = mempoolTx.vout[outpoint.vout]; + unconfirmed = true; + } } else { const rawPrevout = await bitcoinClient.getTxOut(outpoint.txid, outpoint.vout, false); if (rawPrevout) { @@ -858,11 +861,12 @@ class BitcoinRoutes { scriptpubkey_type: transactionUtils.translateScriptPubKeyType(rawPrevout.scriptPubKey.type), scriptpubkey_address: rawPrevout.scriptPubKey && rawPrevout.scriptPubKey.address ? rawPrevout.scriptPubKey.address : '', }; + unconfirmed = false; } } if (prevout) { - result[i] = { prevout, tx }; + result[i] = { prevout, unconfirmed }; } } @@ -872,6 +876,30 @@ class BitcoinRoutes { handleError(req, res, 500, e instanceof Error ? e.message : e); } } + + private getCpfpLocalTx(req: Request, res: Response) { + try { + const tx = req.body; + + if ( + !tx || typeof tx !== "object" || + !tx.txid || typeof tx.txid !== "string" || + typeof tx.weight !== "number" || + typeof tx.sigops !== "number" || + typeof tx.fee !== "number" || + !Array.isArray(tx.vin) || + !Array.isArray(tx.vout) + ) { + return res.status(400).json({ message: 'Invalid transaction format: missing or incorrect fields' }); + } + + const cpfpInfo = calculateLocalTxCpfp(tx, mempool.getMempool()); + res.json(cpfpInfo); + + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } } export default new BitcoinRoutes(); diff --git a/backend/src/api/cpfp.ts b/backend/src/api/cpfp.ts index 9da11328b..3421d9c7a 100644 --- a/backend/src/api/cpfp.ts +++ b/backend/src/api/cpfp.ts @@ -222,6 +222,34 @@ export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: }; } + +/** + * Takes an unbroadcasted transaction and a copy of the current mempool, and calculates an estimate + * of the CPFP data if the transaction were to enter the mempool. This only returns potential ancerstors + * and effective fee rate, and does not update the CPFP data of other transactions in the cluster. + */ +export function calculateLocalTxCpfp(tx: MempoolTransactionExtended, mempool: { [txid: string]: MempoolTransactionExtended }): CpfpInfo { + const ancestorMap = new Map(); + const graphTx = convertToGraphTx(tx, memPool.getSpendMap()); + ancestorMap.set(tx.txid, graphTx); + + const allRelatives = expandRelativesGraph(mempool, ancestorMap, memPool.getSpendMap()); + const relativesMap = initializeRelatives(allRelatives); + const cluster = calculateCpfpCluster(tx.txid, relativesMap); + + let totalVsize = 0; + let totalFee = 0; + for (const tx of cluster.values()) { + totalVsize += tx.vsize; + totalFee += tx.fees.base; + } + + return { + ancestors: Array.from(cluster.get(tx.txid)?.ancestors.values() || []).map(ancestor => ({ txid: ancestor.txid, weight: ancestor.weight, fee: ancestor.fees.base })), + effectiveFeePerVsize: totalFee / totalVsize + } +} + /** * Given a root transaction and a list of in-mempool ancestors, * Calculate the CPFP cluster diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index ca76d0e78..b6286779a 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -51,6 +51,12 @@
} + @if (errorCpfpInfo) { +
+ Error loading CPFP data. Reason: {{ errorCpfpInfo }} +
+ } + +
@@ -188,7 +197,9 @@ @if (isLoading) {
-

Loading transaction prevouts

+

+ Loading {{ isLoadingPrevouts ? 'transaction prevouts' : isLoadingCpfpInfo ? 'CPFP' : '' }} +

}
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index c9a0c2544..441a72f61 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -13,6 +13,7 @@ import { SeoService } from '../../services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { ApiService } from '../../services/api.service'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { CpfpInfo } from '../../interfaces/node-api.interface'; @Component({ selector: 'app-transaction-raw', @@ -23,10 +24,13 @@ export class TransactionRawComponent implements OnInit, OnDestroy { pushTxForm: UntypedFormGroup; isLoading: boolean; + isLoadingPrevouts: boolean; + isLoadingCpfpInfo: boolean; offlineMode: boolean = false; transaction: Transaction; error: string; errorPrevouts: string; + errorCpfpInfo: string; hasPrevouts: boolean; missingPrevouts: string[]; isLoadingBroadcast: boolean; @@ -46,6 +50,10 @@ export class TransactionRawComponent implements OnInit, OnDestroy { flowEnabled: boolean; adjustedVsize: number; filters: Filter[] = []; + hasEffectiveFeeRate: boolean; + fetchCpfp: boolean; + cpfpInfo: CpfpInfo | null; + hasCpfp: boolean = false; showCpfpDetails = false; ETA$: Observable; mempoolBlocksSubscription: Subscription; @@ -78,6 +86,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { try { const tx = decodeRawTransaction(this.pushTxForm.get('txRaw').value, this.stateService.network); await this.fetchPrevouts(tx); + await this.fetchCpfpInfo(tx); this.processTransaction(tx); } catch (error) { this.error = error.message; @@ -100,8 +109,9 @@ export class TransactionRawComponent implements OnInit, OnDestroy { try { this.missingPrevouts = []; + this.isLoadingPrevouts = true; - const prevouts: { prevout: Vout, tx?: any }[] = await firstValueFrom(this.apiService.getPrevouts$(prevoutsToFetch)); + const prevouts: { prevout: Vout, unconfirmed: boolean }[] = await firstValueFrom(this.apiService.getPrevouts$(prevoutsToFetch)); if (prevouts?.length !== prevoutsToFetch.length) { throw new Error(); @@ -121,27 +131,57 @@ export class TransactionRawComponent implements OnInit, OnDestroy { throw new Error(`Some prevouts do not exist or are already spent (${this.missingPrevouts.length})`); } + transaction.fee = transaction.vin.some(input => input.is_coinbase) + ? 0 + : transaction.vin.reduce((fee, input) => { + return fee + (input.prevout?.value || 0); + }, 0) - transaction.vout.reduce((sum, output) => sum + output.value, 0); + transaction.feePerVsize = transaction.fee / (transaction.weight / 4); + transaction.sigops = countSigops(transaction); + this.hasPrevouts = true; + this.isLoadingPrevouts = false; + this.fetchCpfp = prevouts.some(prevout => prevout?.unconfirmed); + } catch (error) { + this.errorPrevouts = error?.error?.message || error?.message; + this.isLoadingPrevouts = false; + } + } + + async fetchCpfpInfo(transaction: Transaction): Promise { + // Fetch potential cpfp data if all prevouts were parsed successfully and at least one of them is unconfirmed + if (this.hasPrevouts && this.fetchCpfp) { + try { + this.isLoadingCpfpInfo = true; + const cpfpInfo: CpfpInfo = await firstValueFrom(this.apiService.getCpfpLocalTx$({ + txid: transaction.txid, + weight: transaction.weight, + sigops: transaction.sigops, + fee: transaction.fee, + vin: transaction.vin, + vout: transaction.vout + })); + + if (cpfpInfo && cpfpInfo.ancestors.length > 0) { + const { ancestors, effectiveFeePerVsize } = cpfpInfo; + transaction.effectiveFeePerVsize = effectiveFeePerVsize; + this.cpfpInfo = { ancestors, effectiveFeePerVsize }; + this.hasCpfp = true; + this.hasEffectiveFeeRate = true; + } + this.isLoadingCpfpInfo = false; } catch (error) { - this.errorPrevouts = error.message; + this.errorCpfpInfo = error?.error?.message || error?.message; + this.isLoadingCpfpInfo = false; + } } } processTransaction(tx: Transaction): void { this.transaction = tx; - if (this.hasPrevouts) { - this.transaction.fee = this.transaction.vin.some(input => input.is_coinbase) - ? 0 - : this.transaction.vin.reduce((fee, input) => { - return fee + (input.prevout?.value || 0); - }, 0) - this.transaction.vout.reduce((sum, output) => sum + output.value, 0); - this.transaction.feePerVsize = this.transaction.fee / (this.transaction.weight / 4); - } - this.transaction.flags = getTransactionFlags(this.transaction, null, null, null, this.stateService.network); this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; - this.transaction.sigops = countSigops(this.transaction); if (this.transaction.sigops >= 0) { this.adjustedVsize = Math.max(this.transaction.weight / 4, this.transaction.sigops * 5); } @@ -155,16 +195,15 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.setGraphSize(); this.ETA$ = combineLatest([ - this.stateService.mempoolTxPosition$.pipe(startWith(null)), this.stateService.mempoolBlocks$.pipe(startWith(null)), this.stateService.difficultyAdjustment$.pipe(startWith(null)), ]).pipe( - map(([position, mempoolBlocks, da]) => { + map(([mempoolBlocks, da]) => { return this.etaService.calculateETA( this.stateService.network, this.transaction, mempoolBlocks, - position, + null, da, null, null, @@ -177,7 +216,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { if (this.transaction) { this.stateService.markBlock$.next({ txid: this.transaction.txid, - txFeePerVSize: this.transaction.feePerVsize, + txFeePerVSize: this.transaction.effectiveFeePerVsize || this.transaction.feePerVsize, }); } }); @@ -214,7 +253,15 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.errorBroadcast = null; this.successBroadcast = false; this.isLoading = false; + this.isLoadingPrevouts = false; + this.isLoadingCpfpInfo = false; + this.isLoadingBroadcast = false; this.adjustedVsize = null; + this.showCpfpDetails = false; + this.hasCpfp = false; + this.fetchCpfp = false; + this.cpfpInfo = null; + this.hasEffectiveFeeRate = false; this.filters = []; this.hasPrevouts = false; this.missingPrevouts = []; diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index ce0e67cbf..698eede91 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -569,6 +569,10 @@ export class ApiService { return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/prevouts', outpoints); } + getCpfpLocalTx$(tx: any): Observable { + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp', tx); + } + // Cache methods async setBlockAuditLoaded(hash: string) { this.blockAuditLoaded[hash] = true; From c9b9485313f18c3672c9483a02c86e4239af5d30 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 22 Dec 2024 22:40:35 +0800 Subject: [PATCH 014/534] [faucet] add new error message when no utxo available --- frontend/src/app/components/faucet/faucet.component.ts | 2 +- .../shared/components/mempool-error/mempool-error.component.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/faucet/faucet.component.ts b/frontend/src/app/components/faucet/faucet.component.ts index 33d9a849e..6bf55ebac 100644 --- a/frontend/src/app/components/faucet/faucet.component.ts +++ b/frontend/src/app/components/faucet/faucet.component.ts @@ -24,7 +24,7 @@ export class FaucetComponent implements OnInit, OnDestroy { min: number; // minimum amount to request at once (in sats) max: number; // maximum amount to request at once address?: string; // faucet address - code: 'ok' | 'faucet_not_available' | 'faucet_maximum_reached' | 'faucet_too_soon'; + code: 'ok' | 'faucet_not_available' | 'faucet_maximum_reached' | 'faucet_too_soon' | 'faucet_not_available_no_utxo'; } | null = null; faucetForm: FormGroup; diff --git a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts index f105a9655..7eb9bb5eb 100644 --- a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts +++ b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts @@ -26,6 +26,7 @@ export const MempoolErrors = { 'unauthorized': `You are not authorized to do this`, 'faucet_too_soon': `You cannot request any more coins right now. Try again later.`, 'faucet_not_available': `The faucet is not available right now. Try again later.`, + 'faucet_not_available_no_utxo': `The faucet is not available right now. Please try again once a new block has been mined.`, 'faucet_maximum_reached': `You are not allowed to request more coins`, 'faucet_address_not_allowed': `You cannot use this address`, 'faucet_below_minimum': `Requested amount is too small`, From ff235760b2c378e9e16e5a32fc8ae7a998f514f9 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 27 Dec 2024 15:37:36 +0800 Subject: [PATCH 015/534] [fido] logout localstorage update --- frontend/src/app/services/auth.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/services/auth.service.ts b/frontend/src/app/services/auth.service.ts index db910779e..319bf8ef9 100644 --- a/frontend/src/app/services/auth.service.ts +++ b/frontend/src/app/services/auth.service.ts @@ -58,6 +58,7 @@ export class AuthServiceMempool { setAuth(auth: any) { if (!auth) { localStorage.removeItem('auth'); + localStorage.removeItem('authenticatorStatus'); } else { localStorage.setItem('auth', JSON.stringify(auth)); } From e77dd114f457ad9ab4c78882ab712ab585c1d69f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 02:15:20 +0000 Subject: [PATCH 016/534] Bump echarts from 5.5.0 to 5.6.0 in /frontend Bumps [echarts](https://github.com/apache/echarts) from 5.5.0 to 5.6.0. - [Release notes](https://github.com/apache/echarts/releases) - [Commits](https://github.com/apache/echarts/compare/5.5.0...5.6.0) --- updated-dependencies: - dependency-name: echarts dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 30 +++++++++++++++--------------- frontend/package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c59a85671..932979e2b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,7 +33,7 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~5.5.0", + "echarts": "~5.6.0", "esbuild": "^0.24.0", "ngx-echarts": "~17.2.0", "ngx-infinite-scroll": "^17.0.0", @@ -8724,12 +8724,12 @@ } }, "node_modules/echarts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", - "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", "dependencies": { "tslib": "2.3.0", - "zrender": "5.5.0" + "zrender": "5.6.1" } }, "node_modules/echarts/node_modules/tslib": { @@ -18366,9 +18366,9 @@ } }, "node_modules/zrender": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz", - "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", "dependencies": { "tslib": "2.3.0" } @@ -24485,12 +24485,12 @@ } }, "echarts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", - "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", "requires": { "tslib": "2.3.0", - "zrender": "5.5.0" + "zrender": "5.6.1" }, "dependencies": { "tslib": { @@ -31485,9 +31485,9 @@ } }, "zrender": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz", - "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", "requires": { "tslib": "2.3.0" }, diff --git a/frontend/package.json b/frontend/package.json index 2910b8869..b50085a54 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -86,7 +86,7 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~5.5.0", + "echarts": "~5.6.0", "ngx-echarts": "~17.2.0", "ngx-infinite-scroll": "^17.0.0", "qrcode": "1.5.1", From 74fa3c7eb1654279c1454c04d1c47b6ad3827827 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 1 Jan 2025 16:51:34 +0000 Subject: [PATCH 017/534] conform getPrevouts and getCpfpLocalTx to new error handling standard --- backend/src/api/bitcoin/bitcoin.routes.ts | 25 +++++++++++-------- .../transaction/transaction-raw.component.ts | 5 ++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index f92b7cd0c..0e9016bde 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -936,11 +936,13 @@ class BitcoinRoutes { try { const outpoints = req.body; if (!Array.isArray(outpoints) || outpoints.some((item) => !/^[a-fA-F0-9]{64}$/.test(item.txid) || typeof item.vout !== 'number')) { - return res.status(400).json({ message: 'Invalid input format' }); + handleError(req, res, 400, 'Invalid outpoints format'); + return; } if (outpoints.length > 100) { - return res.status(400).json({ message: 'Too many prevouts requested' }); + handleError(req, res, 400, 'Too many outpoints requested'); + return; } const result = Array(outpoints.length).fill(null); @@ -955,7 +957,7 @@ class BitcoinRoutes { if (mempoolTx) { if (outpoint.vout < mempoolTx.vout.length) { prevout = mempoolTx.vout[outpoint.vout]; - unconfirmed = true; + unconfirmed = true; } } else { const rawPrevout = await bitcoinClient.getTxOut(outpoint.txid, outpoint.vout, false); @@ -979,7 +981,7 @@ class BitcoinRoutes { res.json(result); } catch (e) { - handleError(req, res, 500, e instanceof Error ? e.message : e); + handleError(req, res, 500, 'Failed to get prevouts'); } } @@ -988,22 +990,23 @@ class BitcoinRoutes { const tx = req.body; if ( - !tx || typeof tx !== "object" || - !tx.txid || typeof tx.txid !== "string" || - typeof tx.weight !== "number" || - typeof tx.sigops !== "number" || - typeof tx.fee !== "number" || + !tx || typeof tx !== 'object' || + !tx.txid || typeof tx.txid !== 'string' || + typeof tx.weight !== 'number' || + typeof tx.sigops !== 'number' || + typeof tx.fee !== 'number' || !Array.isArray(tx.vin) || !Array.isArray(tx.vout) ) { - return res.status(400).json({ message: 'Invalid transaction format: missing or incorrect fields' }); + handleError(req, res, 400, 'Invalid transaction format'); + return; } const cpfpInfo = calculateLocalTxCpfp(tx, mempool.getMempool()); res.json(cpfpInfo); } catch (e) { - handleError(req, res, 500, e instanceof Error ? e.message : e); + handleError(req, res, 500, 'Failed to calculate CPFP info'); } } } diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 441a72f61..80f3eeb93 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -143,7 +143,8 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.isLoadingPrevouts = false; this.fetchCpfp = prevouts.some(prevout => prevout?.unconfirmed); } catch (error) { - this.errorPrevouts = error?.error?.message || error?.message; + console.log(error); + this.errorPrevouts = error?.error?.error || error?.message; this.isLoadingPrevouts = false; } } @@ -171,7 +172,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { } this.isLoadingCpfpInfo = false; } catch (error) { - this.errorCpfpInfo = error?.error?.message || error?.message; + this.errorCpfpInfo = error?.error?.error || error?.message; this.isLoadingCpfpInfo = false; } } From 5b331c144ba2498df23969a97fc257f227f1f9d8 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 8 Jan 2025 15:25:19 +0100 Subject: [PATCH 018/534] P2A address format decoding --- frontend/src/app/shared/transaction.utils.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index af1412838..b33d88c2f 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -988,7 +988,7 @@ function scriptPubKeyToAddress(scriptPubKey: string, network: string): { address } // anchor if (scriptPubKey === '51024e73') { - return { address: 'bc1pfeessrawgf', type: 'anchor' }; + return { address: p2a(network), type: 'anchor' }; } // op_return if (/^6a/.test(scriptPubKey)) { @@ -1048,6 +1048,15 @@ function p2tr(pubKeyHash: string, network: string): string { return bech32Address; } +function p2a(network: string): string { + const pubkeyHashArray = hexStringToUint8Array('4e73'); + const hrp = ['testnet', 'testnet4', 'signet'].includes(network) ? 'tb' : 'bc'; + const version = 1; + const words = [version].concat(toWords(pubkeyHashArray)); + const bech32Address = bech32Encode(hrp, words, 0x2bc830a3); + return bech32Address; +} + // base58 encoding function base58Encode(data: Uint8Array): string { const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; From af0c78be8129c0510dfcfe8827f17e13ec12d229 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 7 Jan 2025 15:01:36 +0100 Subject: [PATCH 019/534] Handle error from bitcoin client when querying prevouts --- backend/src/api/bitcoin/bitcoin.routes.ts | 24 +++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 0e9016bde..545ad510c 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -960,16 +960,20 @@ class BitcoinRoutes { unconfirmed = true; } } else { - const rawPrevout = await bitcoinClient.getTxOut(outpoint.txid, outpoint.vout, false); - if (rawPrevout) { - prevout = { - value: Math.round(rawPrevout.value * 100000000), - scriptpubkey: rawPrevout.scriptPubKey.hex, - scriptpubkey_asm: rawPrevout.scriptPubKey.asm ? transactionUtils.convertScriptSigAsm(rawPrevout.scriptPubKey.hex) : '', - scriptpubkey_type: transactionUtils.translateScriptPubKeyType(rawPrevout.scriptPubKey.type), - scriptpubkey_address: rawPrevout.scriptPubKey && rawPrevout.scriptPubKey.address ? rawPrevout.scriptPubKey.address : '', - }; - unconfirmed = false; + try { + const rawPrevout = await bitcoinClient.getTxOut(outpoint.txid, outpoint.vout, false); + if (rawPrevout) { + prevout = { + value: Math.round(rawPrevout.value * 100000000), + scriptpubkey: rawPrevout.scriptPubKey.hex, + scriptpubkey_asm: rawPrevout.scriptPubKey.asm ? transactionUtils.convertScriptSigAsm(rawPrevout.scriptPubKey.hex) : '', + scriptpubkey_type: transactionUtils.translateScriptPubKeyType(rawPrevout.scriptPubKey.type), + scriptpubkey_address: rawPrevout.scriptPubKey && rawPrevout.scriptPubKey.address ? rawPrevout.scriptPubKey.address : '', + }; + unconfirmed = false; + } + } catch (e) { + // Ignore bitcoin client errors, just leave prevout as null } } From 6c95cd21491cfb377a14fd82f82e773a16d20d79 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 8 Jan 2025 15:07:37 +0100 Subject: [PATCH 020/534] Update local cpfp API to accept array of transactions --- backend/src/api/bitcoin/bitcoin.routes.ts | 23 +++++++++++-------- backend/src/api/cpfp.ts | 1 - .../transaction/transaction-raw.component.ts | 8 +++---- frontend/src/app/services/api.service.ts | 4 ++-- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 545ad510c..d49cd95b2 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -55,7 +55,7 @@ class BitcoinRoutes { .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)) .post(config.MEMPOOL.API_URL_PREFIX + 'prevouts', this.$getPrevouts) - .post(config.MEMPOOL.API_URL_PREFIX + 'cpfp', this.getCpfpLocalTx) + .post(config.MEMPOOL.API_URL_PREFIX + 'cpfp', this.getCpfpLocalTxs) // Temporarily add txs/package endpoint for all backends until esplora supports it .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) ; @@ -989,25 +989,30 @@ class BitcoinRoutes { } } - private getCpfpLocalTx(req: Request, res: Response) { + private getCpfpLocalTxs(req: Request, res: Response) { try { - const tx = req.body; + const transactions = req.body; - if ( + if (!Array.isArray(transactions) || transactions.some(tx => !tx || typeof tx !== 'object' || - !tx.txid || typeof tx.txid !== 'string' || + !/^[a-fA-F0-9]{64}$/.test(tx.txid) || typeof tx.weight !== 'number' || typeof tx.sigops !== 'number' || typeof tx.fee !== 'number' || !Array.isArray(tx.vin) || !Array.isArray(tx.vout) - ) { - handleError(req, res, 400, 'Invalid transaction format'); + )) { + handleError(req, res, 400, 'Invalid transactions format'); return; } - const cpfpInfo = calculateLocalTxCpfp(tx, mempool.getMempool()); - res.json(cpfpInfo); + if (transactions.length > 1) { + handleError(req, res, 400, 'More than one transaction is not supported yet'); + return; + } + + const cpfpInfo = calculateLocalTxCpfp(transactions[0], mempool.getMempool()); + res.json([cpfpInfo]); } catch (e) { handleError(req, res, 500, 'Failed to calculate CPFP info'); diff --git a/backend/src/api/cpfp.ts b/backend/src/api/cpfp.ts index 3421d9c7a..2b9f90542 100644 --- a/backend/src/api/cpfp.ts +++ b/backend/src/api/cpfp.ts @@ -222,7 +222,6 @@ export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: }; } - /** * Takes an unbroadcasted transaction and a copy of the current mempool, and calculates an estimate * of the CPFP data if the transaction were to enter the mempool. This only returns potential ancerstors diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 80f3eeb93..8917dce87 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -154,17 +154,17 @@ export class TransactionRawComponent implements OnInit, OnDestroy { if (this.hasPrevouts && this.fetchCpfp) { try { this.isLoadingCpfpInfo = true; - const cpfpInfo: CpfpInfo = await firstValueFrom(this.apiService.getCpfpLocalTx$({ + const cpfpInfo: CpfpInfo[] = await firstValueFrom(this.apiService.getCpfpLocalTx$([{ txid: transaction.txid, weight: transaction.weight, sigops: transaction.sigops, fee: transaction.fee, vin: transaction.vin, vout: transaction.vout - })); + }])); - if (cpfpInfo && cpfpInfo.ancestors.length > 0) { - const { ancestors, effectiveFeePerVsize } = cpfpInfo; + if (cpfpInfo?.[0]?.ancestors?.length) { + const { ancestors, effectiveFeePerVsize } = cpfpInfo[0]; transaction.effectiveFeePerVsize = effectiveFeePerVsize; this.cpfpInfo = { ancestors, effectiveFeePerVsize }; this.hasCpfp = true; diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 698eede91..d958bfa25 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -569,8 +569,8 @@ export class ApiService { return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/prevouts', outpoints); } - getCpfpLocalTx$(tx: any): Observable { - return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp', tx); + getCpfpLocalTx$(tx: any[]): Observable { + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp', tx); } // Cache methods From 860bc7d14db79b9e64632d17bc479fa63cbd78e8 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 9 Jan 2025 14:35:34 +0100 Subject: [PATCH 021/534] Merge calculateMempoolTxCpfp and calculateLocalTxCpfp --- backend/src/api/bitcoin/bitcoin.routes.ts | 4 +- backend/src/api/cpfp.ts | 60 +++++++++-------------- 2 files changed, 24 insertions(+), 40 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index d49cd95b2..cb1bb0696 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -19,7 +19,7 @@ import bitcoinClient from './bitcoin-client'; import difficultyAdjustment from '../difficulty-adjustment'; import transactionRepository from '../../repositories/TransactionRepository'; import rbfCache from '../rbf-cache'; -import { calculateMempoolTxCpfp, calculateLocalTxCpfp } from '../cpfp'; +import { calculateMempoolTxCpfp } from '../cpfp'; import { handleError } from '../../utils/api'; const TXID_REGEX = /^[a-f0-9]{64}$/i; @@ -1011,7 +1011,7 @@ class BitcoinRoutes { return; } - const cpfpInfo = calculateLocalTxCpfp(transactions[0], mempool.getMempool()); + const cpfpInfo = calculateMempoolTxCpfp(transactions[0], mempool.getMempool(), true); res.json([cpfpInfo]); } catch (e) { diff --git a/backend/src/api/cpfp.ts b/backend/src/api/cpfp.ts index 2b9f90542..953664fcc 100644 --- a/backend/src/api/cpfp.ts +++ b/backend/src/api/cpfp.ts @@ -167,8 +167,10 @@ export function calculateGoodBlockCpfp(height: number, transactions: MempoolTran /** * Takes a mempool transaction and a copy of the current mempool, and calculates the CPFP data for * that transaction (and all others in the same cluster) + * If the passed transaction is not guaranteed to be in the mempool, set localTx to true: this will + * prevent updating the CPFP data of other transactions in the cluster */ -export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: { [txid: string]: MempoolTransactionExtended }): CpfpInfo { +export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: { [txid: string]: MempoolTransactionExtended }, localTx: boolean = false): CpfpInfo { if (tx.cpfpUpdated && Date.now() < (tx.cpfpUpdated + CPFP_UPDATE_INTERVAL)) { tx.cpfpDirty = false; return { @@ -198,17 +200,26 @@ export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: totalFee += tx.fees.base; } const effectiveFeePerVsize = totalFee / totalVsize; - for (const tx of cluster.values()) { - mempool[tx.txid].effectiveFeePerVsize = effectiveFeePerVsize; - mempool[tx.txid].ancestors = Array.from(tx.ancestors.values()).map(tx => ({ txid: tx.txid, weight: tx.weight, fee: tx.fees.base })); - mempool[tx.txid].descendants = Array.from(cluster.values()).filter(entry => entry.txid !== tx.txid && !tx.ancestors.has(entry.txid)).map(tx => ({ txid: tx.txid, weight: tx.weight, fee: tx.fees.base })); - mempool[tx.txid].bestDescendant = null; - mempool[tx.txid].cpfpChecked = true; - mempool[tx.txid].cpfpDirty = true; - mempool[tx.txid].cpfpUpdated = Date.now(); - } - tx = mempool[tx.txid]; + if (localTx) { + tx.effectiveFeePerVsize = effectiveFeePerVsize; + tx.ancestors = Array.from(cluster.get(tx.txid)?.ancestors.values() || []).map(ancestor => ({ txid: ancestor.txid, weight: ancestor.weight, fee: ancestor.fees.base })); + tx.descendants = Array.from(cluster.values()).filter(entry => entry.txid !== tx.txid && !cluster.get(tx.txid)?.ancestors.has(entry.txid)).map(tx => ({ txid: tx.txid, weight: tx.weight, fee: tx.fees.base })); + tx.bestDescendant = null; + } else { + for (const tx of cluster.values()) { + mempool[tx.txid].effectiveFeePerVsize = effectiveFeePerVsize; + mempool[tx.txid].ancestors = Array.from(tx.ancestors.values()).map(tx => ({ txid: tx.txid, weight: tx.weight, fee: tx.fees.base })); + mempool[tx.txid].descendants = Array.from(cluster.values()).filter(entry => entry.txid !== tx.txid && !tx.ancestors.has(entry.txid)).map(tx => ({ txid: tx.txid, weight: tx.weight, fee: tx.fees.base })); + mempool[tx.txid].bestDescendant = null; + mempool[tx.txid].cpfpChecked = true; + mempool[tx.txid].cpfpDirty = true; + mempool[tx.txid].cpfpUpdated = Date.now(); + } + + tx = mempool[tx.txid]; + + } return { ancestors: tx.ancestors || [], @@ -222,33 +233,6 @@ export function calculateMempoolTxCpfp(tx: MempoolTransactionExtended, mempool: }; } -/** - * Takes an unbroadcasted transaction and a copy of the current mempool, and calculates an estimate - * of the CPFP data if the transaction were to enter the mempool. This only returns potential ancerstors - * and effective fee rate, and does not update the CPFP data of other transactions in the cluster. - */ -export function calculateLocalTxCpfp(tx: MempoolTransactionExtended, mempool: { [txid: string]: MempoolTransactionExtended }): CpfpInfo { - const ancestorMap = new Map(); - const graphTx = convertToGraphTx(tx, memPool.getSpendMap()); - ancestorMap.set(tx.txid, graphTx); - - const allRelatives = expandRelativesGraph(mempool, ancestorMap, memPool.getSpendMap()); - const relativesMap = initializeRelatives(allRelatives); - const cluster = calculateCpfpCluster(tx.txid, relativesMap); - - let totalVsize = 0; - let totalFee = 0; - for (const tx of cluster.values()) { - totalVsize += tx.vsize; - totalFee += tx.fees.base; - } - - return { - ancestors: Array.from(cluster.get(tx.txid)?.ancestors.values() || []).map(ancestor => ({ txid: ancestor.txid, weight: ancestor.weight, fee: ancestor.fees.base })), - effectiveFeePerVsize: totalFee / totalVsize - } -} - /** * Given a root transaction and a list of in-mempool ancestors, * Calculate the CPFP cluster From 21cdb7e3a17ea287d4e7541192e633926f0f351f Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 11 Jan 2025 18:31:45 +0900 Subject: [PATCH 022/534] [accelerator] remove tx restriction for cashapp payments --- .../accelerate-checkout/accelerate-checkout.component.ts | 8 ++------ .../src/app/components/tracker/tracker.component.html | 1 - frontend/src/app/components/tracker/tracker.component.ts | 4 ---- .../app/components/transaction/transaction.component.html | 1 - .../app/components/transaction/transaction.component.ts | 5 ----- 5 files changed, 2 insertions(+), 17 deletions(-) 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 4c935c57f..36c62fcf9 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -62,7 +62,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Input() miningStats: MiningStats; @Input() eta: ETA; @Input() scrollEvent: boolean; - @Input() cashappEnabled: boolean = true; @Input() applePayEnabled: boolean = false; @Input() googlePayEnabled: boolean = true; @Input() advancedEnabled: boolean = false; @@ -217,7 +216,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.loadingBtcpayInvoice = true; this.invoice = null; this.requestBTCPayInvoice(); - } else if (this._step === 'cashapp' && this.cashappEnabled) { + } else if (this._step === 'cashapp') { this.loadingCashapp = true; this.setupSquare(); this.scrollToElementWithTimeout('confirm-title', 'center', 100); @@ -828,9 +827,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } get couldPayWithCashapp(): boolean { - if (!this.cashappEnabled) { - return false; - } return !!this.estimate?.availablePaymentMethods?.cashapp; } @@ -865,7 +861,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } get canPayWithCashapp(): boolean { - if (!this.cashappEnabled || !this.conversions || (!this.isProdDomain && !isDevMode())) { + if (!this.conversions || (!this.isProdDomain && !isDevMode())) { return false; } diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index 797694919..e07898da3 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -124,7 +124,6 @@ 0 && this.tx.weight < 4000; - } - get showAccelerationSummary(): boolean { return ( this.tx diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 8c2d9de01..5438bfe4a 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -138,7 +138,6 @@ 0 && this.tx.weight < 4000) { - this.cashappEligible = true; - } if (!this.gotInitialPosition && txPosition.position?.block === 0 && txPosition.position?.vsize < 750_000) { this.accelerationFlowCompleted = true; } @@ -1036,7 +1032,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.showAccelerationDetails = false; this.accelerationFlowCompleted = false; this.accelerationInfo = null; - this.cashappEligible = false; this.txInBlockIndex = null; this.mempoolPosition = null; this.pool = null; From faa83866fd1d8d09a651d600973612b5952b7e4e Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 12 Jan 2025 12:04:19 +0900 Subject: [PATCH 023/534] [blocks] fix block pools-v2 hash migration --- backend/src/api/database-migration.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 0ca58a785..4f43bd9d2 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -1105,13 +1105,6 @@ class DatabaseMigration { `); } - // blocks pools-v2.json hash - if (databaseSchemaVersion < 95) { - await this.$executeQuery('ALTER TABLE `blocks` ADD definition_hash varchar(255) NOT NULL DEFAULT "5f32a67401929169f225f5db43c9efa795d1b159"'); - await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `definition_hash` (`definition_hash`)'); - await this.updateToSchemaVersion(95); - } - if (config.MEMPOOL.NETWORK !== 'mainnet') { // Apply all the mainnet specific migrations to all other networks // Version 69 @@ -1125,6 +1118,18 @@ class DatabaseMigration { } await this.updateToSchemaVersion(94); } + + // blocks pools-v2.json hash + if (databaseSchemaVersion < 95) { + let poolJsonSha = 'f737d86571d190cf1a1a3cf5fd86b33ba9624254'; + const [poolJsonShaDb]: any[] = await DB.query(`SELECT string FROM state WHERE name = 'pools_json_sha'`); + if (poolJsonShaDb?.length > 0) { + poolJsonSha = poolJsonShaDb[0].string; + } + await this.$executeQuery(`ALTER TABLE blocks ADD definition_hash varchar(255) NOT NULL DEFAULT "${poolJsonSha}"`); + await this.$executeQuery('ALTER TABLE blocks ADD INDEX `definition_hash` (`definition_hash`)'); + await this.updateToSchemaVersion(95); + } } /** From 3325db48830291c482f329cadee3a8bbfeefbb76 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 13 Jan 2025 11:06:21 +0900 Subject: [PATCH 024/534] [accelerator] add btcpay invoice retry button and polish checkout UI --- .../accelerate-checkout.component.html | 15 +++++++++------ .../accelerate-checkout.component.scss | 18 ++++++++++++++++++ .../accelerate-checkout.component.ts | 5 +++-- 3 files changed, 30 insertions(+), 8 deletions(-) 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 df67de65c..3fd92939a 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -357,9 +357,9 @@
-
+
-

Payment to mempool.space for acceleration of txid {{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}

+ Payment to mempool.space for acceleration of txid {{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}
@if (canPayWithBalance || !(canPayWithBitcoin || canPayWithCashapp)) {
@@ -378,9 +378,12 @@

Pay {{ ((invoice.btcDue * 100_000_000) || cost) | number }} sats

} @else if (btcpayInvoiceFailed) { -

Failed to load invoice

-
- +
+ + Failed to load invoice + @if (!loadingBtcpayInvoice) { + + }
} @else {

Loading invoice...

@@ -391,7 +394,7 @@
@if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) {
-

OR

+

—— OR ——

} } 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 ad085ed20..fd9ad06ec 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss @@ -146,6 +146,11 @@ .payment-area { background: var(--bg); + margin-top: 0.5rem; + padding: 0.5rem; + @media (max-width: 575px) { + padding-bottom: 1.25rem; + } } .col.pie { @@ -212,4 +217,17 @@ } .apple-pay-button-white-with-line { -apple-pay-button-style: white-outline; +} + +.btcpay-invoice { + display: flex; + height: 292px; + flex-direction: column; + justify-content: center; + align-items: center; + @media (max-width: 575px) { + height: 75px; + flex-direction: row; + gap: 5px; + } } \ No newline at end of file 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 4c935c57f..e675b6440 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -214,7 +214,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } if (this._step === 'checkout' && this.canPayWithBitcoin) { this.btcpayInvoiceFailed = false; - this.loadingBtcpayInvoice = true; this.invoice = null; this.requestBTCPayInvoice(); } else if (this._step === 'cashapp' && this.cashappEnabled) { @@ -323,7 +322,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } if (this.step === 'checkout' && this.canPayWithBitcoin && !this.loadingBtcpayInvoice) { - this.loadingBtcpayInvoice = true; this.requestBTCPayInvoice(); } @@ -782,16 +780,19 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * BTCPay */ async requestBTCPayInvoice(): Promise { + this.loadingBtcpayInvoice = true; this.servicesApiService.generateBTCPayAcceleratorInvoice$(this.tx.txid, this.userBid).pipe( switchMap(response => { return this.servicesApiService.retreiveInvoice$(response.btcpayInvoiceId); }), catchError(error => { console.log(error); + this.loadingBtcpayInvoice = false; this.btcpayInvoiceFailed = true; return of(null); }) ).subscribe((invoice) => { + this.loadingBtcpayInvoice = false; this.invoice = invoice; this.cd.markForCheck(); }); From 9660723e96f0fe89867e116a01159e2fe151cc9b Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 02:39:48 +0000 Subject: [PATCH 025/534] Translate frontend/src/locale/messages.xlf in fr 100% reviewed source file: 'frontend/src/locale/messages.xlf' on 'fr'. --- frontend/src/locale/messages.fr.xlf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/locale/messages.fr.xlf b/frontend/src/locale/messages.fr.xlf index 51e7204b7..c193f296b 100644 --- a/frontend/src/locale/messages.fr.xlf +++ b/frontend/src/locale/messages.fr.xlf @@ -9847,7 +9847,7 @@ confirmation - confirmation + confirmation src/app/shared/components/confirmations/confirmations.component.html 4 From 58e6a785795bae3196fd99ab7371199ff88dc358 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 19 Jan 2025 17:56:19 +0900 Subject: [PATCH 026/534] [accelerator] add support for card on file acceleration --- .../accelerate-checkout.component.html | 22 ++- .../accelerate-checkout.component.ts | 133 +++++++++++++++++- .../src/app/services/services-api.service.ts | 4 + frontend/src/app/shared/shared.module.ts | 3 +- 4 files changed, 153 insertions(+), 9 deletions(-) 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 150da04da..e90a5cc21 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -389,13 +389,13 @@
}
- @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay || canPayWithCardOnFile) {

OR

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

Pay  with

@if (canPayWithCashapp) { @@ -413,6 +413,13 @@
} + @if (canPayWithCardOnFile) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) { } +
+ + {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.brand }} {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }} +
+ }
} @@ -435,7 +442,7 @@ - } @else if (step === 'cashapp' || step === 'applepay' || step === 'googlepay') { + } @else if (step === 'cashapp' || step === 'applepay' || step === 'googlepay' || step === 'cardonfile') {
@@ -451,7 +458,7 @@
- @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay || step === 'googlepay' && !loadingGooglePay) { + @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay || step === 'googlepay' && !loadingGooglePay || step === 'cardonfile' && !loadingCardOnFile) {
@@ -476,8 +483,13 @@
} @else if (step === 'googlepay') {
+ } @else if (step === 'cardonfile') { +
+ + {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.brand }} {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }} +
} - @if (loadingCashapp || loadingApplePay || loadingGooglePay) { + @if (loadingCashapp || loadingApplePay || loadingGooglePay || loadingCardOnFile) {
Loading payment method...
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 34a98b8dc..e516fe321 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -13,7 +13,7 @@ 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' | 'applePay' | 'googlePay'; +export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp' | 'applePay' | 'googlePay' | 'cardOnFile'; export type AccelerationEstimate = { hasAccess: boolean; @@ -26,7 +26,7 @@ export type AccelerationEstimate = { mempoolBaseFee: number; vsizeFee: number; pools: number[]; - availablePaymentMethods: Record; + availablePaymentMethods: Record; unavailable?: boolean; options: { // recommended bid options fee: number; // recommended userBid in sats @@ -49,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' | 'googlepay' | 'processing' | 'paid' | 'success'; +type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | 'googlepay' | 'cardonfile' | 'processing' | 'paid' | 'success'; @Component({ selector: 'app-accelerate-checkout', @@ -65,6 +65,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Input() cashappEnabled: boolean = true; @Input() applePayEnabled: boolean = false; @Input() googlePayEnabled: boolean = true; + @Input() cardOnFileEnabled: boolean = true; @Input() advancedEnabled: boolean = false; @Input() forceMobile: boolean = false; @Input() showDetails: boolean = false; @@ -117,6 +118,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { loadingCashapp = false; loadingApplePay = false; loadingGooglePay = false; + loadingCardOnFile = false; payments: any; cashAppPay: any; applePay: any; @@ -234,6 +236,10 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.loadingGooglePay = true; this.setupSquare(); this.scrollToElementWithTimeout('confirm-title', 'center', 100); + } else if (this._step === 'cardonfile' && this.cardOnFileEnabled) { + this.loadingCardOnFile = true; + this.setupSquare(); + this.scrollToElementWithTimeout('confirm-title', 'center', 100); } else if (this._step === 'paid') { this.timePaid = Date.now(); this.timeoutTimer = setTimeout(() => { @@ -454,6 +460,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { await this.requestApplePayPayment(); } else if (this._step === 'googlepay') { await this.requestGooglePayPayment(); + } else if (this._step === 'cardonfile') { + this.loadingCardOnFile = false; } }, error: () => { @@ -710,6 +718,109 @@ export class AccelerateCheckout implements OnInit, OnDestroy { ); } + /** + * Card On File + */ + async requestCardOnFilePayment(): 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; + + const costUSD = this.cost / 100_000_000 * conversions.USD; + if (this.isCheckoutLocked > 0) { + return; + } + const cardOnFile = this.estimate?.availablePaymentMethods?.cardOnFile; + if (!cardOnFile?.card) { + this.accelerateError = 'card_on_file_not_found'; + return; + } + this.loadingCardOnFile = false; + + try { + this.isCheckoutLocked += 2; + this.isTokenizing += 2; + + const nameParts = cardOnFile.card.name.split(' '); + const assumedGivenName = nameParts[0]; + const assumedFamilyName = nameParts.length > 1 ? nameParts[1] : undefined; + const verificationDetails = { + card: { + billing: { + givenName: assumedGivenName, + familyName: assumedFamilyName, + addressLines: [cardOnFile.card.billing.addressLine1], + city: cardOnFile.card.billing.locality, + state: cardOnFile.card.billing.administrativeDistrictLevel1, + countyCode: cardOnFile.card.billing.country, + } + } + }; + const verificationToken = await this.$verifyBuyer(this.payments, cardOnFile.card.card_id, verificationDetails, costUSD.toFixed(2)); + if (!verificationToken || !verificationToken.token) { + console.error(`SCA verification failed`); + this.accelerateError = 'SCA Verification Failed. Payment Declined.'; + this.processing = false; + return; + } + + this.servicesApiService.accelerateWithCardOnFile$( + this.tx.txid, + cardOnFile.card.card_id, + verificationToken.token, + `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, + costUSD, + verificationToken.userChallenged + ).subscribe({ + next: () => { + this.processing = false; + this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); + this.audioService.playSound('ascend-chime-cartoon'); + setTimeout(() => { + this.isCheckoutLocked--; + this.isTokenizing--; + this.moveToStep('paid', true); + }, 1000); + }, + error: (response) => { + this.processing = false; + this.accelerateError = response.error; + this.isCheckoutLocked--; + this.isTokenizing--; + 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); + } + } + }); + + } catch (e) { + console.log(e); + this.isCheckoutLocked--; + this.isTokenizing--; + this.processing = false; + this.accelerateError = e.message; + + } finally { + // always unlock the checkout once we're finished + this.isCheckoutLocked--; + this.isTokenizing--; + } + } + ); + } + /** * CASHAPP */ @@ -955,6 +1066,22 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return false; } + get canPayWithCardOnFile(): boolean { + if (!this.cardOnFileEnabled || !this.conversions || (!this.isProdDomain && !isDevMode())) { + return false; + } + + const paymentMethod = this.estimate?.availablePaymentMethods?.cardOnFile; + 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; diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 5e882cd02..59dc92358 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -146,6 +146,10 @@ export class ServicesApiServices { return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/googlePay`, { txInput: txInput, cardTag: cardTag, token: token, verificationToken: verificationToken, referenceId: referenceId, userApprovedUSD: userApprovedUSD, userChallenged: userChallenged }); } + accelerateWithCardOnFile$(txInput: string, token: string, verificationToken: string, referenceId: string, userApprovedUSD: number, userChallenged: boolean) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/cardOnFile`, { txInput: txInput, token: token, verificationToken: verificationToken, referenceId: referenceId, userApprovedUSD: userApprovedUSD, userChallenged: userChallenged }); + } + getAccelerations$(): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations`); } diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 1d4f5fd99..e78e74a9c 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -7,7 +7,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline, - faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot } from '@fortawesome/free-solid-svg-icons'; + faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faCreditCard } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -459,5 +459,6 @@ export class SharedModule { library.addIcons(faCalendarCheck); library.addIcons(faMoneyBillTrendUp); library.addIcons(faRobot); + library.addIcons(faCreditCard); } } From 390bbf1097ca2cc65bc2b5d6cb45c54fa7a5ef44 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 20 Jan 2025 15:20:29 +0900 Subject: [PATCH 027/534] add new fa icon --- frontend/src/app/shared/shared.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 1d4f5fd99..283f9eb54 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -7,7 +7,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline, - faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot } from '@fortawesome/free-solid-svg-icons'; + faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -459,5 +459,6 @@ export class SharedModule { library.addIcons(faCalendarCheck); library.addIcons(faMoneyBillTrendUp); library.addIcons(faRobot); + library.addIcons(faShareNodes); } } From 4e735cc8b03d87f850286461474d8f110580e444 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 20 Jan 2025 07:30:27 +0000 Subject: [PATCH 028/534] fix stratum tree rendering with different branch lengths --- .../stratum-list/stratum-list.component.ts | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts index 0af9f0976..6f252babe 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts @@ -8,8 +8,10 @@ import { SinglePoolStats } from '../../../interfaces/node-api.interface'; type MerkleCellType = ' ' | '┬' | '├' | '└' | '│' | '─' | 'leaf'; + interface TaggedStratumJob extends StratumJob { tag: string; + merkleBranchIds: string[]; } interface MerkleCell { @@ -46,6 +48,18 @@ function parseTag(scriptSig: string): string { return (ascii.match(/\/.*\//)?.[0] || ascii).trim(); } +function getMerkleBranchIds(merkleBranches: string[], numBranches: number): string[] { + let lastHash = ''; + const ids: string[] = []; + for (let i = 0; i < numBranches; i++) { + if (merkleBranches[i]) { + lastHash = merkleBranches[i]; + } + ids.push(`${i}-${lastHash}`); + } + return ids; +} + @Component({ selector: 'app-stratum-list', templateUrl: './stratum-list.component.html', @@ -81,16 +95,15 @@ export class StratumList implements OnInit, OnDestroy { } processJobs(rawJobs: Record): PoolRow[] { + const numBranches = Math.max(...Object.values(rawJobs).map(job => job.merkleBranches.length)); const jobs: Record = {}; for (const [id, job] of Object.entries(rawJobs)) { - jobs[id] = { ...job, tag: parseTag(job.scriptsig) }; + jobs[id] = { ...job, tag: parseTag(job.scriptsig), merkleBranchIds: getMerkleBranchIds(job.merkleBranches, numBranches) }; } if (Object.keys(jobs).length === 0) { return []; } - const numBranches = Math.max(...Object.values(jobs).map(job => job.merkleBranches.length)); - let trees: MerkleTree[] = Object.keys(jobs).map(job => ({ job, size: 1, @@ -100,12 +113,13 @@ export class StratumList implements OnInit, OnDestroy { for (let col = numBranches - 1; col >= 0; col--) { const groups: Record = {}; for (const tree of trees) { - const hash = jobs[tree.job].merkleBranches[col]; - if (!groups[hash]) { - groups[hash] = []; + const branchId = jobs[tree.job].merkleBranchIds[col]; + if (!groups[branchId]) { + groups[branchId] = []; } - groups[hash].push(tree); + groups[branchId].push(tree); } + trees = Object.values(groups).map(group => ({ hash: jobs[group[0].job].merkleBranches[col], job: group[0].job, From 36b691e25b4bfebac53e1b389228f6fb56f696b2 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 20 Jan 2025 17:20:23 +0900 Subject: [PATCH 029/534] ops: Enable stratum in prod config via localhost nginx proxy --- production/mempool-config.mainnet.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 39d82d8d1..5c164340e 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -154,5 +154,9 @@ "WALLETS": { "ENABLED": true, "WALLETS": ["BITB", "3350"] + }, + "STRATUM": { + "ENABLED": true, + "API": "http://127.0.0.1:81" } } From e53e810a5563c3a70be8ec33c880a8e68220a14d Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 20 Jan 2025 17:34:19 +0900 Subject: [PATCH 030/534] ops: Fix stratum server URL path in prod config --- production/mempool-config.mainnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 5c164340e..758887407 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -157,6 +157,6 @@ }, "STRATUM": { "ENABLED": true, - "API": "http://127.0.0.1:81" + "API": "http://127.0.0.1:81/api/v1/stratum/ws" } } From 5aeaa6825989139f18703ed027673f967591e8f5 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 20 Jan 2025 17:56:38 +0900 Subject: [PATCH 031/534] ops: Enable stratum in FOSS prod frontend config --- production/mempool-frontend-config.mainnet.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/production/mempool-frontend-config.mainnet.json b/production/mempool-frontend-config.mainnet.json index 79acaecc5..e0cdbf030 100644 --- a/production/mempool-frontend-config.mainnet.json +++ b/production/mempool-frontend-config.mainnet.json @@ -4,8 +4,7 @@ "TESTNET4_ENABLED": true, "LIQUID_ENABLED": false, "LIQUID_TESTNET_ENABLED": false, - "BISQ_ENABLED": true, - "BISQ_SEPARATE_BACKEND": true, + "STRATUM_ENABLED": true, "SIGNET_ENABLED": true, "MEMPOOL_WEBSITE_URL": "https://mempool.space", "LIQUID_WEBSITE_URL": "https://liquid.network", From b454fa09d2d8288e2d96ea4f88aae683b71197ac Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 21 Jan 2025 13:49:12 +0700 Subject: [PATCH 032/534] Remove babel backend dep --- backend/jest.config.ts | 2 +- backend/package-lock.json | 3 --- backend/package.json | 3 --- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/backend/jest.config.ts b/backend/jest.config.ts index 14f932f98..43246c518 100644 --- a/backend/jest.config.ts +++ b/backend/jest.config.ts @@ -7,7 +7,7 @@ const config: Config.InitialOptions = { automock: false, collectCoverage: true, collectCoverageFrom: ["./src/**/**.ts"], - coverageProvider: "babel", + coverageProvider: "v8", coverageThreshold: { global: { lines: 1 diff --git a/backend/package-lock.json b/backend/package-lock.json index e0d28bfc9..08ebf0619 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,7 +10,6 @@ "hasInstallScript": true, "license": "GNU Affero General Public License v3.0", "dependencies": { - "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", "axios": "1.7.2", @@ -26,8 +25,6 @@ "ws": "~8.18.0" }, "devDependencies": { - "@babel/code-frame": "^7.18.6", - "@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/package.json b/backend/package.json index 9ac3f9199..b1145cb13 100644 --- a/backend/package.json +++ b/backend/package.json @@ -39,7 +39,6 @@ "prettier": "./node_modules/.bin/prettier --write \"src/**/*.{js,ts}\"" }, "dependencies": { - "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", "axios": "1.7.2", @@ -55,8 +54,6 @@ "ws": "~8.18.0" }, "devDependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/core": "^7.25.2", "@types/compression": "^1.7.2", "@types/crypto-js": "^4.1.1", "@types/express": "^4.17.17", From b42431f14a7bd6730ce89bd03933e50d5dc08852 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 21 Jan 2025 17:39:50 +0900 Subject: [PATCH 033/534] [auth] add login/signup with github support --- .../components/faucet/faucet.component.html | 10 +++----- .../github-login.component.html | 6 +++++ .../github-login.component.ts | 25 +++++++++++++++++++ frontend/src/app/shared/shared.module.ts | 3 +++ 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 frontend/src/app/components/github-login.component/github-login.component.html create mode 100644 frontend/src/app/components/github-login.component/github-login.component.ts diff --git a/frontend/src/app/components/faucet/faucet.component.html b/frontend/src/app/components/faucet/faucet.component.html index 3165ae9a7..19d76d9dd 100644 --- a/frontend/src/app/components/faucet/faucet.component.html +++ b/frontend/src/app/components/faucet/faucet.component.html @@ -21,10 +21,8 @@
To use the faucet, please  - login -  or
- +
} @else if (user && user.status === 'pending' && !user.email && user.snsId) { @@ -36,18 +34,18 @@
} @else if (error === 'not_available') { - +
To use the faucet, please
- +
} @else if (error === 'account_limited') {
- Your Twitter account does not allow you to access the faucet + Your account does not allow you to access the faucet
} diff --git a/frontend/src/app/components/github-login.component/github-login.component.html b/frontend/src/app/components/github-login.component/github-login.component.html new file mode 100644 index 000000000..de9c743b5 --- /dev/null +++ b/frontend/src/app/components/github-login.component/github-login.component.html @@ -0,0 +1,6 @@ + + + + + {{ buttonString }} + \ No newline at end of file diff --git a/frontend/src/app/components/github-login.component/github-login.component.ts b/frontend/src/app/components/github-login.component/github-login.component.ts new file mode 100644 index 000000000..52f2584b9 --- /dev/null +++ b/frontend/src/app/components/github-login.component/github-login.component.ts @@ -0,0 +1,25 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +@Component({ + selector: 'app-github-login', + templateUrl: './github-login.component.html', +}) +export class GithubLogin { + @Input() width: string | null = null; + @Input() customClass: string | null = null; + @Input() buttonString: string= 'unset'; + @Input() redirectTo: string | null = null; + @Output() clicked = new EventEmitter(); + @Input() disabled: boolean = false; + + constructor() {} + + githubLogin() { + this.clicked.emit(true); + if (this.redirectTo) { + location.replace(`/api/v1/services/auth/login/github?redirectTo=${encodeURIComponent(this.redirectTo)}`); + } else { + location.replace(`/api/v1/services/auth/login/github?redirectTo=${location.href}`); + } + return false; + } +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 283f9eb54..d63b54632 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -125,6 +125,7 @@ import { TwitterLogin } from '@components/twitter-login/twitter-login.component' import { BitcoinInvoiceComponent } from '@components/bitcoin-invoice/bitcoin-invoice.component'; import { OnlyVsizeDirective, OnlyWeightDirective } from '@app/shared/components/weight-directives/weight-directives'; +import { GithubLogin } from '../components/github-login.component/github-login.component'; @NgModule({ declarations: [ @@ -242,6 +243,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from '@app/shared/components/ TwitterWidgetComponent, FaucetComponent, TwitterLogin, + GithubLogin, BitcoinInvoiceComponent, ], imports: [ @@ -376,6 +378,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from '@app/shared/components/ HttpErrorComponent, TwitterWidgetComponent, TwitterLogin, + GithubLogin, BitcoinInvoiceComponent, BitcoinsatoshisPipe, From 665a12a040b5fcb743b5ffa5e1d54a1dce56b77c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 15:57:18 +0000 Subject: [PATCH 034/534] Bump mysql2 from 3.11.0 to 3.12.0 in /backend Bumps [mysql2](https://github.com/sidorares/node-mysql2) from 3.11.0 to 3.12.0. - [Release notes](https://github.com/sidorares/node-mysql2/releases) - [Changelog](https://github.com/sidorares/node-mysql2/blob/master/Changelog.md) - [Commits](https://github.com/sidorares/node-mysql2/compare/v3.11.0...v3.12.0) --- updated-dependencies: - dependency-name: mysql2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 52 ++++++++++++++++++++++----------------- backend/package.json | 2 +- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 08ebf0619..3f66fa25b 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -17,7 +17,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.11.0", + "mysql2": "~3.12.0", "redis": "^4.7.0", "rust-gbt": "file:./rust-gbt", "socks-proxy-agent": "~7.0.0", @@ -5997,6 +5997,21 @@ "yallist": "^3.0.2" } }, + "node_modules/lru.min": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", + "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6158,16 +6173,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mysql2": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz", - "integrity": "sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.12.0.tgz", + "integrity": "sha512-C8fWhVysZoH63tJbX8d10IAoYCyXy4fdRFz2Ihrt9jtPILYynFEKUUzpp1U7qxzDc3tMbotvaBH+sl6bFnGZiw==", + "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", "long": "^5.2.1", - "lru-cache": "^8.0.0", + "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" @@ -6187,14 +6203,6 @@ "node": ">=0.10.0" } }, - "node_modules/mysql2/node_modules/lru-cache": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", - "engines": { - "node": ">=16.14" - } - }, "node_modules/named-placeholders": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", @@ -12210,6 +12218,11 @@ "yallist": "^3.0.2" } }, + "lru.min": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", + "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -12324,16 +12337,16 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql2": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz", - "integrity": "sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.12.0.tgz", + "integrity": "sha512-C8fWhVysZoH63tJbX8d10IAoYCyXy4fdRFz2Ihrt9jtPILYynFEKUUzpp1U7qxzDc3tMbotvaBH+sl6bFnGZiw==", "requires": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", "long": "^5.2.1", - "lru-cache": "^8.0.0", + "lru.min": "^1.0.0", "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" @@ -12346,11 +12359,6 @@ "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } - }, - "lru-cache": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", - "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==" } } }, diff --git a/backend/package.json b/backend/package.json index b1145cb13..ee5944f93 100644 --- a/backend/package.json +++ b/backend/package.json @@ -46,7 +46,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.11.0", + "mysql2": "~3.12.0", "rust-gbt": "file:./rust-gbt", "redis": "^4.7.0", "socks-proxy-agent": "~7.0.0", From ff4aca83702e595ac12de1c7c717f34f44faeb56 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 22 Jan 2025 11:26:34 +0900 Subject: [PATCH 035/534] [blocks] update sha in memory/db before re-indexing blocks --- backend/src/tasks/pools-updater.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index 502e3613f..38e816d74 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -88,8 +88,8 @@ class PoolsUpdater { try { await DB.query('START TRANSACTION;'); - await poolsParser.migratePoolsJson(); await this.updateDBSha(githubSha); + await poolsParser.migratePoolsJson(); await DB.query('COMMIT;'); } catch (e) { logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, this.tag); From 23713a11c25504ca216a39ea3000cf961c165dac Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Jan 2025 05:06:02 +0000 Subject: [PATCH 036/534] link to merkle branch first tx --- frontend/src/app/components/pool/pool.component.html | 6 +++++- frontend/src/app/components/pool/pool.component.scss | 1 + frontend/src/app/components/pool/pool.component.ts | 4 ++++ .../stratum/stratum-list/stratum-list.component.html | 8 +++++++- .../stratum/stratum-list/stratum-list.component.scss | 10 ++++++++++ .../stratum/stratum-list/stratum-list.component.ts | 4 ++++ 6 files changed, 31 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index faa0003c4..f98794b68 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -267,7 +267,11 @@ @for (branch of job.merkleBranches; track $index) { - + @if ($index === 0 && branch) { + + } @else { + + } } @for (_ of [].constructor(Math.max(0, 12 - job.merkleBranches.length)); track $index) { diff --git a/frontend/src/app/components/pool/pool.component.scss b/frontend/src/app/components/pool/pool.component.scss index 31d12474f..fa94227bd 100644 --- a/frontend/src/app/components/pool/pool.component.scss +++ b/frontend/src/app/components/pool/pool.component.scss @@ -220,6 +220,7 @@ div.scrollable { .merkle { width: 100px; + text-align: center; } .empty-branch { diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index 23b795613..4b4b643a2 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -361,6 +361,10 @@ export class PoolComponent implements OnInit { return block.height; } + reverseHash(hash: string) { + return hash.match(/../g).reverse().join(''); + } + ngOnDestroy(): void { this.slugSubscription.unsubscribe(); } diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html index 08d7fb0ef..41707e37f 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html @@ -30,7 +30,13 @@ @for (cell of row.merkleCells; track $index) { -
+ @if ($index === 0 && cell.hash) { + +
+
+ } @else { +
+ } } diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss index 6679f2257..15ee074c2 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss @@ -92,6 +92,16 @@ td { } } } + + .cell-link { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + color: inherit; + text-decoration: none; + } } .badge { diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts index 6f252babe..b28f4ff11 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts @@ -196,6 +196,10 @@ export class StratumList implements OnInit, OnDestroy { }[type]; } + reverseHash(hash: string) { + return hash.match(/../g).reverse().join(''); + } + ngOnDestroy(): void { this.websocketService.stopTrackStratum(); } From cac62765a18d25dddd1be3e090b4c57fdf2115ad Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Jan 2025 09:10:22 +0000 Subject: [PATCH 037/534] fix stratum tree branch level --- .../stratum/stratum-list/stratum-list.component.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts index b28f4ff11..481447b07 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts @@ -48,14 +48,16 @@ function parseTag(scriptSig: string): string { return (ascii.match(/\/.*\//)?.[0] || ascii).trim(); } -function getMerkleBranchIds(merkleBranches: string[], numBranches: number): string[] { +function getMerkleBranchIds(merkleBranches: string[], numBranches: number, poolId: number): string[] { let lastHash = ''; const ids: string[] = []; for (let i = 0; i < numBranches; i++) { if (merkleBranches[i]) { lastHash = merkleBranches[i]; + ids.push(`${i}-${lastHash}`); + } else { + ids.push(`${i}-${lastHash}-${poolId}`); } - ids.push(`${i}-${lastHash}`); } return ids; } @@ -98,7 +100,7 @@ export class StratumList implements OnInit, OnDestroy { const numBranches = Math.max(...Object.values(rawJobs).map(job => job.merkleBranches.length)); const jobs: Record = {}; for (const [id, job] of Object.entries(rawJobs)) { - jobs[id] = { ...job, tag: parseTag(job.scriptsig), merkleBranchIds: getMerkleBranchIds(job.merkleBranches, numBranches) }; + jobs[id] = { ...job, tag: parseTag(job.scriptsig), merkleBranchIds: getMerkleBranchIds(job.merkleBranches, numBranches, job.pool) }; } if (Object.keys(jobs).length === 0) { return []; From 2e44ea3f012bf599f468f06849a8d5c2513e4152 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Jan 2025 09:13:44 +0000 Subject: [PATCH 038/534] reorder stratum job table --- .../stratum-list/stratum-list.component.html | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html index 41707e37f..24801cf2c 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html @@ -7,27 +7,18 @@ - - - + + + @for (row of rows; track row.job.pool) { - - - @for (cell of row.merkleCells; track $index) { + + + } From 363fa3d8779e07cc9d048234b31cf9d51f60b639 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Jan 2025 09:16:25 +0000 Subject: [PATCH 039/534] improve stratum table layout on mobile --- .../stratum-list/stratum-list.component.scss | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss index 15ee074c2..3d274ef2a 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.scss @@ -104,6 +104,26 @@ td { } } +@media (max-width: 800px) { + .stratum-table { + td { + &.tag { + display: none; + } + } + } +} + +@media (max-width: 650px) { + .stratum-table { + td { + &.reward { + display: none; + } + } + } +} + .badge { position: relative; color: #FFF; From 3b91a1437aa72d7e0b8c8866fd13c7f0fe839eb4 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 22 Jan 2025 18:58:17 +0900 Subject: [PATCH 040/534] [accelerator] differentiate failed/canceled accelerations --- .../accelerations-list/accelerations-list.component.html | 3 ++- frontend/src/app/interfaces/node-api.interface.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) 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 225bf1955..6756b23e4 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 @@ -64,7 +64,8 @@ Pending Completed ⌛ Mined ⌛ - Canceled ⌛ + Canceled ⌛ + Failed ⌛ - + From fc4a0f746134bd15e12ad4480573de714be99898 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 22 Jan 2025 21:59:15 -0800 Subject: [PATCH 042/534] Fix the missing frontend Stratum config for Docker builds --- docker/frontend/entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/frontend/entrypoint.sh b/docker/frontend/entrypoint.sh index 2086188c9..9727adb2d 100644 --- a/docker/frontend/entrypoint.sh +++ b/docker/frontend/entrypoint.sh @@ -45,6 +45,7 @@ __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} +__STRATUM_ENABLED__=${STRATUM_ENABLED:=false} # Export as environment variables to be used by envsubst export __MAINNET_ENABLED__ @@ -76,6 +77,7 @@ export __SERVICES_API__ export __PUBLIC_ACCELERATIONS__ export __HISTORICAL_PRICE__ export __ADDITIONAL_CURRENCIES__ +export __STRATUM_ENABLED__ folder=$(find /var/www/mempool -name "config.js" | xargs dirname) echo ${folder} From a62a3cc774093b9e23e3b31be37a32a93c345a51 Mon Sep 17 00:00:00 2001 From: "transifex-integration[bot]" <43880903+transifex-integration[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 06:29:40 +0000 Subject: [PATCH 043/534] Translate frontend/src/locale/messages.xlf in fr 100% reviewed source file: 'frontend/src/locale/messages.xlf' on 'fr'. --- frontend/src/locale/messages.fr.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/locale/messages.fr.xlf b/frontend/src/locale/messages.fr.xlf index c193f296b..aac7eead9 100644 --- a/frontend/src/locale/messages.fr.xlf +++ b/frontend/src/locale/messages.fr.xlf @@ -1567,7 +1567,7 @@ Total Bid Boost - Augmentation totale des frais + Total frais ajoutés src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 11 @@ -1728,7 +1728,7 @@ Bid Boost - Augmentation des frais + Frais ajoutés src/app/components/acceleration/accelerations-list/accelerations-list.component.html 17 @@ -6739,7 +6739,7 @@ Just now - Juste maintenant + À l'instant src/app/components/time/time.component.ts 111 From e6965dac80fe937bfd3a7189fc98ce24f63c9c65 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 23 Jan 2025 18:00:27 +0900 Subject: [PATCH 044/534] [accelerator] fix sca card on file --- .../accelerate-checkout/accelerate-checkout.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 f15faccf7..2a4d681d9 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -757,9 +757,9 @@ export class AccelerateCheckout implements OnInit, OnDestroy { billing: { givenName: assumedGivenName, familyName: assumedFamilyName, - addressLines: [cardOnFile.card.billing.addressLine1], - city: cardOnFile.card.billing.locality, - state: cardOnFile.card.billing.administrativeDistrictLevel1, + addressLines: [cardOnFile.card.billing.addressLine1 ?? ''], + city: cardOnFile.card.billing.locality ?? '', + state: cardOnFile.card.billing.administrativeDistrictLevel1 ?? '', countyCode: cardOnFile.card.billing.country, } } From 24d0ed4ced4cd0fb8e32b39e94c0225b326290ad Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 24 Jan 2025 01:56:15 +0000 Subject: [PATCH 045/534] fix next block merkle row layout --- .../src/app/components/pool/pool.component.html | 12 +++++++----- .../src/app/components/pool/pool.component.scss | 13 +++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index f98794b68..35bad3af7 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -267,11 +267,13 @@ @for (branch of job.merkleBranches; track $index) { - @if ($index === 0 && branch) { - - } @else { - - } + } @for (_ of [].constructor(Math.max(0, 12 - job.merkleBranches.length)); track $index) { diff --git a/frontend/src/app/components/pool/pool.component.scss b/frontend/src/app/components/pool/pool.component.scss index fa94227bd..26e6008b6 100644 --- a/frontend/src/app/components/pool/pool.component.scss +++ b/frontend/src/app/components/pool/pool.component.scss @@ -241,6 +241,19 @@ div.scrollable { td { position: relative; height: 2em; + + .cell-link { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + color: inherit; + text-decoration: none; + display: flex; + justify-content: center; + align-items: center; + } } } From b826227b3626f383247a18bcc6c6d9774f41306b Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 25 Jan 2025 15:46:21 +0900 Subject: [PATCH 046/534] [services] twitter -> X --- frontend/src/app/components/faucet/faucet.component.html | 8 ++++---- .../github-login.component/github-login.component.html | 4 ++-- .../components/twitter-login/twitter-login.component.html | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/components/faucet/faucet.component.html b/frontend/src/app/components/faucet/faucet.component.html index 19d76d9dd..dbe0f25ea 100644 --- a/frontend/src/app/components/faucet/faucet.component.html +++ b/frontend/src/app/components/faucet/faucet.component.html @@ -19,10 +19,10 @@ } @else if (!user) {
-
- To use the faucet, please  +
+ To use the faucet, please
- +
} @else if (user && user.status === 'pending' && !user.email && user.snsId) { @@ -39,7 +39,7 @@
To use the faucet, please
- +
} @else if (error === 'account_limited') { diff --git a/frontend/src/app/components/github-login.component/github-login.component.html b/frontend/src/app/components/github-login.component/github-login.component.html index de9c743b5..e57019a26 100644 --- a/frontend/src/app/components/github-login.component/github-login.component.html +++ b/frontend/src/app/components/github-login.component/github-login.component.html @@ -1,6 +1,6 @@ - + {{ buttonString }} + - {{ buttonString }} \ No newline at end of file diff --git a/frontend/src/app/components/twitter-login/twitter-login.component.html b/frontend/src/app/components/twitter-login/twitter-login.component.html index 6ff40bd50..5e687341c 100644 --- a/frontend/src/app/components/twitter-login/twitter-login.component.html +++ b/frontend/src/app/components/twitter-login/twitter-login.component.html @@ -1,6 +1,6 @@ - + style="background-color: rgb(31, 35, 40)" [style]="width ? 'width: ' + width : ''"> {{ buttonString }} + From 9e8a35f4a94dd8ce8faa399b53431d5c709639c8 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 25 Jan 2025 18:00:45 -0800 Subject: [PATCH 047/534] Update rust to 1.83 --- rust/gbt/rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/gbt/rust-toolchain b/rust/gbt/rust-toolchain index 17420a571..74c280fb8 100644 --- a/rust/gbt/rust-toolchain +++ b/rust/gbt/rust-toolchain @@ -1 +1 @@ -1.79 +1.83 From a074c4b2c3a1710b73e82bb7019bd09a041ff450 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 26 Jan 2025 11:26:27 +0900 Subject: [PATCH 048/534] [accelerator] add credit card provider fa icons --- .../accelerate-checkout.component.html | 8 +++- .../svg-images/svg-images.component.html | 43 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) 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 de6c71947..4594fd9fc 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -427,8 +427,12 @@ @if (canPayWithCardOnFile) { @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) { }
- - {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.brand }} {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }} + @if (['VISA', 'MASTERCARD', 'JCB', 'DISCOVER', 'DISCOVER_DINERS', 'AMERICAN_EXPRESS'].includes(estimate?.availablePaymentMethods?.cardOnFile?.card?.brand)) { + + } @else { + + } + {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }}
} 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 34ed23bd0..76aa3de85 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -1,4 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0674f3a3eec9e2d3af56238a4f8a90ee64f17923 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sun, 26 Jan 2025 10:03:47 -0800 Subject: [PATCH 049/534] Update Rust to 1.84 --- rust/gbt/Cargo.lock | 189 ++++++++++++++++++---------------------- rust/gbt/rust-toolchain | 2 +- 2 files changed, 84 insertions(+), 107 deletions(-) diff --git a/rust/gbt/Cargo.lock b/rust/gbt/Cargo.lock index 00c755589..b0d905884 100644 --- a/rust/gbt/Cargo.lock +++ b/rust/gbt/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" @@ -28,48 +28,42 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "bytes" -version = "1.6.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" - -[[package]] -name = "cc" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cfg-if" @@ -88,9 +82,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", "syn", @@ -119,27 +113,21 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "indexmap" -version = "2.2.6" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown", @@ -153,15 +141,15 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libloading" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets", @@ -169,9 +157,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "matchers" @@ -190,18 +178,18 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "napi" -version = "2.16.8" +version = "2.16.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1bd081bbaef43600fd2c5dd4c525b8ecea7dfdacf40ebc674e87851dce6559e" +checksum = "214f07a80874bb96a8433b3cdfc84980d56c7b02e1a0d7ba4ba0db5cef785e2b" dependencies = [ "bitflags", "ctor", @@ -213,15 +201,15 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.1.3" +version = "2.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" +checksum = "db836caddef23662b94e16bf1f26c40eceb09d6aee5d5b06a7ac199320b69b19" [[package]] name = "napi-derive" -version = "2.16.9" +version = "2.16.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c3b5d4ab13e20a4bb9d3a1e2f3d4e77eee4a205d0f810abfd226b971dc6ce5" +checksum = "7cbe2585d8ac223f7d34f13701434b9d5f4eb9c332cccce8dee57ea18ab8ab0c" dependencies = [ "cfg-if", "convert_case", @@ -233,9 +221,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96de436a6ab93265beef838f8333c8345438f059df6081fe0ad0b8648ee0c524" +checksum = "1639aaa9eeb76e91c6ae66da8ce3e89e921cd3885e99ec85f4abacae72fc91bf" dependencies = [ "convert_case", "once_cell", @@ -265,30 +253,20 @@ dependencies = [ "winapi", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "object" -version = "0.36.1" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "overload" @@ -298,15 +276,15 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "priority-queue" -version = "2.0.3" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70c501afe3a2e25c9bd219aa56ec1e04cdb3fcdd763055be268778c13fa82c1f" +checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" dependencies = [ "autocfg", "equivalent", @@ -315,32 +293,32 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.7", - "regex-syntax 0.8.4", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] @@ -354,13 +332,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.4", + "regex-syntax 0.8.5", ] [[package]] @@ -371,9 +349,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rustc-demangle" @@ -383,9 +361,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "sharded-slab" @@ -404,9 +382,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.71" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -425,20 +403,19 @@ dependencies = [ [[package]] name = "tokio" -version = "1.38.1" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", - "num_cpus", "pin-project-lite", ] [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -447,9 +424,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -458,9 +435,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -479,9 +456,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", @@ -497,21 +474,21 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "winapi" diff --git a/rust/gbt/rust-toolchain b/rust/gbt/rust-toolchain index 74c280fb8..40671b908 100644 --- a/rust/gbt/rust-toolchain +++ b/rust/gbt/rust-toolchain @@ -1 +1 @@ -1.83 +1.84 From 60d548df4693bb3cf0a91babfdb03ab472d35d77 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 27 Jan 2025 03:37:01 +0000 Subject: [PATCH 050/534] add missing sg1 hnl emojis --- .../app/components/server-health/server-health.component.ts | 4 ++++ 1 file changed, 4 insertions(+) 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 6f92c0c93..c1b6fe443 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -82,6 +82,10 @@ export class ServerHealthComponent implements OnInit { return '🇺🇸'; } else if (host.includes('.va1.')) { return '🇺🇸'; + } else if (host.includes('.sg1.')) { + return '🇸🇬'; + } else if (host.includes('.hnl.')) { + return '🤙'; } else { return ''; } From edc5593792789a9e917d31ddf24aaf8016ded7ef Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 28 Jan 2025 07:57:19 +0100 Subject: [PATCH 051/534] [services] remove image md5 in urls --- frontend/src/app/components/about/about.component.html | 4 ++-- .../components/master-page/master-page.component.html | 9 ++++----- .../components/master-page/master-page.component.scss | 2 +- .../src/app/components/tracker/tracker.component.html | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 40d6e1914..433fe1abb 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -217,7 +217,7 @@ - + @@ -229,7 +229,7 @@ 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 557529eef..436cf3c67 100644 --- a/frontend/src/app/components/master-page/master-page.component.html +++ b/frontend/src/app/components/master-page/master-page.component.html @@ -4,9 +4,8 @@
} @else { 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 index 2b539c154..c6260da48 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts @@ -38,6 +38,7 @@ export class TransactionDetailsComponent implements OnInit { @Input() replaced: boolean; @Input() isCached: boolean; @Input() ETA$: Observable; + @Input() unbroadcasted: boolean; @Output() accelerateClicked = new EventEmitter(); @Output() toggleCpfp$ = new EventEmitter(); diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index b6286779a..450e18ecd 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -58,6 +58,7 @@ } ; mempoolBlocksSubscription: Subscription; constructor( public route: ActivatedRoute, public router: Router, public stateService: StateService, - public etaService: EtaService, public electrsApi: ElectrsApiService, public websocketService: WebsocketService, public formBuilder: UntypedFormBuilder, @@ -195,24 +192,6 @@ export class TransactionRawComponent implements OnInit, OnDestroy { }); this.setGraphSize(); - this.ETA$ = combineLatest([ - this.stateService.mempoolBlocks$.pipe(startWith(null)), - this.stateService.difficultyAdjustment$.pipe(startWith(null)), - ]).pipe( - map(([mempoolBlocks, da]) => { - return this.etaService.calculateETA( - this.stateService.network, - this.transaction, - mempoolBlocks, - null, - da, - null, - null, - null - ); - }) - ); - this.mempoolBlocksSubscription = this.stateService.mempoolBlocks$.subscribe(() => { if (this.transaction) { this.stateService.markBlock$.next({ From 27c28f939c31e50c3aad0dc4e014dab3ea4ecfec Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 10 Feb 2025 03:47:05 +0000 Subject: [PATCH 062/534] misc unfurl preview fixes --- .../address/address-preview.component.ts | 10 +++--- .../block/block-preview.component.html | 2 +- .../block/block-preview.component.ts | 23 ++++++++------ .../components/pool/pool-preview.component.ts | 28 +++++++++-------- .../transaction-preview.component.ts | 20 ++++++------ .../wallet/wallet-preview.component.ts | 20 ++++++------ .../channel/channel-preview.component.ts | 14 +++++---- .../group/group-preview.component.ts | 18 ++++++----- .../lightning/node/node-preview.component.ts | 14 +++++---- .../nodes-per-isp-preview.component.ts | 14 +++++---- .../src/app/services/opengraph.service.ts | 31 ++++++++++++------- 11 files changed, 111 insertions(+), 83 deletions(-) diff --git a/frontend/src/app/components/address/address-preview.component.ts b/frontend/src/app/components/address/address-preview.component.ts index bcc328787..1106d6096 100644 --- a/frontend/src/app/components/address/address-preview.component.ts +++ b/frontend/src/app/components/address/address-preview.component.ts @@ -36,6 +36,8 @@ export class AddressPreviewComponent implements OnInit, OnDestroy { sent = 0; totalUnspent = 0; + ogSession: number; + constructor( private route: ActivatedRoute, private electrsApiService: ElectrsApiService, @@ -58,7 +60,7 @@ export class AddressPreviewComponent implements OnInit, OnDestroy { .pipe( switchMap((params: ParamMap) => { this.rawAddress = params.get('id') || ''; - this.openGraphService.waitFor('address-data-' + this.rawAddress); + this.ogSession = this.openGraphService.waitFor('address-data-' + this.rawAddress); this.error = undefined; this.isLoadingAddress = true; this.loadedConfirmedTxCount = 0; @@ -79,7 +81,7 @@ export class AddressPreviewComponent implements OnInit, OnDestroy { this.isLoadingAddress = false; this.error = err; console.log(err); - this.openGraphService.fail('address-data-' + this.rawAddress); + this.openGraphService.fail({ event: 'address-data-' + this.rawAddress, sessionId: this.ogSession }); return of(null); }) ); @@ -97,7 +99,7 @@ export class AddressPreviewComponent implements OnInit, OnDestroy { this.address = address; this.updateChainStats(); this.isLoadingAddress = false; - this.openGraphService.waitOver('address-data-' + this.rawAddress); + this.openGraphService.waitOver({ event: 'address-data-' + this.rawAddress, sessionId: this.ogSession }); }) ) .subscribe(() => {}, @@ -105,7 +107,7 @@ export class AddressPreviewComponent implements OnInit, OnDestroy { console.log(error); this.error = error; this.isLoadingAddress = false; - this.openGraphService.fail('address-data-' + this.rawAddress); + this.openGraphService.fail({ event: 'address-data-' + this.rawAddress, sessionId: this.ogSession }); } ); } diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index 036ab8399..6ea8e3387 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -49,7 +49,7 @@ - + + @@ -340,7 +341,7 @@

Also, if you are using our Marks in a way described in the sections "Uses for Which We Are Granting a License," you must include the following trademark attribution at the foot of the webpage where you have used the Mark (or, if in a book, on the credits page), on any packaging or labeling, and on advertising or marketing materials:

-

"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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

+

"The Mempool Open Source Project®, Mempool Accelerator™, Mempool Enterprise®, Mempool Liquidity™, Mempool®, 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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

  • What to Do When You See Abuse

  • From d3b5c15f33fa4c54ec22bb5b9b27c6a2480ad78b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 12 Feb 2025 15:03:52 +0000 Subject: [PATCH 067/534] [ops] check for pool updates every hour --- production/mempool-config.mainnet.json | 1 + production/mempool-config.signet.json | 1 + production/mempool-config.testnet.json | 1 + production/mempool-config.testnet4.json | 1 + 4 files changed, 4 insertions(+) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index b14e3cd07..9505601d2 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -14,6 +14,7 @@ "BLOCKS_SUMMARIES_INDEXING": true, "GOGGLES_INDEXING": true, "AUTOMATIC_POOLS_UPDATE": true, + "POOLS_UPDATE_DELAY": 3600, "AUDIT": true, "CPFP_INDEXING": true, "RUST_GBT": true, diff --git a/production/mempool-config.signet.json b/production/mempool-config.signet.json index a0a2353cb..952845ae9 100644 --- a/production/mempool-config.signet.json +++ b/production/mempool-config.signet.json @@ -9,6 +9,7 @@ "API_URL_PREFIX": "/api/v1/", "INDEXING_BLOCKS_AMOUNT": -1, "AUTOMATIC_POOLS_UPDATE": true, + "POOLS_UPDATE_DELAY": 3600, "AUDIT": true, "RUST_GBT": true, "POLL_RATE_MS": 1000, diff --git a/production/mempool-config.testnet.json b/production/mempool-config.testnet.json index 81cd61dc4..5f9f3abb9 100644 --- a/production/mempool-config.testnet.json +++ b/production/mempool-config.testnet.json @@ -9,6 +9,7 @@ "API_URL_PREFIX": "/api/v1/", "INDEXING_BLOCKS_AMOUNT": -1, "AUTOMATIC_POOLS_UPDATE": true, + "POOLS_UPDATE_DELAY": 3600, "AUDIT": true, "RUST_GBT": true, "POLL_RATE_MS": 1000, diff --git a/production/mempool-config.testnet4.json b/production/mempool-config.testnet4.json index 91373d223..2e79309ed 100644 --- a/production/mempool-config.testnet4.json +++ b/production/mempool-config.testnet4.json @@ -9,6 +9,7 @@ "API_URL_PREFIX": "/api/v1/", "INDEXING_BLOCKS_AMOUNT": -1, "AUTOMATIC_POOLS_UPDATE": true, + "POOLS_UPDATE_DELAY": 3600, "AUDIT": true, "RUST_GBT": true, "POLL_RATE_MS": 1000, From c626bd1ea2b51d8eed9787e9f701613a5887279a Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 19 Feb 2025 10:56:13 -0600 Subject: [PATCH 068/534] ops: Remove old X-Frame-Options HTTP header --- production/nginx/server-common.conf | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf index 9a2a582c0..5a0b17b4e 100644 --- a/production/nginx/server-common.conf +++ b/production/nginx/server-common.conf @@ -8,33 +8,28 @@ 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 -if ($frameOptions = '') +if ($contentSecurityPolicy = '') { - set $frameOptions "DENY"; - set $contentSecurityPolicy "frame-ancestors 'none'"; + set $contentSecurityPolicy "frame-ancestors 'self'"; } # used for iframes on https://mempool.space/network if ($http_referer ~ ^https://mempool.space/) { - set $frameOptions "ALLOW-FROM https://mempool.space"; set $contentSecurityPolicy "frame-ancestors https://mempool.space"; } # used for iframes on https://mempool.ninja/network if ($http_referer ~ ^https://mempool.ninja/) { - set $frameOptions "ALLOW-FROM https://mempool.ninja"; set $contentSecurityPolicy "frame-ancestors https://mempool.ninja"; } # used for iframes on https://wiz.biz/bitcoin/nodes if ($http_referer ~ ^https://wiz.biz/) { - set $frameOptions "ALLOW-FROM https://wiz.biz"; set $contentSecurityPolicy "frame-ancestors https://wiz.biz"; } # restrict usage of frames -add_header X-Frame-Options $frameOptions; add_header Content-Security-Policy $contentSecurityPolicy; # enable browser and proxy caching From 7671600455b94bcbc96907bb1bdf07bc39be094f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 19 Feb 2025 15:03:03 +0000 Subject: [PATCH 069/534] temporary twidget mirror --- .../twitter-widget.component.ts | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts index 06b50b1dc..8f5894ad0 100644 --- a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts +++ b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts @@ -34,29 +34,39 @@ export class TwitterWidgetComponent implements OnChanges { } setIframeSrc(): void { - if (this.handle) { - this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL, - `https://syndication.x.com/srv/timeline-profile/screen-name/${this.handle}?creatorScreenName=mempool` - + '&dnt=true' - + '&embedId=twitter-widget-0' - + '&features=eyJ0ZndfdGltZWxpbmVfgbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9iYWNrZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19yZWZzcmNfc2Vzc2lvbiI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfZm9zbnJfc29mdF9pbnRlcnZlbnRpb25zX2VuYWJsZWQiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X21peGVkX21lZGlhXzE1ODk3Ijp7ImJ1Y2tldCI6InRyZWF0bWVudCIsInZlcnNpb24iOm51bGx9LCJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmlyZHdhdGNoX3Bpdm90c19lbmFibGVkIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19kdXBsaWNhdGVfc2NyaWJlc190b19zZXR0aW5ncyI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdXNlX3Byb2ZpbGVfaW1hZ2Vfc2hhcGVfZW5hYmxlZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdmlkZW9faGxzX2R5bmFtaWNfbWFuaWZlc3RzXzE1MDgyIjp7ImJ1Y2tldCI6InRydWVfYml0cmF0ZSIsInZlcnNpb24iOm51bGx9LCJ0ZndfbGVnYWN5X3RpbWVsaW5lX3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9mcm9udGVuZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9fQ%3D%3D' - + '&frame=false' - + '&hideBorder=true' - + '&hideFooter=false' - + '&hideHeader=true' - + '&hideScrollBar=false' - + `&lang=${this.lang}` - + '&maxHeight=500px' - + '&origin=https%3A%2F%2Fmempool.space%2F' - // + '&sessionId=88f6d661d0dcca99c43c0a590f6a3e61c89226a9' - + '&showHeader=false' - + '&showReplies=false' - + '&siteScreenName=mempool' - + '&theme=dark' - + '&transparent=true' - + '&widgetsVersion=2615f7e52b7e0%3A1702314776716' - )); + if (!this.handle) { + return; } + let url = `https://syndication.x.com/srv/timeline-profile/screen-name/${this.handle}?creatorScreenName=mempool` + + '&dnt=true' + + '&embedId=twitter-widget-0' + + '&features=eyJ0ZndfdGltZWxpbmVfgbGlzdCI6eyJidWNrZXQiOltdLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X2ZvbGxvd2VyX2NvdW50X3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9iYWNrZW5kIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19yZWZzcmNfc2Vzc2lvbiI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfZm9zbnJfc29mdF9pbnRlcnZlbnRpb25zX2VuYWJsZWQiOnsiYnVja2V0Ijoib24iLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X21peGVkX21lZGlhXzE1ODk3Ijp7ImJ1Y2tldCI6InRyZWF0bWVudCIsInZlcnNpb24iOm51bGx9LCJ0ZndfZXhwZXJpbWVudHNfY29va2llX2V4cGlyYXRpb24iOnsiYnVja2V0IjoxMjA5NjAwLCJ2ZXJzaW9uIjpudWxsfSwidGZ3X3Nob3dfYmlyZHdhdGNoX3Bpdm90c19lbmFibGVkIjp7ImJ1Y2tldCI6Im9uIiwidmVyc2lvbiI6bnVsbH0sInRmd19kdXBsaWNhdGVfc2NyaWJlc190b19zZXR0aW5ncyI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdXNlX3Byb2ZpbGVfaW1hZ2Vfc2hhcGVfZW5hYmxlZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9LCJ0ZndfdmlkZW9faGxzX2R5bmFtaWNfbWFuaWZlc3RzXzE1MDgyIjp7ImJ1Y2tldCI6InRydWVfYml0cmF0ZSIsInZlcnNpb24iOm51bGx9LCJ0ZndfbGVnYWN5X3RpbWVsaW5lX3N1bnNldCI6eyJidWNrZXQiOnRydWUsInZlcnNpb24iOm51bGx9LCJ0ZndfdHdlZXRfZWRpdF9mcm9udGVuZCI6eyJidWNrZXQiOiJvbiIsInZlcnNpb24iOm51bGx9fQ%3D%3D' + + '&frame=false' + + '&hideBorder=true' + + '&hideFooter=false' + + '&hideHeader=true' + + '&hideScrollBar=false' + + `&lang=${this.lang}` + + '&maxHeight=500px' + + '&origin=https%3A%2F%2Fmempool.space%2F' + // + '&sessionId=88f6d661d0dcca99c43c0a590f6a3e61c89226a9' + + '&showHeader=false' + + '&showReplies=false' + + '&siteScreenName=mempool' + + '&theme=dark' + + '&transparent=true' + + '&widgetsVersion=2615f7e52b7e0%3A1702314776716'; + switch (this.handle.toLowerCase()) { + case 'nayibbukele': + url = 'https://bitcoin.gob.sv/twidget'; + break; + case 'metaplanet_jp': + url = 'https://metaplanet.mempool.space/twidget'; + break; + default: + break; + } + this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL, url)); } onReady(): void { From 6ec1cc3fd5bea16f0ecdf45c76c667939b35abe0 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 20 Feb 2025 22:08:14 +0700 Subject: [PATCH 070/534] Deprecating the tv view --- frontend/cypress/e2e/liquid/liquid.spec.ts | 5 -- .../e2e/liquidtestnet/liquidtestnet.spec.ts | 5 -- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 20 ----- .../liquid-master-page.component.html | 5 -- .../statistics/statistics.component.html | 3 - .../television/television.component.html | 25 ------ .../television/television.component.scss | 80 ----------------- .../television/television.component.ts | 86 ------------------- frontend/src/app/graphs/graphs.module.ts | 2 - .../src/app/graphs/graphs.routing.module.ts | 6 -- 10 files changed, 237 deletions(-) delete mode 100644 frontend/src/app/components/television/television.component.html delete mode 100644 frontend/src/app/components/television/television.component.scss delete mode 100644 frontend/src/app/components/television/television.component.ts diff --git a/frontend/cypress/e2e/liquid/liquid.spec.ts b/frontend/cypress/e2e/liquid/liquid.spec.ts index c7d2a92ee..4fb7431d9 100644 --- a/frontend/cypress/e2e/liquid/liquid.spec.ts +++ b/frontend/cypress/e2e/liquid/liquid.spec.ts @@ -57,11 +57,6 @@ describe('Liquid', () => { }); }); - it('loads the tv page - desktop', () => { - cy.visit(`${basePath}/tv`); - cy.waitForSkeletonGone(); - }); - it('loads the graphs page - mobile', () => { cy.visit(`${basePath}`) cy.waitForSkeletonGone(); diff --git a/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts b/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts index 54e355ce8..7befda49f 100644 --- a/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts +++ b/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts @@ -57,11 +57,6 @@ describe('Liquid Testnet', () => { cy.waitForSkeletonGone(); }); - it('loads the tv page - desktop', () => { - cy.visit(`${basePath}/tv`); - cy.waitForSkeletonGone(); - }); - it('loads the graphs page - mobile', () => { cy.visit(`${basePath}`) cy.waitForSkeletonGone(); diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 7e17c09cd..08a4741b3 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -415,26 +415,6 @@ describe('Mainnet', () => { }); }); - it('loads the tv screen - desktop', () => { - cy.viewport('macbook-16'); - cy.visit('/graphs/mempool'); - cy.waitForSkeletonGone(); - cy.get('#btn-tv').click().then(() => { - cy.viewport('macbook-16'); - cy.get('.chart-holder'); - cy.get('.blockchain-wrapper').should('be.visible'); - cy.get('#mempool-block-0').should('be.visible'); - }); - }); - - it('loads the tv screen - mobile', () => { - cy.viewport('iphone-6'); - cy.visit('/tv'); - cy.waitForSkeletonGone(); - cy.get('.chart-holder'); - cy.get('.blockchain-wrapper').should('not.visible'); - }); - it('loads the api screen', () => { cy.visit('/'); cy.waitForSkeletonGone(); 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 7e39d9341..cd016471b 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 @@ -70,11 +70,6 @@
    - diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 168a3c0c3..eb37cc858 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -16,9 +16,6 @@ - - -
    diff --git a/frontend/src/app/components/television/television.component.html b/frontend/src/app/components/television/television.component.html deleted file mode 100644 index 23dd18389..000000000 --- a/frontend/src/app/components/television/television.component.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -
    - -
    -
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    diff --git a/frontend/src/app/components/television/television.component.scss b/frontend/src/app/components/television/television.component.scss deleted file mode 100644 index 9a6cbcc24..000000000 --- a/frontend/src/app/components/television/television.component.scss +++ /dev/null @@ -1,80 +0,0 @@ - -.loading { - margin: auto; - width: 100%; - display: flex; - text-align: center; - justify-content: center; - height: 100vh; - align-items: center; -} - -#tv-wrapper { - height: 100vh; - overflow: hidden; - position: relative; -} - -.chart-holder { - position: relative; - height: 655px; - width: 100%; - margin: 30px auto 0; -} - -.blockchain-wrapper { - display: block; - height: 100%; - min-height: 240px; - position: relative; - top: 30px; - - .position-container { - position: absolute; - left: 0; - bottom: 170px; - transform: translateX(50vw); - } - - #divider { - width: 2px; - height: 175px; - left: 0; - top: -40px; - position: absolute; - img { - position: absolute; - left: -100px; - top: -28px; - } - } - - &.time-ltr { - .blocks-wrapper { - transform: scaleX(-1); - } - } -} - -:host-context(.ltr-layout) { - .blockchain-wrapper.time-ltr .blocks-wrapper, - .blockchain-wrapper .blocks-wrapper { - direction: ltr; - } -} - -:host-context(.rtl-layout) { - .blockchain-wrapper.time-ltr .blocks-wrapper, - .blockchain-wrapper .blocks-wrapper { - direction: rtl; - } -} - -.tv-container { - display: flex; - margin-top: 0px; - flex-direction: column; -} - - - diff --git a/frontend/src/app/components/television/television.component.ts b/frontend/src/app/components/television/television.component.ts deleted file mode 100644 index 1507f3d97..000000000 --- a/frontend/src/app/components/television/television.component.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -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'; -import { ChangeDetectionStrategy } from '@angular/core'; - -@Component({ - selector: 'app-television', - templateUrl: './television.component.html', - styleUrls: ['./television.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush -}) -export class TelevisionComponent implements OnInit, OnDestroy { - - mempoolStats: OptimizedMempoolStats[] = []; - statsSubscription$: Observable; - fragment: string; - timeLtrSubscription: Subscription; - timeLtr: boolean = this.stateService.timeLtr.value; - - constructor( - private websocketService: WebsocketService, - private apiService: ApiService, - private stateService: StateService, - private seoService: SeoService, - private route: ActivatedRoute - ) { } - - refreshStats(time: number, fn: Observable) { - return interval(time).pipe(startWith(0), switchMap(() => fn)); - } - - ngOnInit() { - this.seoService.setTitle($localize`:@@46ce8155c9ab953edeec97e8950b5a21e67d7c4e:TV view`); - this.seoService.setDescription($localize`:@@meta.description.tv:See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV.`); - this.websocketService.want(['blocks', 'live-2h-chart', 'mempool-blocks']); - - this.timeLtrSubscription = this.stateService.timeLtr.subscribe((ltr) => { - this.timeLtr = !!ltr; - }); - - this.statsSubscription$ = merge( - this.stateService.live2Chart$.pipe(map(stats => [stats])), - this.route.fragment - .pipe( - tap(fragment => { this.fragment = fragment ?? '2h'; }), - switchMap((fragment) => { - const minute = 60000; const hour = 3600000; - switch (fragment) { - case '24h': return this.apiService.list24HStatistics$(); - case '1w': return this.refreshStats(5 * minute, this.apiService.list1WStatistics$()); - case '1m': return this.refreshStats(30 * minute, this.apiService.list1MStatistics$()); - case '3m': return this.refreshStats(2 * hour, this.apiService.list3MStatistics$()); - case '6m': return this.refreshStats(3 * hour, this.apiService.list6MStatistics$()); - case '1y': return this.refreshStats(8 * hour, this.apiService.list1YStatistics$()); - case '2y': return this.refreshStats(8 * hour, this.apiService.list2YStatistics$()); - case '3y': return this.refreshStats(12 * hour, this.apiService.list3YStatistics$()); - default /* 2h */: return this.apiService.list2HStatistics$(); - } - }) - ) - ) - .pipe( - scan((mempoolStats, newStats) => { - if (newStats.length > 1) { - mempoolStats = newStats; - } else if (['2h', '24h'].includes(this.fragment)) { - mempoolStats.unshift(newStats[0]); - const now = Date.now() / 1000; - const start = now - (this.fragment === '2h' ? (2 * 60 * 60) : (24 * 60 * 60) ); - mempoolStats = mempoolStats.filter(p => p.added >= start); - } - return mempoolStats; - }) - ); - } - - ngOnDestroy() { - this.timeLtrSubscription.unsubscribe(); - } -} diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index f882b4221..8ebf06f7c 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -26,7 +26,6 @@ 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'; @@ -56,7 +55,6 @@ import { CommonModule } from '@angular/common'; AcceleratorDashboardComponent, PoolComponent, PoolRankingComponent, - TelevisionComponent, StatisticsComponent, GraphsComponent, diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index 886d55072..e8dbaece3 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -16,7 +16,6 @@ import { PoolRankingComponent } from '@components/pool-ranking/pool-ranking.comp 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'; @@ -180,11 +179,6 @@ const routes: Routes = [ }, ] }, - { - path: 'tv', - data: { networks: ['bitcoin', 'liquid'] }, - component: TelevisionComponent - }, ]; @NgModule({ From e40ca40ecbe1061bb9749ee0536550bc811e9050 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 20 Feb 2025 22:11:45 +0700 Subject: [PATCH 071/534] Remove tv icon dep --- frontend/src/app/shared/shared.module.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index d937e6bbb..0870eeabf 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { NgbCollapseModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faChartArea, faCogs, faCubes, faHammer, faDatabase, faExchangeAlt, faInfoCircle, - faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, + faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline, @@ -395,7 +395,6 @@ export class SharedModule { constructor(library: FaIconLibrary) { library.addIcons(faInfoCircle); library.addIcons(faChartArea); - library.addIcons(faTv); library.addIcons(faClock); library.addIcons(faTachometerAlt); library.addIcons(faCubes); From 650c3d949dd3e969fd7b1e9f08b129239c25b977 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sat, 22 Feb 2025 22:25:52 +0700 Subject: [PATCH 072/534] remove tv mode tests --- frontend/cypress/e2e/signet/signet.spec.ts | 24 ------------------- .../cypress/e2e/testnet4/testnet4.spec.ts | 24 ------------------- 2 files changed, 48 deletions(-) diff --git a/frontend/cypress/e2e/signet/signet.spec.ts b/frontend/cypress/e2e/signet/signet.spec.ts index 11c47d14d..ae591c6a7 100644 --- a/frontend/cypress/e2e/signet/signet.spec.ts +++ b/frontend/cypress/e2e/signet/signet.spec.ts @@ -60,30 +60,6 @@ describe('Signet', () => { }); }); - describe.skip('tv mode', () => { - it('loads the tv screen - desktop', () => { - cy.viewport('macbook-16'); - cy.visit('/signet/graphs'); - cy.waitForSkeletonGone(); - cy.get('#btn-tv').click().then(() => { - cy.get('.chart-holder').should('be.visible'); - cy.get('#mempool-block-0').should('be.visible'); - cy.get('.tv-only').should('not.exist'); - }); - }); - - it('loads the tv screen - mobile', () => { - cy.visit('/signet/graphs'); - cy.waitForSkeletonGone(); - cy.get('#btn-tv').click().then(() => { - cy.viewport('iphone-8'); - cy.get('.chart-holder').should('be.visible'); - cy.get('.tv-only').should('not.exist'); - cy.get('#mempool-block-0').should('be.visible'); - }); - }); - }); - it('loads the api screen', () => { cy.visit('/signet'); cy.waitForSkeletonGone(); diff --git a/frontend/cypress/e2e/testnet4/testnet4.spec.ts b/frontend/cypress/e2e/testnet4/testnet4.spec.ts index c67d2414b..97af0e08e 100644 --- a/frontend/cypress/e2e/testnet4/testnet4.spec.ts +++ b/frontend/cypress/e2e/testnet4/testnet4.spec.ts @@ -60,30 +60,6 @@ describe('Testnet4', () => { }); }); - describe('tv mode', () => { - it('loads the tv screen - desktop', () => { - cy.viewport('macbook-16'); - cy.visit('/testnet4/graphs'); - cy.waitForSkeletonGone(); - cy.get('#btn-tv').click().then(() => { - cy.wait(1000); - cy.get('.tv-only').should('not.exist'); - cy.get('#mempool-block-0').should('be.visible'); - }); - }); - - it('loads the tv screen - mobile', () => { - cy.visit('/testnet4/graphs'); - cy.waitForSkeletonGone(); - cy.get('#btn-tv').click().then(() => { - cy.viewport('iphone-6'); - cy.wait(1000); - cy.get('.tv-only').should('not.exist'); - }); - }); - }); - - it('loads the api screen', () => { cy.visit('/testnet4'); cy.waitForSkeletonGone(); From d82a9f6c6a58366d2f022499d6b82644278356cf Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Tue, 25 Feb 2025 18:56:29 -0800 Subject: [PATCH 073/534] Tweak Docker workflow --- .github/workflows/on-tag.yml | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 634a27ab9..ba9e1eb7b 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -2,7 +2,7 @@ name: Docker build on tag env: DOCKER_CLI_EXPERIMENTAL: enabled TAG_FMT: "^refs/tags/(((.?[0-9]+){3,4}))$" - DOCKER_BUILDKIT: 0 + DOCKER_BUILDKIT: 1 # Enable BuildKit for better performance COMPOSE_DOCKER_CLI_BUILD: 0 on: @@ -25,13 +25,12 @@ jobs: timeout-minutes: 120 name: Build and push to DockerHub steps: - # Workaround based on JonasAlfredsson/docker-on-tmpfs@v1.0.1 - name: Replace the current swap file shell: bash run: | - sudo swapoff /mnt/swapfile - sudo rm -v /mnt/swapfile - sudo fallocate -l 13G /mnt/swapfile + sudo swapoff /mnt/swapfile || true + sudo rm -f /mnt/swapfile + sudo fallocate -l 16G /mnt/swapfile sudo chmod 600 /mnt/swapfile sudo mkswap /mnt/swapfile sudo swapon /mnt/swapfile @@ -50,7 +49,7 @@ jobs: echo "Directory '/var/lib/docker' not found" exit 1 fi - sudo mount -t tmpfs -o size=10G tmpfs /var/lib/docker + sudo mount -t tmpfs -o size=12G tmpfs /var/lib/docker sudo systemctl restart docker sudo df -h | grep docker @@ -75,10 +74,16 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v3 + with: + platforms: linux/amd64,linux/arm64 id: qemu - name: Setup Docker buildx action uses: docker/setup-buildx-action@v3 + with: + platforms: linux/amd64,linux/arm64 + driver-opts: | + network=host id: buildx - name: Available platforms @@ -89,19 +94,20 @@ jobs: id: cache with: path: /tmp/.buildx-cache - key: ${{ runner.os }}-buildx-${{ github.sha }} + key: ${{ runner.os }}-buildx-${{ matrix.service }}-${{ github.sha }} restore-keys: | - ${{ runner.os }}-buildx- + ${{ runner.os }}-buildx-${{ matrix.service }}- - name: Run Docker buildx for ${{ matrix.service }} against tag run: | docker buildx build \ --cache-from "type=local,src=/tmp/.buildx-cache" \ - --cache-to "type=local,dest=/tmp/.buildx-cache" \ + --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ - --output "type=registry" ./${{ matrix.service }}/ \ - --build-arg commitHash=$SHORT_SHA + --output "type=registry,push=true" \ + --build-arg commitHash=$SHORT_SHA \ + ./${{ matrix.service }}/ \ No newline at end of file From e6f13766d3c05a910d3d146f457762a30f6c86ee Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Tue, 25 Feb 2025 19:05:28 -0800 Subject: [PATCH 074/534] Update Docker images --- docker/backend/Dockerfile | 29 ++++++++++++++++++----------- docker/frontend/Dockerfile | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 60d663f20..e56b07da3 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -1,20 +1,20 @@ -FROM node:20.15.0-buster-slim AS builder +FROM rust:1.84-bookworm AS builder ARG commitHash ENV MEMPOOL_COMMIT_HASH=${commitHash} WORKDIR /build + +RUN apt-get update && \ + apt-get install -y curl ca-certificates && \ + curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ + apt-get install -y nodejs build-essential python3 pkg-config && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + COPY . . -RUN apt-get update -RUN apt-get install -y build-essential python3 pkg-config curl ca-certificates - -# Install Rust via rustup -RUN CPU_ARCH=$(uname -m); if [ "$CPU_ARCH" = "armv7l" ]; then c_rehash; fi -#RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable -#Workaround to run on github actions from https://github.com/rust-lang/rustup/issues/2700#issuecomment-1367488985 -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sed 's#/proc/self/exe#\/bin\/sh#g' | sh -s -- -y --default-toolchain stable -ENV PATH="/root/.cargo/bin:$PATH" +ENV PATH="/usr/local/cargo/bin:$PATH" COPY --from=backend . . COPY --from=rustgbt . ../rust/ @@ -24,7 +24,14 @@ RUN npm install --omit=dev --omit=optional WORKDIR /build RUN npm run package -FROM node:20.15.0-buster-slim +FROM rust:1.84-bookworm AS runtime + +RUN apt-get update && \ + apt-get install -y curl ca-certificates && \ + curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ + apt-get install -y nodejs && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* WORKDIR /backend diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index 8374ebe49..8d97c9dc6 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20.15.0-buster-slim AS builder +FROM node:22-bookworm-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} From cfe7c93755c38a0837cc4744add1c6a821fc2160 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 02:13:31 +0000 Subject: [PATCH 075/534] Bump axios from 1.7.2 to 1.8.1 in /backend Bumps [axios](https://github.com/axios/axios) from 1.7.2 to 1.8.1. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.2...v1.8.1) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 14 +++++++------- backend/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 3f66fa25b..1aaa77f85 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.7.2", + "axios": "1.8.1", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", @@ -2275,9 +2275,9 @@ } }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", + "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -9459,9 +9459,9 @@ "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==" }, "axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", + "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/backend/package.json b/backend/package.json index ee5944f93..efc5a4501 100644 --- a/backend/package.json +++ b/backend/package.json @@ -41,7 +41,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.7.2", + "axios": "1.8.1", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", From 5116da2626432b4c6a0818671cee19897370d5f6 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Fri, 28 Feb 2025 23:20:40 -0800 Subject: [PATCH 076/534] Do not update the latest tag when building --- .github/workflows/on-tag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index ba9e1eb7b..8a846631c 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -105,7 +105,7 @@ jobs: --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ - --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ + # --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ --output "type=registry,push=true" \ From 9c358060aa0f881414a95ac9d52cf38d364845aa Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Fri, 28 Feb 2025 23:22:00 -0800 Subject: [PATCH 077/534] Add dispatch workflow to update the latest tag --- .../workflows/docker_update_latest_tag.yml | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 .github/workflows/docker_update_latest_tag.yml diff --git a/.github/workflows/docker_update_latest_tag.yml b/.github/workflows/docker_update_latest_tag.yml new file mode 100644 index 000000000..5d21697d5 --- /dev/null +++ b/.github/workflows/docker_update_latest_tag.yml @@ -0,0 +1,181 @@ +name: Docker - Update latest tag + +on: + workflow_dispatch: + inputs: + tag: + description: 'The Docker image tag to pull' + required: true + type: string + +jobs: + retag-and-push: + strategy: + matrix: + service: + - frontend + - backend + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3 + id: buildx + with: + install: true + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: linux/amd64,linux/arm64 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USER }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Get source image manifest and SHAs + id: source-manifest + run: | + set -e + echo "Fetching source manifest..." + MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }}) + if [ -z "$MANIFEST" ]; then + echo "No manifest found. Assuming single-arch image." + exit 1 + fi + + echo "Original source manifest:" + echo "$MANIFEST" | jq . + + AMD64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest') + ARM64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest') + + if [ -z "$AMD64_SHA" ] || [ -z "$ARM64_SHA" ]; then + echo "Source image is not multi-arch (missing amd64 or arm64)" + exit 1 + fi + + echo "Source amd64 manifest digest: $AMD64_SHA" + echo "Source arm64 manifest digest: $ARM64_SHA" + + echo "amd64_sha=$AMD64_SHA" >> $GITHUB_OUTPUT + echo "arm64_sha=$ARM64_SHA" >> $GITHUB_OUTPUT + + - name: Pull and retag architecture-specific images + run: | + set -e + + docker buildx inspect --bootstrap + + # Remove any existing local images to avoid cache interference + echo "Removing existing local images if they exist..." + docker image rm ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true + + # Pull amd64 image by digest + echo "Pulling amd64 image by digest..." + docker pull --platform linux/amd64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} + PULLED_AMD64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2) + PULLED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{.Id}}') + echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST" + echo "Pulled amd64 image ID (sha256): $PULLED_AMD64_IMAGE_ID" + + # Pull arm64 image by digest + echo "Pulling arm64 image by digest..." + docker pull --platform linux/arm64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} + PULLED_ARM64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2) + PULLED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{.Id}}') + echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST" + echo "Pulled arm64 image ID (sha256): $PULLED_ARM64_IMAGE_ID" + + # Tag the images + docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 + docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 + + # Verify tagged images + TAGGED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{.Id}}') + TAGGED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{.Id}}') + echo "Tagged amd64 image ID (sha256): $TAGGED_AMD64_IMAGE_ID" + echo "Tagged arm64 image ID (sha256): $TAGGED_ARM64_IMAGE_ID" + + - name: Push architecture-specific images + run: | + set -e + + echo "Pushing amd64 image..." + docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 + PUSHED_AMD64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2) + echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST" + + # Fetch manifest from registry after push + echo "Fetching pushed amd64 manifest from registry..." + PUSHED_AMD64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64) + PUSHED_AMD64_REGISTRY_DIGEST=$(echo "$PUSHED_AMD64_REGISTRY_MANIFEST" | jq -r '.config.digest') + echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST" + + echo "Pushing arm64 image..." + docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 + PUSHED_ARM64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2) + echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST" + + # Fetch manifest from registry after push + echo "Fetching pushed arm64 manifest from registry..." + PUSHED_ARM64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64) + PUSHED_ARM64_REGISTRY_DIGEST=$(echo "$PUSHED_ARM64_REGISTRY_MANIFEST" | jq -r '.config.digest') + echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST" + + - name: Create and push multi-arch manifest with original digests + run: | + set -e + + echo "Creating multi-arch manifest with original digests..." + docker manifest create ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest \ + ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} \ + ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} + + echo "Pushing multi-arch manifest..." + docker manifest push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest + + - name: Clean up intermediate tags + if: success() + run: | + docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 || true + docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 || true + docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true + + - name: Verify final manifest + run: | + set -e + echo "Fetching final generated manifest..." + FINAL_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest) + echo "Generated final manifest:" + echo "$FINAL_MANIFEST" | jq . + + FINAL_AMD64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest') + FINAL_ARM64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest') + + echo "Final amd64 manifest digest: $FINAL_AMD64_SHA" + echo "Final arm64 manifest digest: $FINAL_ARM64_SHA" + + # Compare all digests + echo "Comparing digests..." + echo "Source amd64 digest: ${{ steps.source-manifest.outputs.amd64_sha }}" + echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST" + echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST" + echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST" + echo "Final amd64 digest: $FINAL_AMD64_SHA" + echo "Source arm64 digest: ${{ steps.source-manifest.outputs.arm64_sha }}" + echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST" + echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST" + echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST" + echo "Final arm64 digest: $FINAL_ARM64_SHA" + + if [ "$FINAL_AMD64_SHA" != "${{ steps.source-manifest.outputs.amd64_sha }}" ] || [ "$FINAL_ARM64_SHA" != "${{ steps.source-manifest.outputs.arm64_sha }}" ]; then + echo "Error: Final manifest SHAs do not match source SHAs" + exit 1 + fi + + echo "Successfully created multi-arch ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest from ${{ github.event.inputs.tag }}" From c01e11899c78c14d3aa2a7c6371ed5015407f398 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 4 Mar 2025 16:25:54 +0100 Subject: [PATCH 078/534] PSBT support in transaction preview --- .../transaction-raw.component.html | 4 +- .../transaction/transaction-raw.component.ts | 92 +-- frontend/src/app/shared/transaction.utils.ts | 523 ++++++++++++++---- 3 files changed, 458 insertions(+), 161 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index b761bc8a9..3bd8ee6d2 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -6,7 +6,7 @@
    - +
    @@ -192,7 +192,7 @@
    - +
    HeightRewardCoinbase Tag Merkle Branches PoolCoinbase TagRewardHeight
    - {{ row.job.height }} - - - - {{ row.job.tag }} - @if ($index === 0 && cell.hash) { @@ -47,6 +38,15 @@ } + {{ row.job.tag }} + + + + {{ row.job.height }} +
    diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 4d85a938d..05f0855a9 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -412,13 +412,13 @@ export interface Acceleration { feeDelta: number; blockHash: string; blockHeight: number; - acceleratedFeeRate?: number; boost?: number; bidBoost?: number; boostCost?: number; boostRate?: number; minedByPoolUniqueId?: number; + canceled?: number; } export interface AccelerationHistoryParams { From b3f21a10b9a77d7198ca641e4139256301ccf2ef Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 23 Jan 2025 14:55:31 +0900 Subject: [PATCH 041/534] [accelerator] truncate dashboard title --- .../accelerations-list/accelerations-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 225bf1955..f4f7277ae 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 @@ -14,7 +14,7 @@ Requested Bid BoostBid Boost Block Pool Status
    + @if ($index === 0 && branch) { + + + + } + {{ (tx.fee | number) ?? '-' }} sats @if (isAcceleration && accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats } - +
    Miner diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 42a47f3c4..f5b31e846 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -35,6 +35,8 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { overviewSubscription: Subscription; networkChangedSubscription: Subscription; + ogSession: number; + @ViewChild('blockGraph') blockGraph: BlockOverviewGraphComponent; constructor( @@ -53,8 +55,8 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { const block$ = this.route.paramMap.pipe( switchMap((params: ParamMap) => { this.rawId = params.get('id') || ''; - this.openGraphService.waitFor('block-viz-' + this.rawId); - this.openGraphService.waitFor('block-data-' + this.rawId); + this.ogSession = this.openGraphService.waitFor('block-viz-' + this.rawId); + this.ogSession = this.openGraphService.waitFor('block-data-' + this.rawId); const blockHash: string = params.get('id') || ''; this.block = undefined; @@ -86,8 +88,8 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { catchError((err) => { this.error = err; this.seoService.logSoft404(); - this.openGraphService.fail('block-data-' + this.rawId); - this.openGraphService.fail('block-viz-' + this.rawId); + this.openGraphService.fail({ event: 'block-data-' + this.rawId, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'block-viz-' + this.rawId, sessionId: this.ogSession }); return of(null); }), ); @@ -114,7 +116,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { this.isLoadingOverview = true; this.overviewError = null; - this.openGraphService.waitOver('block-data-' + this.rawId); + this.openGraphService.waitOver({ event: 'block-data-' + this.rawId, sessionId: this.ogSession }); }), throttleTime(50, asyncScheduler, { leading: true, trailing: true }), shareReplay({ bufferSize: 1, refCount: true }) @@ -129,7 +131,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { .pipe( catchError((err) => { this.overviewError = err; - this.openGraphService.fail('block-viz-' + this.rawId); + this.openGraphService.fail({ event: 'block-viz-' + this.rawId, sessionId: this.ogSession }); return of([]); }), switchMap((transactions) => { @@ -138,7 +140,8 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { ), this.stateService.env.ACCELERATOR === true && block.height > 819500 ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) - .pipe(catchError(() => { + .pipe( + catchError(() => { return of([]); })) : of([]) @@ -169,8 +172,8 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { this.error = error; this.isLoadingOverview = false; this.seoService.logSoft404(); - this.openGraphService.fail('block-viz-' + this.rawId); - this.openGraphService.fail('block-data-' + this.rawId); + this.openGraphService.fail({ event: 'block-viz-' + this.rawId, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'block-data-' + this.rawId, sessionId: this.ogSession }); if (this.blockGraph) { this.blockGraph.destroy(); } @@ -196,6 +199,6 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { } onGraphReady(): void { - this.openGraphService.waitOver('block-viz-' + this.rawId); + this.openGraphService.waitOver({ event: 'block-viz-' + this.rawId, sessionId: this.ogSession }); } } diff --git a/frontend/src/app/components/pool/pool-preview.component.ts b/frontend/src/app/components/pool/pool-preview.component.ts index 93077120d..7478e5f6f 100644 --- a/frontend/src/app/components/pool/pool-preview.component.ts +++ b/frontend/src/app/components/pool/pool-preview.component.ts @@ -30,6 +30,8 @@ export class PoolPreviewComponent implements OnInit { slug: string = undefined; + ogSession: number; + constructor( @Inject(LOCALE_ID) public locale: string, private apiService: ApiService, @@ -47,22 +49,22 @@ export class PoolPreviewComponent implements OnInit { this.isLoading = true; this.imageLoaded = false; this.slug = slug; - this.openGraphService.waitFor('pool-hash-' + this.slug); - this.openGraphService.waitFor('pool-stats-' + this.slug); - this.openGraphService.waitFor('pool-chart-' + this.slug); - this.openGraphService.waitFor('pool-img-' + this.slug); + this.ogSession = this.openGraphService.waitFor('pool-hash-' + this.slug); + this.ogSession = this.openGraphService.waitFor('pool-stats-' + this.slug); + this.ogSession = this.openGraphService.waitFor('pool-chart-' + this.slug); + this.ogSession = this.openGraphService.waitFor('pool-img-' + this.slug); return this.apiService.getPoolHashrate$(this.slug) .pipe( switchMap((data) => { this.isLoading = false; this.prepareChartOptions(data.map(val => [val.timestamp * 1000, val.avgHashrate])); - this.openGraphService.waitOver('pool-hash-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-hash-' + this.slug, sessionId: this.ogSession }); return [slug]; }), catchError(() => { this.isLoading = false; this.seoService.logSoft404(); - this.openGraphService.fail('pool-hash-' + this.slug); + this.openGraphService.fail({ event: 'pool-hash-' + this.slug, sessionId: this.ogSession }); return of([slug]); }) ); @@ -72,7 +74,7 @@ export class PoolPreviewComponent implements OnInit { catchError(() => { this.isLoading = false; this.seoService.logSoft404(); - this.openGraphService.fail('pool-stats-' + this.slug); + this.openGraphService.fail({ event: 'pool-stats-' + this.slug, sessionId: this.ogSession }); return of(null); }) ); @@ -90,11 +92,11 @@ export class PoolPreviewComponent implements OnInit { } poolStats.pool.regexes = regexes.slice(0, -3); - this.openGraphService.waitOver('pool-stats-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-stats-' + this.slug, sessionId: this.ogSession }); const logoSrc = `/resources/mining-pools/` + poolStats.pool.slug + '.svg'; if (logoSrc === this.lastImgSrc) { - this.openGraphService.waitOver('pool-img-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-img-' + this.slug, sessionId: this.ogSession }); } this.lastImgSrc = logoSrc; return Object.assign({ @@ -103,7 +105,7 @@ export class PoolPreviewComponent implements OnInit { }), catchError(() => { this.isLoading = false; - this.openGraphService.fail('pool-stats-' + this.slug); + this.openGraphService.fail({ event: 'pool-stats-' + this.slug, sessionId: this.ogSession }); return of(null); }) ); @@ -170,16 +172,16 @@ export class PoolPreviewComponent implements OnInit { } onChartReady(): void { - this.openGraphService.waitOver('pool-chart-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-chart-' + this.slug, sessionId: this.ogSession }); } onImageLoad(): void { this.imageLoaded = true; - this.openGraphService.waitOver('pool-img-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-img-' + this.slug, sessionId: this.ogSession }); } onImageFail(): void { this.imageLoaded = false; - this.openGraphService.waitOver('pool-img-' + this.slug); + this.openGraphService.waitOver({ event: 'pool-img-' + this.slug, sessionId: this.ogSession }); } } diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 0c51e0064..4746f9de7 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -43,6 +43,8 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { opReturns: Vout[]; extraData: 'none' | 'coinbase' | 'opreturn'; + ogSession: number; + constructor( private route: ActivatedRoute, private electrsApiService: ElectrsApiService, @@ -75,7 +77,7 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { ) .subscribe((cpfpInfo) => { this.cpfpInfo = cpfpInfo; - this.openGraphService.waitOver('cpfp-data-' + this.txId); + this.openGraphService.waitOver({ event: 'cpfp-data-' + this.txId, sessionId: this.ogSession }); }); this.subscription = this.route.paramMap @@ -83,8 +85,8 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { switchMap((params: ParamMap) => { const urlMatch = (params.get('id') || '').split(':'); this.txId = urlMatch[0]; - this.openGraphService.waitFor('tx-data-' + this.txId); - this.openGraphService.waitFor('tx-time-' + this.txId); + this.ogSession = this.openGraphService.waitFor('tx-data-' + this.txId); + this.ogSession = this.openGraphService.waitFor('tx-time-' + this.txId); this.seoService.setTitle( $localize`:@@bisq.transaction.browser-title:Transaction: ${this.txId}:INTERPOLATION:` ); @@ -138,7 +140,7 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { .subscribe((tx: Transaction) => { if (!tx) { this.seoService.logSoft404(); - this.openGraphService.fail('tx-data-' + this.txId); + this.openGraphService.fail({ event: 'tx-data-' + this.txId, sessionId: this.ogSession }); return; } @@ -155,10 +157,10 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { if (tx.status.confirmed) { this.transactionTime = tx.status.block_time; - this.openGraphService.waitOver('tx-time-' + this.txId); + this.openGraphService.waitOver({ event: 'tx-time-' + this.txId, sessionId: this.ogSession }); } else if (!tx.status.confirmed && tx.firstSeen) { this.transactionTime = tx.firstSeen; - this.openGraphService.waitOver('tx-time-' + this.txId); + this.openGraphService.waitOver({ event: 'tx-time-' + this.txId, sessionId: this.ogSession }); } else { this.getTransactionTime(); } @@ -184,11 +186,11 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { } } - this.openGraphService.waitOver('tx-data-' + this.txId); + this.openGraphService.waitOver({ event: 'tx-data-' + this.txId, sessionId: this.ogSession }); }, (error) => { this.seoService.logSoft404(); - this.openGraphService.fail('tx-data-' + this.txId); + this.openGraphService.fail({ event: 'tx-data-' + this.txId, sessionId: this.ogSession }); this.error = error; this.isLoadingTx = false; } @@ -205,7 +207,7 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { ) .subscribe((transactionTimes) => { this.transactionTime = transactionTimes[0]; - this.openGraphService.waitOver('tx-time-' + this.txId); + this.openGraphService.waitOver({ event: 'tx-time-' + this.txId, sessionId: this.ogSession }); }); } diff --git a/frontend/src/app/components/wallet/wallet-preview.component.ts b/frontend/src/app/components/wallet/wallet-preview.component.ts index 0387822aa..bbf8ecf7a 100644 --- a/frontend/src/app/components/wallet/wallet-preview.component.ts +++ b/frontend/src/app/components/wallet/wallet-preview.component.ts @@ -125,6 +125,8 @@ export class WalletPreviewComponent implements OnInit, OnDestroy { sent = 0; chainBalance = 0; + ogSession: number; + constructor( private route: ActivatedRoute, private stateService: StateService, @@ -141,9 +143,9 @@ export class WalletPreviewComponent implements OnInit, OnDestroy { map((params: ParamMap) => params.get('wallet') as string), tap((walletName: string) => { this.walletName = walletName; - this.openGraphService.waitFor('wallet-addresses-' + this.walletName); - this.openGraphService.waitFor('wallet-data-' + this.walletName); - this.openGraphService.waitFor('wallet-txs-' + this.walletName); + this.ogSession = this.openGraphService.waitFor('wallet-addresses-' + this.walletName); + this.ogSession = this.openGraphService.waitFor('wallet-data-' + this.walletName); + this.ogSession = this.openGraphService.waitFor('wallet-txs-' + this.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:.`); }), @@ -152,9 +154,9 @@ export class WalletPreviewComponent implements OnInit, OnDestroy { this.error = err; this.seoService.logSoft404(); console.log(err); - this.openGraphService.fail('wallet-addresses-' + this.walletName); - this.openGraphService.fail('wallet-data-' + this.walletName); - this.openGraphService.fail('wallet-txs-' + this.walletName); + this.openGraphService.fail({ event: 'wallet-addresses-' + this.walletName, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'wallet-data-' + this.walletName, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'wallet-txs-' + this.walletName, sessionId: this.ogSession }); return of({}); }) )), @@ -185,13 +187,13 @@ export class WalletPreviewComponent implements OnInit, OnDestroy { this.walletSubscription = this.walletAddresses$.subscribe(wallet => { this.addressStrings = Object.keys(wallet); this.addresses = Object.values(wallet); - this.openGraphService.waitOver('wallet-addresses-' + this.walletName); + this.openGraphService.waitOver({ event: 'wallet-addresses-' + this.walletName, sessionId: this.ogSession }); }); this.walletSummary$ = this.wallet$.pipe( map(wallet => this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))), tap(() => { - this.openGraphService.waitOver('wallet-txs-' + this.walletName); + this.openGraphService.waitOver({ event: 'wallet-txs-' + this.walletName, sessionId: this.ogSession }); }) ); @@ -209,7 +211,7 @@ export class WalletPreviewComponent implements OnInit, OnDestroy { ); }), tap(() => { - this.openGraphService.waitOver('wallet-data-' + this.walletName); + this.openGraphService.waitOver({ event: 'wallet-data-' + this.walletName, sessionId: this.ogSession }); }) ); } diff --git a/frontend/src/app/lightning/channel/channel-preview.component.ts b/frontend/src/app/lightning/channel/channel-preview.component.ts index 84a85f9c6..2af0dcd57 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.ts +++ b/frontend/src/app/lightning/channel/channel-preview.component.ts @@ -18,6 +18,8 @@ export class ChannelPreviewComponent implements OnInit { channelGeo: number[] = []; shortId: string; + ogSession: number; + constructor( private lightningApiService: LightningApiService, private activatedRoute: ActivatedRoute, @@ -30,8 +32,8 @@ export class ChannelPreviewComponent implements OnInit { .pipe( switchMap((params: ParamMap) => { this.shortId = params.get('short_id') || ''; - this.openGraphService.waitFor('channel-map-' + this.shortId); - this.openGraphService.waitFor('channel-data-' + this.shortId); + this.ogSession = this.openGraphService.waitFor('channel-map-' + this.shortId); + this.ogSession = this.openGraphService.waitFor('channel-data-' + this.shortId); this.error = null; this.seoService.setTitle(`Channel: ${params.get('short_id')}`); this.seoService.setDescription($localize`:@@meta.description.lightning.channel:Overview for Lightning channel ${params.get('short_id')}. See channel capacity, the Lightning nodes involved, related on-chain transactions, and more.`); @@ -51,13 +53,13 @@ export class ChannelPreviewComponent implements OnInit { data.node_right.longitude, data.node_right.latitude, ]; } - this.openGraphService.waitOver('channel-data-' + this.shortId); + this.openGraphService.waitOver({ event: 'channel-data-' + this.shortId, sessionId: this.ogSession }); }), catchError((err) => { this.error = err; this.seoService.logSoft404(); - this.openGraphService.fail('channel-map-' + this.shortId); - this.openGraphService.fail('channel-data-' + this.shortId); + this.openGraphService.fail({ event: 'channel-map-' + this.shortId, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'channel-data-' + this.shortId, sessionId: this.ogSession }); return of(null); }) ); @@ -66,6 +68,6 @@ export class ChannelPreviewComponent implements OnInit { } onMapReady() { - this.openGraphService.waitOver('channel-map-' + this.shortId); + this.openGraphService.waitOver({ event: 'channel-map-' + this.shortId, sessionId: this.ogSession }); } } diff --git a/frontend/src/app/lightning/group/group-preview.component.ts b/frontend/src/app/lightning/group/group-preview.component.ts index 4b8f5ed77..4e7d56bbe 100644 --- a/frontend/src/app/lightning/group/group-preview.component.ts +++ b/frontend/src/app/lightning/group/group-preview.component.ts @@ -22,6 +22,8 @@ export class GroupPreviewComponent implements OnInit { slug: string; groupId: string; + ogSession: number; + constructor( private lightningApiService: LightningApiService, private activatedRoute: ActivatedRoute, @@ -37,8 +39,8 @@ export class GroupPreviewComponent implements OnInit { .pipe( switchMap((params: ParamMap) => { this.slug = params.get('slug'); - this.openGraphService.waitFor('ln-group-map-' + this.slug); - this.openGraphService.waitFor('ln-group-data-' + this.slug); + this.ogSession = this.openGraphService.waitFor('ln-group-map-' + this.slug); + this.ogSession = this.openGraphService.waitFor('ln-group-data-' + this.slug); if (this.slug === 'the-mempool-open-source-project') { this.groupId = 'mempool.space'; @@ -52,8 +54,8 @@ export class GroupPreviewComponent implements OnInit { description: '', }; this.seoService.logSoft404(); - this.openGraphService.fail('ln-group-map-' + this.slug); - this.openGraphService.fail('ln-group-data-' + this.slug); + this.openGraphService.fail({ event: 'ln-group-map-' + this.slug, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'ln-group-data-' + this.slug, sessionId: this.ogSession }); return of(null); } @@ -99,7 +101,7 @@ export class GroupPreviewComponent implements OnInit { const sumLiquidity = nodes.reduce((partialSum, a) => partialSum + parseInt(a.capacity, 10), 0); const sumChannels = nodes.reduce((partialSum, a) => partialSum + a.opened_channel_count, 0); - this.openGraphService.waitOver('ln-group-data-' + this.slug); + this.openGraphService.waitOver({ event: 'ln-group-data-' + this.slug, sessionId: this.ogSession }); return { nodes: nodes, @@ -109,8 +111,8 @@ export class GroupPreviewComponent implements OnInit { }), catchError(() => { this.seoService.logSoft404(); - this.openGraphService.fail('ln-group-map-' + this.slug); - this.openGraphService.fail('ln-group-data-' + this.slug); + this.openGraphService.fail({ event: 'ln-group-map-' + this.slug, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'ln-group-data-' + this.slug, sessionId: this.ogSession }); return of({ nodes: [], sumLiquidity: 0, @@ -121,7 +123,7 @@ export class GroupPreviewComponent implements OnInit { } onMapReady(): void { - this.openGraphService.waitOver('ln-group-map-' + this.slug); + this.openGraphService.waitOver({ event: 'ln-group-map-' + this.slug, sessionId: this.ogSession }); } } diff --git a/frontend/src/app/lightning/node/node-preview.component.ts b/frontend/src/app/lightning/node/node-preview.component.ts index 259313de6..7a45ea905 100644 --- a/frontend/src/app/lightning/node/node-preview.component.ts +++ b/frontend/src/app/lightning/node/node-preview.component.ts @@ -27,6 +27,8 @@ export class NodePreviewComponent implements OnInit { publicKeySize = 99; + ogSession: number; + constructor( private lightningApiService: LightningApiService, private activatedRoute: ActivatedRoute, @@ -43,8 +45,8 @@ export class NodePreviewComponent implements OnInit { .pipe( switchMap((params: ParamMap) => { this.publicKey = params.get('public_key'); - this.openGraphService.waitFor('node-map-' + this.publicKey); - this.openGraphService.waitFor('node-data-' + this.publicKey); + this.ogSession = this.openGraphService.waitFor('node-map-' + this.publicKey); + this.ogSession = this.openGraphService.waitFor('node-data-' + this.publicKey); return this.lightningApiService.getNode$(params.get('public_key')); }), map((node) => { @@ -76,15 +78,15 @@ export class NodePreviewComponent implements OnInit { this.socketTypes = Object.keys(socketTypesMap); node.avgCapacity = node.capacity / Math.max(1, node.active_channel_count); - this.openGraphService.waitOver('node-data-' + this.publicKey); + this.openGraphService.waitOver({ event: 'node-data-' + this.publicKey, sessionId: this.ogSession }); return node; }), catchError(err => { this.error = err; this.seoService.logSoft404(); - this.openGraphService.fail('node-map-' + this.publicKey); - this.openGraphService.fail('node-data-' + this.publicKey); + this.openGraphService.fail({ event: 'node-map-' + this.publicKey, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'node-data-' + this.publicKey, sessionId: this.ogSession }); return [{ alias: this.publicKey, public_key: this.publicKey, @@ -102,6 +104,6 @@ export class NodePreviewComponent implements OnInit { } onMapReady() { - this.openGraphService.waitOver('node-map-' + this.publicKey); + this.openGraphService.waitOver({ event: 'node-map-' + this.publicKey, sessionId: this.ogSession }); } } 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 9fc071eb5..bab34ae8f 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 @@ -19,6 +19,8 @@ export class NodesPerISPPreview implements OnInit { id: string; error: Error; + ogSession: number; + constructor( private apiService: ApiService, private seoService: SeoService, @@ -32,8 +34,8 @@ export class NodesPerISPPreview implements OnInit { switchMap((params: ParamMap) => { this.id = params.get('isp'); this.isp = null; - this.openGraphService.waitFor('isp-map-' + this.id); - this.openGraphService.waitFor('isp-data-' + this.id); + this.ogSession = this.openGraphService.waitFor('isp-map-' + this.id); + this.ogSession = this.openGraphService.waitFor('isp-data-' + this.id); return this.apiService.getNodeForISP$(params.get('isp')); }), map(response => { @@ -75,7 +77,7 @@ export class NodesPerISPPreview implements OnInit { } topCountry.flag = getFlagEmoji(topCountry.iso); - this.openGraphService.waitOver('isp-data-' + this.id); + this.openGraphService.waitOver({ event: 'isp-data-' + this.id, sessionId: this.ogSession }); return { nodes: response.nodes, @@ -87,8 +89,8 @@ export class NodesPerISPPreview implements OnInit { catchError(err => { this.error = err; this.seoService.logSoft404(); - this.openGraphService.fail('isp-map-' + this.id); - this.openGraphService.fail('isp-data-' + this.id); + this.openGraphService.fail({ event: 'isp-map-' + this.id, sessionId: this.ogSession }); + this.openGraphService.fail({ event: 'isp-data-' + this.id, sessionId: this.ogSession }); return of({ nodes: [], sumLiquidity: 0, @@ -100,6 +102,6 @@ export class NodesPerISPPreview implements OnInit { } onMapReady() { - this.openGraphService.waitOver('isp-map-' + this.id); + this.openGraphService.waitOver({ event: 'isp-map-' + this.id, sessionId: this.ogSession }); } } diff --git a/frontend/src/app/services/opengraph.service.ts b/frontend/src/app/services/opengraph.service.ts index e969dd07a..47b9d87d4 100644 --- a/frontend/src/app/services/opengraph.service.ts +++ b/frontend/src/app/services/opengraph.service.ts @@ -12,8 +12,9 @@ import { LanguageService } from '@app/services/language.service'; export class OpenGraphService { network = ''; defaultImageUrl = ''; - previewLoadingEvents = {}; - previewLoadingCount = 0; + previewLoadingEvents = {}; // pending count per event type + previewLoadingCount = 0; // number of unique events pending + sessionId = 1; constructor( private ngZone: NgZone, @@ -45,7 +46,7 @@ export class OpenGraphService { // expose routing method to global scope, so we can access it from the unfurler window['ogService'] = { - loadPage: (path) => { return this.loadPage(path) } + loadPage: (path) => { return this.loadPage(path); } }; } @@ -77,7 +78,7 @@ export class OpenGraphService { } /// register an event that needs to resolve before we can take a screenshot - waitFor(event) { + waitFor(event: string): number { if (!this.previewLoadingEvents[event]) { this.previewLoadingEvents[event] = 1; this.previewLoadingCount++; @@ -85,24 +86,31 @@ export class OpenGraphService { this.previewLoadingEvents[event]++; } this.metaService.updateTag({ property: 'og:preview:loading', content: 'loading'}); + return this.sessionId; } // mark an event as resolved // if all registered events have resolved, signal we are ready for a screenshot - waitOver(event) { + waitOver({ event, sessionId }: { event: string, sessionId: number }) { + if (sessionId !== this.sessionId) { + return; + } if (this.previewLoadingEvents[event]) { this.previewLoadingEvents[event]--; if (this.previewLoadingEvents[event] === 0 && this.previewLoadingCount > 0) { - delete this.previewLoadingEvents[event] + delete this.previewLoadingEvents[event]; this.previewLoadingCount--; } - if (this.previewLoadingCount === 0) { - this.metaService.updateTag({ property: 'og:preview:ready', content: 'ready'}); - } + } + if (this.previewLoadingCount === 0) { + this.metaService.updateTag({ property: 'og:preview:ready', content: 'ready'}); } } - fail(event) { + fail({ event, sessionId }: { event: string, sessionId: number }) { + if (sessionId !== this.sessionId) { + return; + } if (this.previewLoadingEvents[event]) { this.metaService.updateTag({ property: 'og:preview:fail', content: 'fail'}); } @@ -111,6 +119,7 @@ export class OpenGraphService { resetLoading() { this.previewLoadingEvents = {}; this.previewLoadingCount = 0; + this.sessionId++; this.metaService.removeTag("property='og:preview:loading'"); this.metaService.removeTag("property='og:preview:ready'"); this.metaService.removeTag("property='og:preview:fail'"); @@ -122,7 +131,7 @@ export class OpenGraphService { this.resetLoading(); this.ngZone.run(() => { this.router.navigateByUrl(path); - }) + }); } } } From 831b923dda4244df789738471d64d05a1b377142 Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 10 Feb 2025 15:32:16 +0100 Subject: [PATCH 063/534] Update transaction preview messages --- .../components/transaction/transaction-raw.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 450e18ecd..7f8723353 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -8,10 +8,10 @@
    - +

    Error decoding transaction, reason: {{ error }}

    @@ -44,9 +44,9 @@ @if (!hasPrevouts) {
    @if (offlineMode) { - Prevouts are not loaded, some fields like fee rate cannot be displayed. + Missing prevouts are not loaded. Some fields like fee rate cannot be calculated. } @else { - Error loading prevouts. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} + Error loading missing prevouts. {{ errorPrevouts ? 'Reason: ' + errorPrevouts : '' }} }
    } From 4c20d2b180152c69abf15a790d77fd20142e570e Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 10 Feb 2025 15:33:21 +0100 Subject: [PATCH 064/534] Move broadcast button to alert banner --- .../transaction/transaction-raw.component.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 7f8723353..b761bc8a9 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -30,7 +30,6 @@
    -
    @@ -41,6 +40,16 @@
    +
    + + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + + +
    + @if (!hasPrevouts) {
    @if (offlineMode) { From 80201c082127226226e955d56a236c615f3bef72 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 10 Feb 2025 09:33:07 -1000 Subject: [PATCH 065/534] ops: Add new Bitcoin nodes in SG1 and HNL to bitcoin.conf --- production/bitcoin.conf | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/production/bitcoin.conf b/production/bitcoin.conf index 8fe17d921..adff1ef6b 100644 --- a/production/bitcoin.conf +++ b/production/bitcoin.conf @@ -12,6 +12,7 @@ rpcallowip=127.0.0.1 rpcuser=__BITCOIN_RPC_USER__ rpcpassword=__BITCOIN_RPC_PASS__ whitelist=127.0.0.1 +whitelist=209.146.50.0/23 whitelist=103.99.168.0/22 whitelist=2401:b140::/32 blocksxor=0 @@ -27,6 +28,10 @@ bind=0.0.0.0:8333 bind=[::]:8333 zmqpubrawblock=tcp://127.0.0.1:8334 zmqpubrawtx=tcp://127.0.0.1:8335 +#addnode=[2401:b140::92:201]:8333 +#addnode=[2401:b140::92:202]:8333 +#addnode=[2401:b140::92:203]:8333 +#addnode=[2401:b140::92:204]:8333 #addnode=[2401:b140:1::92:201]:8333 #addnode=[2401:b140:1::92:202]:8333 #addnode=[2401:b140:1::92:203]:8333 @@ -65,6 +70,10 @@ zmqpubrawtx=tcp://127.0.0.1:8335 #addnode=[2401:b140:4::92:210]:8333 #addnode=[2401:b140:4::92:211]:8333 #addnode=[2401:b140:4::92:212]:8333 +#addnode=[2401:b140:5::92:201]:8333 +#addnode=[2401:b140:5::92:202]:8333 +#addnode=[2401:b140:5::92:203]:8333 +#addnode=[2401:b140:5::92:204]:8333 [test] daemon=1 @@ -74,6 +83,10 @@ bind=0.0.0.0:18333 bind=[::]:18333 zmqpubrawblock=tcp://127.0.0.1:18334 zmqpubrawtx=tcp://127.0.0.1:18335 +#addnode=[2401:b140::92:201]:18333 +#addnode=[2401:b140::92:202]:18333 +#addnode=[2401:b140::92:203]:18333 +#addnode=[2401:b140::92:204]:18333 #addnode=[2401:b140:1::92:201]:18333 #addnode=[2401:b140:1::92:202]:18333 #addnode=[2401:b140:1::92:203]:18333 @@ -112,6 +125,10 @@ zmqpubrawtx=tcp://127.0.0.1:18335 #addnode=[2401:b140:4::92:210]:18333 #addnode=[2401:b140:4::92:211]:18333 #addnode=[2401:b140:4::92:212]:18333 +#addnode=[2401:b140:5::92:201]:18333 +#addnode=[2401:b140:5::92:202]:18333 +#addnode=[2401:b140:5::92:203]:18333 +#addnode=[2401:b140:5::92:204]:18333 [signet] daemon=1 @@ -121,6 +138,10 @@ bind=0.0.0.0:38333 bind=[::]:38333 zmqpubrawblock=tcp://127.0.0.1:38334 zmqpubrawtx=tcp://127.0.0.1:38335 +#addnode=[2401:b140::92:201]:38333 +#addnode=[2401:b140::92:202]:38333 +#addnode=[2401:b140::92:203]:38333 +#addnode=[2401:b140::92:204]:38333 #addnode=[2401:b140:1::92:201]:38333 #addnode=[2401:b140:1::92:202]:38333 #addnode=[2401:b140:1::92:203]:38333 @@ -161,6 +182,10 @@ zmqpubrawtx=tcp://127.0.0.1:38335 #addnode=[2401:b140:4::92:212]:38333 #addnode=[2401:b140:4::92:213]:38333 #addnode=[2401:b140:4::92:214]:38333 +#addnode=[2401:b140:5::92:201]:38333 +#addnode=[2401:b140:5::92:202]:38333 +#addnode=[2401:b140:5::92:203]:38333 +#addnode=[2401:b140:5::92:204]:38333 [testnet4] daemon=1 @@ -170,6 +195,10 @@ bind=0.0.0.0:48333 bind=[::]:48333 zmqpubrawblock=tcp://127.0.0.1:48334 zmqpubrawtx=tcp://127.0.0.1:48335 +#addnode=[2401:b140::92:201]:48333 +#addnode=[2401:b140::92:202]:48333 +#addnode=[2401:b140::92:203]:48333 +#addnode=[2401:b140::92:204]:48333 #addnode=[2401:b140:1::92:201]:48333 #addnode=[2401:b140:1::92:202]:48333 #addnode=[2401:b140:1::92:203]:48333 @@ -210,3 +239,7 @@ zmqpubrawtx=tcp://127.0.0.1:48335 #addnode=[2401:b140:4::92:212]:48333 #addnode=[2401:b140:4::92:213]:48333 #addnode=[2401:b140:4::92:214]:48333 +#addnode=[2401:b140:5::92:201]:48333 +#addnode=[2401:b140:5::92:202]:48333 +#addnode=[2401:b140:5::92:203]:48333 +#addnode=[2401:b140:5::92:204]:48333 From c47af1f8b22921c9379a145768b7c5c9fc3427ab Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:30:51 -0500 Subject: [PATCH 066/534] =?UTF-8?q?Add=20Mempool=C2=AE=20to=20trademark=20?= =?UTF-8?q?guidelines?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../trademark-policy/trademark-policy.component.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 e12cbb8b2..82580be1c 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: August 19, 2024
    +
    Updated: February 11, 2025

    @@ -59,6 +59,7 @@
    Mempool Accelerator
    Mempool Enterprise
    Mempool Liquidity
    Mempool
    mempool.space
    Be your own explorer
    Explore the full Bitcoin ecosystem
    Transaction hex
    diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 321b0ffe5..5ce170e12 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -22,6 +22,7 @@ import { CpfpInfo } from '../../interfaces/node-api.interface'; export class TransactionRawComponent implements OnInit, OnDestroy { pushTxForm: UntypedFormGroup; + rawHexTransaction: string; isLoading: boolean; isLoadingPrevouts: boolean; isLoadingCpfpInfo: boolean; @@ -81,10 +82,10 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.resetState(); this.isLoading = true; try { - const tx = decodeRawTransaction(this.pushTxForm.get('txRaw').value, this.stateService.network); + const { tx, hex } = decodeRawTransaction(this.pushTxForm.get('txRaw').value, this.stateService.network); await this.fetchPrevouts(tx); await this.fetchCpfpInfo(tx); - this.processTransaction(tx); + this.processTransaction(tx, hex); } catch (error) { this.error = error.message; } finally { @@ -93,57 +94,60 @@ export class TransactionRawComponent implements OnInit, OnDestroy { } async fetchPrevouts(transaction: Transaction): Promise { - if (this.offlineMode) { - return; - } + const prevoutsToFetch = transaction.vin.filter(input => !input.prevout).map((input) => ({ txid: input.txid, vout: input.vout })); - const prevoutsToFetch = transaction.vin.map((input) => ({ txid: input.txid, vout: input.vout })); + if (!prevoutsToFetch.length || transaction.vin[0].is_coinbase || this.offlineMode) { + this.hasPrevouts = !prevoutsToFetch.length || transaction.vin[0].is_coinbase; + this.fetchCpfp = this.hasPrevouts && !this.offlineMode; + } else { + try { + this.missingPrevouts = []; + this.isLoadingPrevouts = true; - if (!prevoutsToFetch.length || transaction.vin[0].is_coinbase) { - this.hasPrevouts = true; - return; - } + const prevouts: { prevout: Vout, unconfirmed: boolean }[] = await firstValueFrom(this.apiService.getPrevouts$(prevoutsToFetch)); - try { - this.missingPrevouts = []; - this.isLoadingPrevouts = true; - - const prevouts: { prevout: Vout, unconfirmed: boolean }[] = await firstValueFrom(this.apiService.getPrevouts$(prevoutsToFetch)); - - if (prevouts?.length !== prevoutsToFetch.length) { - throw new Error(); - } - - transaction.vin = transaction.vin.map((input, index) => { - if (prevouts[index]) { - input.prevout = prevouts[index].prevout; - addInnerScriptsToVin(input); - } else { - this.missingPrevouts.push(`${input.txid}:${input.vout}`); + if (prevouts?.length !== prevoutsToFetch.length) { + throw new Error(); } - return input; - }); - if (this.missingPrevouts.length) { - throw new Error(`Some prevouts do not exist or are already spent (${this.missingPrevouts.length})`); + let fetchIndex = 0; + transaction.vin.forEach(input => { + if (!input.prevout) { + const fetched = prevouts[fetchIndex]; + if (fetched) { + input.prevout = fetched.prevout; + } else { + this.missingPrevouts.push(`${input.txid}:${input.vout}`); + } + fetchIndex++; + } + }); + + if (this.missingPrevouts.length) { + throw new Error(`Some prevouts do not exist or are already spent (${this.missingPrevouts.length})`); + } + + this.hasPrevouts = true; + this.isLoadingPrevouts = false; + this.fetchCpfp = prevouts.some(prevout => prevout?.unconfirmed); + } catch (error) { + console.log(error); + this.errorPrevouts = error?.error?.error || error?.message; + this.isLoadingPrevouts = false; } + } + if (this.hasPrevouts) { transaction.fee = transaction.vin.some(input => input.is_coinbase) ? 0 : transaction.vin.reduce((fee, input) => { return fee + (input.prevout?.value || 0); }, 0) - transaction.vout.reduce((sum, output) => sum + output.value, 0); transaction.feePerVsize = transaction.fee / (transaction.weight / 4); - transaction.sigops = countSigops(transaction); - - this.hasPrevouts = true; - this.isLoadingPrevouts = false; - this.fetchCpfp = prevouts.some(prevout => prevout?.unconfirmed); - } catch (error) { - console.log(error); - this.errorPrevouts = error?.error?.error || error?.message; - this.isLoadingPrevouts = false; } + + transaction.vin.forEach(addInnerScriptsToVin); + transaction.sigops = countSigops(transaction); } async fetchCpfpInfo(transaction: Transaction): Promise { @@ -175,10 +179,11 @@ export class TransactionRawComponent implements OnInit, OnDestroy { } } - processTransaction(tx: Transaction): void { + processTransaction(tx: Transaction, hex: string): void { this.transaction = tx; + this.rawHexTransaction = hex; - this.transaction.flags = getTransactionFlags(this.transaction, null, null, null, this.stateService.network); + this.transaction.flags = getTransactionFlags(this.transaction, this.cpfpInfo, null, null, this.stateService.network); this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; if (this.transaction.sigops >= 0) { this.adjustedVsize = Math.max(this.transaction.weight / 4, this.transaction.sigops * 5); @@ -206,7 +211,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.isLoadingBroadcast = true; this.errorBroadcast = null; return new Promise((resolve, reject) => { - this.apiService.postTransaction$(this.pushTxForm.get('txRaw').value) + this.apiService.postTransaction$(this.rawHexTransaction) .subscribe((result) => { this.isLoadingBroadcast = false; this.successBroadcast = true; @@ -228,6 +233,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { resetState() { this.transaction = null; + this.rawHexTransaction = null; this.error = null; this.errorPrevouts = null; this.errorBroadcast = null; @@ -251,7 +257,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { resetForm() { this.resetState(); - this.pushTxForm.reset(); + this.pushTxForm.get('txRaw').setValue(''); } @HostListener('window:resize', ['$event']) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index b33d88c2f..eafe8ae99 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -692,7 +692,7 @@ export function addInnerScriptsToVin(vin: Vin): void { if (vin.prevout.scriptpubkey_type === 'p2sh') { const redeemScript = vin.scriptsig_asm.split(' ').reverse()[0]; vin.inner_redeemscript_asm = convertScriptSigAsm(redeemScript); - if (vin.witness && vin.witness.length > 2) { + if (vin.witness && vin.witness.length) { const witnessScript = vin.witness[vin.witness.length - 1]; vin.inner_witnessscript_asm = convertScriptSigAsm(witnessScript); } @@ -712,86 +712,15 @@ export function addInnerScriptsToVin(vin: Vin): void { } // Adapted from bitcoinjs-lib at https://github.com/bitcoinjs/bitcoinjs-lib/blob/32e08aa57f6a023e995d8c4f0c9fbdc5f11d1fa0/ts_src/transaction.ts#L78 -// Reads buffer of raw transaction data -function fromBuffer(buffer: Uint8Array, network: string): Transaction { +/** + * @param buffer The raw transaction data + * @param network + * @param inputs Additional information from a PSBT, if available + * @returns The decoded transaction object and the raw hex + */ +function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Array; value: Uint8Array }[][]): { tx: Transaction, hex: string } { let offset = 0; - function readInt8(): number { - if (offset + 1 > buffer.length) { - throw new Error('Buffer out of bounds'); - } - return buffer[offset++]; - } - - function readInt16() { - if (offset + 2 > buffer.length) { - throw new Error('Buffer out of bounds'); - } - const value = buffer[offset] | (buffer[offset + 1] << 8); - offset += 2; - return value; - } - - function readInt32(unsigned = false): number { - if (offset + 4 > buffer.length) { - throw new Error('Buffer out of bounds'); - } - const value = buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24); - offset += 4; - if (unsigned) { - return value >>> 0; - } - return value; - } - - function readInt64(): bigint { - if (offset + 8 > buffer.length) { - throw new Error('Buffer out of bounds'); - } - const low = BigInt(buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)); - const high = BigInt(buffer[offset + 4] | (buffer[offset + 5] << 8) | (buffer[offset + 6] << 16) | (buffer[offset + 7] << 24)); - offset += 8; - return (high << 32n) | (low & 0xffffffffn); - } - - function readVarInt(): bigint { - const first = readInt8(); - if (first < 0xfd) { - return BigInt(first); - } else if (first === 0xfd) { - return BigInt(readInt16()); - } else if (first === 0xfe) { - return BigInt(readInt32(true)); - } else if (first === 0xff) { - return readInt64(); - } else { - throw new Error("Invalid VarInt prefix"); - } - } - - function readSlice(n: number | bigint): Uint8Array { - const length = Number(n); - if (offset + length > buffer.length) { - throw new Error('Cannot read slice out of bounds'); - } - const slice = buffer.slice(offset, offset + length); - offset += length; - return slice; - } - - function readVarSlice(): Uint8Array { - return readSlice(readVarInt()); - } - - function readVector(): Uint8Array[] { - const count = readVarInt(); - const vector = []; - for (let i = 0; i < count; i++) { - vector.push(readVarSlice()); - } - return vector; - } - // Parse raw transaction const tx = { status: { @@ -802,39 +731,47 @@ function fromBuffer(buffer: Uint8Array, network: string): Transaction { } } as Transaction; - tx.version = readInt32(); + [tx.version, offset] = readInt32(buffer, offset); - const marker = readInt8(); - const flag = readInt8(); + let marker, flag; + [marker, offset] = readInt8(buffer, offset); + [flag, offset] = readInt8(buffer, offset); - let hasWitnesses = false; - if ( - marker === 0x00 && - flag === 0x01 - ) { - hasWitnesses = true; + let isLegacyTransaction = true; + if (marker === 0x00 && flag === 0x01) { + isLegacyTransaction = false; } else { offset -= 2; } - const vinLen = readVarInt(); + let vinLen; + [vinLen, offset] = readVarInt(buffer, offset); + if (vinLen === 0) { + throw new Error('Transaction has no inputs'); + } tx.vin = []; for (let i = 0; i < vinLen; ++i) { - const txid = uint8ArrayToHexString(readSlice(32).reverse()); - const vout = readInt32(true); - const scriptsig = uint8ArrayToHexString(readVarSlice()); - const sequence = readInt32(true); + let txid, vout, scriptsig, sequence; + [txid, offset] = readSlice(buffer, offset, 32); + txid = uint8ArrayToHexString(txid.reverse()); + [vout, offset] = readInt32(buffer, offset, true); + [scriptsig, offset] = readVarSlice(buffer, offset); + scriptsig = uint8ArrayToHexString(scriptsig); + [sequence, offset] = readInt32(buffer, offset, true); const is_coinbase = txid === '0'.repeat(64); const scriptsig_asm = convertScriptSigAsm(scriptsig); tx.vin.push({ txid, vout, scriptsig, sequence, is_coinbase, scriptsig_asm, prevout: null }); } - const voutLen = readVarInt(); + let voutLen; + [voutLen, offset] = readVarInt(buffer, offset); tx.vout = []; for (let i = 0; i < voutLen; ++i) { - const value = Number(readInt64()); - const scriptpubkeyArray = readVarSlice(); - const scriptpubkey = uint8ArrayToHexString(scriptpubkeyArray) + let value, scriptpubkeyArray, scriptpubkey; + [value, offset] = readInt64(buffer, offset); + value = Number(value); + [scriptpubkeyArray, offset] = readVarSlice(buffer, offset); + scriptpubkey = uint8ArrayToHexString(scriptpubkeyArray); const scriptpubkey_asm = convertScriptSigAsm(scriptpubkey); const toAddress = scriptPubKeyToAddress(scriptpubkey, network); const scriptpubkey_type = toAddress.type; @@ -842,48 +779,303 @@ function fromBuffer(buffer: Uint8Array, network: string): Transaction { tx.vout.push({ value, scriptpubkey, scriptpubkey_asm, scriptpubkey_type, scriptpubkey_address }); } - let witnessSize = 0; - if (hasWitnesses) { - const startOffset = offset; + if (!isLegacyTransaction) { for (let i = 0; i < vinLen; ++i) { - tx.vin[i].witness = readVector().map(uint8ArrayToHexString); + let witness; + [witness, offset] = readVector(buffer, offset); + tx.vin[i].witness = witness.map(uint8ArrayToHexString); } - witnessSize = offset - startOffset + 2; } - tx.locktime = readInt32(true); + [tx.locktime, offset] = readInt32(buffer, offset, true); if (offset !== buffer.length) { throw new Error('Transaction has unexpected data'); } - tx.size = buffer.length; - tx.weight = (tx.size - witnessSize) * 3 + tx.size; + // Optionally add data from PSBT: prevouts, redeem/witness scripts and signatures + if (inputs) { + for (let i = 0; i < tx.vin.length; i++) { + const vin = tx.vin[i]; + const inputRecords = inputs[i]; - tx.txid = txid(tx); + const groups = { + nonWitnessUtxo: null, + witnessUtxo: null, + finalScriptSig: null, + finalScriptWitness: null, + redeemScript: null, + witnessScript: null, + partialSigs: [] + }; - return tx; -} + for (const record of inputRecords) { + switch (record.key[0]) { + case 0x00: + groups.nonWitnessUtxo = record; + break; + case 0x01: + groups.witnessUtxo = record; + break; + case 0x07: + groups.finalScriptSig = record; + break; + case 0x08: + groups.finalScriptWitness = record; + break; + case 0x04: + groups.redeemScript = record; + break; + case 0x05: + groups.witnessScript = record; + break; + case 0x02: + groups.partialSigs.push(record); + break; + } + } -export function decodeRawTransaction(rawtx: string, network: string): Transaction { - if (!rawtx.length || rawtx.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(rawtx)) { - throw new Error('Invalid hex string'); + // Fill prevout + if (groups.witnessUtxo && !vin.prevout) { + let value, scriptpubkeyArray, scriptpubkey, outputOffset = 0; + [value, outputOffset] = readInt64(groups.witnessUtxo.value, outputOffset); + value = Number(value); + [scriptpubkeyArray, outputOffset] = readVarSlice(groups.witnessUtxo.value, outputOffset); + scriptpubkey = uint8ArrayToHexString(scriptpubkeyArray); + const scriptpubkey_asm = convertScriptSigAsm(scriptpubkey); + const toAddress = scriptPubKeyToAddress(scriptpubkey, network); + const scriptpubkey_type = toAddress.type; + const scriptpubkey_address = toAddress?.address; + vin.prevout = { value, scriptpubkey, scriptpubkey_asm, scriptpubkey_type, scriptpubkey_address }; + } + if (groups.nonWitnessUtxo && !vin.prevout) { + const utxoTx = fromBuffer(groups.nonWitnessUtxo.value, network).tx; + vin.prevout = utxoTx.vout[vin.vout]; + } + + // Fill final scriptSig or witness + let finalizedScriptSig = false; + if (groups.finalScriptSig) { + vin.scriptsig = uint8ArrayToHexString(groups.finalScriptSig.value); + vin.scriptsig_asm = convertScriptSigAsm(vin.scriptsig); + finalizedScriptSig = true; + } + let finalizedWitness = false; + if (groups.finalScriptWitness) { + let witness = []; + let witnessOffset = 0; + [witness, witnessOffset] = readVector(groups.finalScriptWitness.value, witnessOffset); + vin.witness = witness.map(uint8ArrayToHexString); + finalizedWitness = true; + } + if (finalizedScriptSig && finalizedWitness) { + continue; + } + + // Fill redeem script and/or witness script + if (groups.redeemScript && !finalizedScriptSig) { + const redeemScript = groups.redeemScript.value; + if (redeemScript.length > 520) { + throw new Error("Redeem script must be <= 520 bytes"); + } + let pushOpcode; + if (redeemScript.length < 0x4c) { + pushOpcode = new Uint8Array([redeemScript.length]); + } else if (redeemScript.length <= 0xff) { + pushOpcode = new Uint8Array([0x4c, redeemScript.length]); // OP_PUSHDATA1 + } else { + pushOpcode = new Uint8Array([0x4d, redeemScript.length & 0xff, redeemScript.length >> 8]); // OP_PUSHDATA2 + } + vin.scriptsig = (vin.scriptsig || '') + uint8ArrayToHexString(pushOpcode) + uint8ArrayToHexString(redeemScript); + vin.scriptsig_asm = convertScriptSigAsm(vin.scriptsig); + } + if (groups.witnessScript && !finalizedWitness) { + vin.witness = (vin.witness || []).concat(uint8ArrayToHexString(groups.witnessScript.value)); + } + + + // Fill partial signatures + for (const record of groups.partialSigs) { + const scriptpubkey_type = vin.prevout?.scriptpubkey_type; + if (scriptpubkey_type === 'v0_p2wsh' && !finalizedWitness) { + vin.witness = vin.witness || []; + vin.witness.unshift(uint8ArrayToHexString(record.value)); + } + if (scriptpubkey_type === 'p2sh') { + const redeemScriptStr = vin.scriptsig_asm ? vin.scriptsig_asm.split(' ').reverse()[0] : ''; + if (redeemScriptStr.startsWith('00') && redeemScriptStr.length === 68 && vin.witness?.length) { + if (!finalizedWitness) { + vin.witness.unshift(uint8ArrayToHexString(record.value)); + } + } else { + if (!finalizedScriptSig) { + const signature = record.value; + if (signature.length > 73) { + throw new Error("Signature must be <= 73 bytes"); + } + const pushOpcode = new Uint8Array([signature.length]); + vin.scriptsig = uint8ArrayToHexString(pushOpcode) + uint8ArrayToHexString(signature) + (vin.scriptsig || ''); + vin.scriptsig_asm = convertScriptSigAsm(vin.scriptsig); + } + } + } + } + } } - const buffer = new Uint8Array(rawtx.length / 2); - for (let i = 0; i < rawtx.length; i += 2) { - buffer[i / 2] = parseInt(rawtx.substring(i, i + 2), 16); + // Calculate final size, weight, and txid + const hasWitness = tx.vin.some(vin => vin.witness?.length); + let witnessSize = 0; + if (hasWitness) { + for (let i = 0; i < tx.vin.length; ++i) { + const witnessItems = tx.vin[i].witness || []; + witnessSize += getVarIntLength(witnessItems.length); + for (const item of witnessItems) { + const witnessItem = hexStringToUint8Array(item); + witnessSize += getVarIntLength(witnessItem.length); + witnessSize += witnessItem.length; + } + } + witnessSize += 2; + } + + const rawHex = serializeTransaction(tx, hasWitness); + tx.size = rawHex.length; + tx.weight = (tx.size - witnessSize) * 3 + tx.size; + tx.txid = txid(tx); + + return { tx, hex: uint8ArrayToHexString(rawHex) }; +} + +/** + * Decodes a PSBT buffer into the unsigned raw transaction and input map + * @param psbtBuffer + * @returns + * - the unsigned transaction from a PSBT (txHex) + * - the full input map for each input in to fill signatures and prevouts later (inputs) + */ +function decodePsbt(psbtBuffer: Uint8Array): { rawTx: Uint8Array; inputs: { key: Uint8Array; value: Uint8Array }[][] } { + let offset = 0; + + // magic: "psbt" in ASCII + const expectedMagic = [0x70, 0x73, 0x62, 0x74]; + for (let i = 0; i < expectedMagic.length; i++) { + if (psbtBuffer[offset + i] !== expectedMagic[i]) { + throw new Error("Invalid PSBT magic bytes"); + } + } + offset += expectedMagic.length; + + const separator = psbtBuffer[offset]; + offset += 1; + if (separator !== 0xff) { + throw new Error("Invalid PSBT separator"); + } + + // GLOBAL MAP + let rawTx: Uint8Array | null = null; + while (offset < psbtBuffer.length) { + const [keyLen, newOffset] = readVarInt(psbtBuffer, offset); + offset = newOffset; + // key length of 0 means the end of the global map + if (keyLen === 0) { + break; + } + const key = psbtBuffer.slice(offset, offset + keyLen); + offset += keyLen; + const [valLen, newOffset2] = readVarInt(psbtBuffer, offset); + offset = newOffset2; + const value = psbtBuffer.slice(offset, offset + valLen); + offset += valLen; + + // Global key type 0x00 holds the unsigned transaction. + if (key[0] === 0x00) { + rawTx = value; + } + } + + if (!rawTx) { + throw new Error("Unsigned transaction not found in PSBT"); + } + + let numInputs: number; + let txOffset = 0; + // Skip version (4 bytes) + txOffset += 4; + if (rawTx[txOffset] === 0x00 && rawTx[txOffset + 1] === 0x01) { + txOffset += 2; + } + const [inputCount, newTxOffset] = readVarInt(rawTx, txOffset); + txOffset = newTxOffset; + numInputs = inputCount; + + // INPUT MAPS + const inputs: { key: Uint8Array; value: Uint8Array }[][] = []; + for (let i = 0; i < numInputs; i++) { + const inputRecords: { key: Uint8Array; value: Uint8Array }[] = []; + const seenKeys = new Set(); + while (offset < psbtBuffer.length) { + const [keyLen, newOffset] = readVarInt(psbtBuffer, offset); + offset = newOffset; + // key length of 0 means the end of the input map + if (keyLen === 0) { + break; + } + const key = psbtBuffer.slice(offset, offset + keyLen); + offset += keyLen; + + const keyHex = uint8ArrayToHexString(key); + if (seenKeys.has(keyHex)) { + throw new Error(`Duplicate key in input map`); + } + seenKeys.add(keyHex); + + const [valLen, newOffset2] = readVarInt(psbtBuffer, offset); + offset = newOffset2; + const value = psbtBuffer.slice(offset, offset + valLen); + offset += valLen; + + inputRecords.push({ key, value }); + } + inputs.push(inputRecords); + } + + return { rawTx, inputs }; +} + +export function decodeRawTransaction(input: string, network: string): { tx: Transaction, hex: string } { + if (!input.length) { + throw new Error('Empty input'); + } + + let buffer: Uint8Array; + if (input.length % 2 === 0 && /^[0-9a-fA-F]+$/.test(input)) { + buffer = hexStringToUint8Array(input); + } else if (/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}(?:==)|[A-Za-z0-9+/]{3}=)?$/.test(input)) { + buffer = base64ToUint8Array(input); + } else { + throw new Error('Invalid input: not a valid transaction or PSBT'); + } + + if (buffer[0] === 0x70 && buffer[1] === 0x73 && buffer[2] === 0x62 && buffer[3] === 0x74) { // PSBT magic bytes + const { rawTx, inputs } = decodePsbt(buffer); + return fromBuffer(rawTx, network, inputs); } return fromBuffer(buffer, network); } -function serializeTransaction(tx: Transaction): Uint8Array { +function serializeTransaction(tx: Transaction, includeWitness: boolean = true): Uint8Array { const result: number[] = []; // Add version result.push(...intToBytes(tx.version, 4)); + if (includeWitness) { + // Add SegWit marker and flag bytes (0x00, 0x01) + result.push(0x00, 0x01); + } + // Add input count and inputs result.push(...varIntToBytes(tx.vin.length)); for (const input of tx.vin) { @@ -904,6 +1096,18 @@ function serializeTransaction(tx: Transaction): Uint8Array { result.push(...scriptPubKey); } + if (includeWitness) { + for (const input of tx.vin) { + const witnessItems = input.witness || []; + result.push(...varIntToBytes(witnessItems.length)); + for (const item of witnessItems) { + const witnessBytes = hexStringToUint8Array(item); + result.push(...varIntToBytes(witnessBytes.length)); + result.push(...witnessBytes); + } + } + } + // Add locktime result.push(...intToBytes(tx.locktime, 4)); @@ -911,7 +1115,7 @@ function serializeTransaction(tx: Transaction): Uint8Array { } function txid(tx: Transaction): string { - const serializedTx = serializeTransaction(tx); + const serializedTx = serializeTransaction(tx, false); const hash1 = new Hash().update(serializedTx).digest(); const hash2 = new Hash().update(hash1).digest(); return uint8ArrayToHexString(hash2.reverse()); @@ -1188,6 +1392,11 @@ function hexStringToUint8Array(hex: string): Uint8Array { return buf; } +function base64ToUint8Array(base64: string): Uint8Array { + const binaryString = atob(base64); + return new Uint8Array([...binaryString].map(char => char.charCodeAt(0))); +} + function intToBytes(value: number, byteLength: number): number[] { const bytes = []; for (let i = 0; i < byteLength; i++) { @@ -1230,6 +1439,88 @@ function varIntToBytes(value: number | bigint): number[] { return bytes; } +function readInt8(buffer: Uint8Array, offset: number): [number, number] { + if (offset + 1 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + return [buffer[offset], offset + 1]; +} + +function readInt16(buffer: Uint8Array, offset: number): [number, number] { + if (offset + 2 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + return [buffer[offset] | (buffer[offset + 1] << 8), offset + 2]; +} + +function readInt32(buffer: Uint8Array, offset: number, unsigned: boolean = false): [number, number] { + if (offset + 4 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + const value = buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24); + return [unsigned ? value >>> 0 : value, offset + 4]; +} + +function readInt64(buffer: Uint8Array, offset: number): [bigint, number] { + if (offset + 8 > buffer.length) { + throw new Error('Buffer out of bounds'); + } + const low = BigInt(buffer[offset] | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)); + const high = BigInt(buffer[offset + 4] | (buffer[offset + 5] << 8) | (buffer[offset + 6] << 16) | (buffer[offset + 7] << 24)); + return [(high << 32n) | (low & 0xffffffffn), offset + 8]; +} + +function readVarInt(buffer: Uint8Array, offset: number): [number, number] { + const [first, newOffset] = readInt8(buffer, offset); + + if (first < 0xfd) { + return [first, newOffset]; + } else if (first === 0xfd) { + return readInt16(buffer, newOffset); + } else if (first === 0xfe) { + return readInt32(buffer, newOffset, true); + } else if (first === 0xff) { + const [bigValue, nextOffset] = readInt64(buffer, newOffset); + + if (bigValue > Number.MAX_SAFE_INTEGER) { + throw new Error("VarInt exceeds safe integer range"); + } + + const numValue = Number(bigValue); + return [numValue, nextOffset]; + } else { + throw new Error("Invalid VarInt prefix"); + } +} + +function readSlice(buffer: Uint8Array, offset: number, n: number | bigint): [Uint8Array, number] { + const length = Number(n); + if (offset + length > buffer.length) { + throw new Error('Cannot read slice out of bounds'); + } + const slice = buffer.slice(offset, offset + length); + return [slice, offset + length]; +} + +function readVarSlice(buffer: Uint8Array, offset: number): [Uint8Array, number] { + const [length, newOffset] = readVarInt(buffer, offset); + return readSlice(buffer, newOffset, length); +} + +function readVector(buffer: Uint8Array, offset: number): [Uint8Array[], number] { + const [count, newOffset] = readVarInt(buffer, offset); + let updatedOffset = newOffset; + const vector: Uint8Array[] = []; + + for (let i = 0; i < count; i++) { + const [slice, nextOffset] = readVarSlice(buffer, updatedOffset); + vector.push(slice); + updatedOffset = nextOffset; + } + + return [vector, updatedOffset]; +} + // Inversed the opcodes object from https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/utils/bitcoin-script.ts#L1 const opcodes = { 0: 'OP_0', From 494be165ad70b3e2f8d3b82afde710e86424c202 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 4 Mar 2025 09:25:39 -1000 Subject: [PATCH 079/534] Update latest tag on dockerhub --- .github/workflows/on-tag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 8a846631c..ba9e1eb7b 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -105,7 +105,7 @@ jobs: --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ - # --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ + --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ --output "type=registry,push=true" \ From c4e22a6225c04547666e3a0d962b3f9d6cab5db9 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 5 Mar 2025 04:18:31 +0000 Subject: [PATCH 080/534] disabled ON UPDATE for blocks_audits time field --- backend/src/api/database-migration.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 4f43bd9d2..299cd309b 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 = 95; + private static currentVersion = 96; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -1130,6 +1130,11 @@ class DatabaseMigration { await this.$executeQuery('ALTER TABLE blocks ADD INDEX `definition_hash` (`definition_hash`)'); await this.updateToSchemaVersion(95); } + + if (databaseSchemaVersion < 96) { + await this.$executeQuery(`ALTER TABLE blocks_audits MODIFY time timestamp NOT NULL DEFAULT 0`); + await this.updateToSchemaVersion(96); + } } /** From ad140dc60a32a9ced5d2772d355731f60f2553c6 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 5 Mar 2025 15:29:54 +0100 Subject: [PATCH 081/534] Tapscript multisig parsing --- frontend/src/app/shared/script.utils.ts | 61 +++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index 731e0051b..62a7a5845 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -251,6 +251,11 @@ export function detectScriptTemplate(type: ScriptType, script_asm: string, witne return ScriptTemplates.multisig(multisig.m, multisig.n); } + const tapscriptMultisig = parseTapscriptMultisig(script_asm); + if (tapscriptMultisig) { + return ScriptTemplates.multisig(tapscriptMultisig.m, tapscriptMultisig.n); + } + return; } @@ -299,6 +304,62 @@ export function parseMultisigScript(script: string): undefined | { m: number, n: return { m, n }; } +export function parseTapscriptMultisig(script: string): undefined | { m: number, n: number } { + if (!script) { + return; + } + + const ops = script.split(' '); + // At minimum, one pubkey group (3 tokens) + m push + final opcode = 5 tokens + if (ops.length < 5) return; + + const finalOp = ops.pop(); + if (finalOp !== 'OP_NUMEQUAL' && finalOp !== 'OP_GREATERTHANOREQUAL') { + return; + } + + let m: number; + if (['OP_PUSHBYTES_1', 'OP_PUSHBYTES_2'].includes(ops[ops.length - 2])) { + const data = ops.pop(); + ops.pop(); + m = parseInt(data.match(/../g).reverse().join(''), 16); + } else if (ops[ops.length - 1].startsWith('OP_PUSHNUM_') || ops[ops.length - 1] === 'OP_0') { + m = parseInt(ops.pop().match(/[0-9]+/)?.[0], 10); + } else { + return; + } + + if (ops.length % 3 !== 0) { + return; + } + const n = ops.length / 3; + if (n < 1) { + return; + } + + for (let i = 0; i < n; i++) { + const push = ops.shift(); + const pubkey = ops.shift(); + const sigOp = ops.shift(); + + if (push !== 'OP_PUSHBYTES_32') { + return; + } + if (!/^[0-9a-fA-F]{64}$/.test(pubkey)) { + return; + } + if (sigOp !== (i === 0 ? 'OP_CHECKSIG' : 'OP_CHECKSIGADD')) { + return; + } + } + + if (ops.length) { + return; + } + + return { m, n }; +} + export function getVarIntLength(n: number): number { if (n < 0xfd) { return 1; From 55c09efb580f87849bc2c8c6d4a81b3345b0b17d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 6 Mar 2025 02:42:17 +0000 Subject: [PATCH 082/534] be your own explorer --- frontend/src/app/components/about/about.component.html | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 433fe1abb..3bd8960f5 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -12,6 +12,7 @@
    The Mempool Open Source Project ®

    Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties.

    +
    Be your own explorer™
    From 0b1895664b43af0c2d0b78a8e4e2a868d5bfea8a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 6 Mar 2025 03:52:20 +0000 Subject: [PATCH 084/534] change staging proxy from fmt to va1 --- frontend/proxy.conf.staging.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/proxy.conf.staging.js b/frontend/proxy.conf.staging.js index 260b222c0..0165bed96 100644 --- a/frontend/proxy.conf.staging.js +++ b/frontend/proxy.conf.staging.js @@ -3,10 +3,10 @@ const fs = require('fs'); let PROXY_CONFIG = require('./proxy.conf'); PROXY_CONFIG.forEach(entry => { - const hostname = process.env.CYPRESS_REROUTE_TESTNET === 'true' ? 'mempool-staging.fra.mempool.space' : 'node201.fmt.mempool.space'; + const hostname = process.env.CYPRESS_REROUTE_TESTNET === 'true' ? 'mempool-staging.fra.mempool.space' : 'node201.va1.mempool.space'; console.log(`e2e tests running against ${hostname}`); entry.target = entry.target.replace("mempool.space", hostname); - entry.target = entry.target.replace("liquid.network", "liquid-staging.fmt.mempool.space"); + entry.target = entry.target.replace("liquid.network", "liquid-staging.va1.mempool.space"); }); module.exports = PROXY_CONFIG; From 3b9d9864cf9bf4f72f9b89b57aa4c5b28fe531f2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 02:22:43 +0000 Subject: [PATCH 085/534] Bump mysql2 from 3.12.0 to 3.13.0 in /backend Bumps [mysql2](https://github.com/sidorares/node-mysql2) from 3.12.0 to 3.13.0. - [Release notes](https://github.com/sidorares/node-mysql2/releases) - [Changelog](https://github.com/sidorares/node-mysql2/blob/master/Changelog.md) - [Commits](https://github.com/sidorares/node-mysql2/compare/v3.12.0...v3.13.0) --- updated-dependencies: - dependency-name: mysql2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 14 +++++++------- backend/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 1aaa77f85..a4963d6f0 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -17,7 +17,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.12.0", + "mysql2": "~3.13.0", "redis": "^4.7.0", "rust-gbt": "file:./rust-gbt", "socks-proxy-agent": "~7.0.0", @@ -6173,9 +6173,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mysql2": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.12.0.tgz", - "integrity": "sha512-C8fWhVysZoH63tJbX8d10IAoYCyXy4fdRFz2Ihrt9jtPILYynFEKUUzpp1U7qxzDc3tMbotvaBH+sl6bFnGZiw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz", + "integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==", "license": "MIT", "dependencies": { "aws-ssl-profiles": "^1.1.1", @@ -12337,9 +12337,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql2": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.12.0.tgz", - "integrity": "sha512-C8fWhVysZoH63tJbX8d10IAoYCyXy4fdRFz2Ihrt9jtPILYynFEKUUzpp1U7qxzDc3tMbotvaBH+sl6bFnGZiw==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz", + "integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==", "requires": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", diff --git a/backend/package.json b/backend/package.json index efc5a4501..bcbc0f256 100644 --- a/backend/package.json +++ b/backend/package.json @@ -46,7 +46,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.12.0", + "mysql2": "~3.13.0", "rust-gbt": "file:./rust-gbt", "redis": "^4.7.0", "socks-proxy-agent": "~7.0.0", From 9d711c336a51a05b55b7a7b56ec78d2ad2af2b6d Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 9 Mar 2025 11:42:53 +0100 Subject: [PATCH 086/534] retreive -> retrieve --- backend/src/api/blocks.ts | 8 ++++---- backend/src/repositories/HashratesRepository.ts | 2 +- .../accelerate-checkout/accelerate-checkout.component.ts | 6 +++--- frontend/src/app/docs/api-docs/api-docs-data.ts | 2 +- frontend/src/app/services/services-api.service.ts | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 102601594..beefc825b 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1469,11 +1469,11 @@ class Blocks { if (rows && Array.isArray(rows)) { return rows.map(r => r.definition_hash); } else { - logger.debug(`Unable to retreive list of blocks.definition_hash from db (no result)`); + logger.debug(`Unable to retrieve list of blocks.definition_hash from db (no result)`); return null; } } catch (e) { - logger.debug(`Unable to retreive list of blocks.definition_hash from db (exception: ${e})`); + logger.debug(`Unable to retrieve list of blocks.definition_hash from db (exception: ${e})`); return null; } } @@ -1484,11 +1484,11 @@ class Blocks { if (rows && Array.isArray(rows)) { return rows.map(r => r.hash); } else { - logger.debug(`Unable to retreive list of blocks for definition hash ${definitionHash} from db (no result)`); + logger.debug(`Unable to retrieve list of blocks for definition hash ${definitionHash} from db (no result)`); return null; } } catch (e) { - logger.debug(`Unable to retreive list of blocks for definition hash ${definitionHash} from db (exception: ${e})`); + logger.debug(`Unable to retrieve list of blocks for definition hash ${definitionHash} from db (exception: ${e})`); return null; } } diff --git a/backend/src/repositories/HashratesRepository.ts b/backend/src/repositories/HashratesRepository.ts index ec44afebe..93aa2d53f 100644 --- a/backend/src/repositories/HashratesRepository.ts +++ b/backend/src/repositories/HashratesRepository.ts @@ -93,7 +93,7 @@ class HashratesRepository { const [rows]: any[] = await DB.query(query); return rows.map(row => row.timestamp); } catch (e) { - logger.err('Cannot retreive indexed weekly hashrate timestamps. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); + logger.err('Cannot retrieve indexed weekly hashrate timestamps. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); throw e; } } 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 ac6c7f147..bf70aebd3 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -525,7 +525,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { 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`); + console.error(`Cannot retrieve payment card details`); this.accelerateError = 'apple_pay_no_card_details'; this.processing = false; return; @@ -643,7 +643,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { 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`); + console.error(`Cannot retrieve payment card details`); this.accelerateError = 'apple_pay_no_card_details'; this.processing = false; return; @@ -936,7 +936,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.loadingBtcpayInvoice = true; this.servicesApiService.generateBTCPayAcceleratorInvoice$(this.tx.txid, this.userBid).pipe( switchMap(response => { - return this.servicesApiService.retreiveInvoice$(response.btcpayInvoiceId); + return this.servicesApiService.retrieveInvoice$(response.btcpayInvoiceId); }), catchError(error => { console.log(error); 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 c32baa3f7..5e9608bdf 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -11803,7 +11803,7 @@ export const restApiDocsData = [ 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." + default: "

    Sends a request to cancel an acceleration in the accelerating status.
    You can retrieve eligible acceleration id using the history endpoint GET /api/v1/services/accelerator/history?status=accelerating." }, urlString: "/v1/services/accelerator/cancel", showConditions: [""], diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 59dc92358..a9550e731 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -213,7 +213,7 @@ export class ServicesApiServices { return this.httpClient.post(`${this.stateService.env.SERVICES_API}/payments/bitcoin`, params); } - retreiveInvoice$(invoiceId: string): Observable { + retrieveInvoice$(invoiceId: string): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/payments/bitcoin/invoice?id=${invoiceId}`); } From 658151e0e8cee063d5f60852aaf0f1d9db1f38cf Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 11 Mar 2025 12:46:00 +0900 Subject: [PATCH 087/534] ops: Update electrs patch path for FreeBSD prod build --- production/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/install b/production/install index 05b12c08e..68eac6e5a 100755 --- a/production/install +++ b/production/install @@ -1314,7 +1314,7 @@ if [ "${BITCOIN_ELECTRS_INSTALL}" = ON ];then case $OS in FreeBSD) echo "[*] Patching Bitcoin Electrs code for FreeBSD" - osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" + osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" #osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/new_index/\" && sed -i.bak -e s/Snappy/None/ db.rs && rm db.rs.bak" #osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/bin/\" && sed -i.bak -e 's/from_secs(5)/from_secs(1)/' electrs.rs && rm electrs.rs.bak" ;; @@ -1364,7 +1364,7 @@ if [ "${ELEMENTS_ELECTRS_INSTALL}" = ON ];then case $OS in FreeBSD) echo "[*] Patching Liquid Electrs code for FreeBSD" - osSudo "${ELEMENTS_USER}" sh -c "cd \"${ELEMENTS_HOME}/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" + osSudo "${ELEMENTS_USER}" sh -c "cd \"${ELEMENTS_HOME}/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" ;; Debian) ;; From 7adc0083af973c65c321e9bcb96bfa371c87e401 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 11 Mar 2025 14:08:51 +0900 Subject: [PATCH 088/534] ops: Modify prod install to run even if mysql exists --- production/install | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/production/install b/production/install index 68eac6e5a..487850b37 100755 --- a/production/install +++ b/production/install @@ -562,7 +562,7 @@ zfsCreateFilesystems() zfs create -o "mountpoint=${MINFEE_HOME}" "${ZPOOL}/minfee" zfs create -o "mountpoint=${ELECTRS_HOME}" "${ZPOOL}/electrs" zfs create -o "mountpoint=${MEMPOOL_HOME}" "${ZPOOL}/mempool" - zfs create -o "mountpoint=${MYSQL_HOME}" "${ZPOOL}/mysql" + zfs create -o "mountpoint=${MYSQL_HOME}" "${ZPOOL}/mysql" || true zfs create -o "mountpoint=${BITCOIN_ELECTRS_HOME}" "${ZPOOL}/bitcoin/electrs" @@ -1907,34 +1907,34 @@ esac sleep 10 mysql << _EOF_ -create database mempool; +create database if not exists mempool; grant all on mempool.* to '${MEMPOOL_MAINNET_USER}'@'localhost' identified by '${MEMPOOL_MAINNET_PASS}'; -create database mempool_testnet; +create database if not exists mempool_testnet; grant all on mempool_testnet.* to '${MEMPOOL_TESTNET_USER}'@'localhost' identified by '${MEMPOOL_TESTNET_PASS}'; -create database mempool_testnet4; +create database if not exists mempool_testnet4; grant all on mempool_testnet4.* to '${MEMPOOL_TESTNET4_USER}'@'localhost' identified by '${MEMPOOL_TESTNET4_PASS}'; -create database mempool_signet; +create database if not exists mempool_signet; grant all on mempool_signet.* to '${MEMPOOL_SIGNET_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_PASS}'; -create database mempool_mainnet_lightning; +create database if not exists mempool_mainnet_lightning; grant all on mempool_mainnet_lightning.* to '${MEMPOOL_MAINNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_MAINNET_LIGHTNING_PASS}'; -create database mempool_testnet_lightning; +create database if not exists mempool_testnet_lightning; grant all on mempool_testnet_lightning.* to '${MEMPOOL_TESTNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_TESTNET_LIGHTNING_PASS}'; -create database mempool_signet_lightning; +create database if not exists mempool_signet_lightning; grant all on mempool_signet_lightning.* to '${MEMPOOL_SIGNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_LIGHTNING_PASS}'; -create database mempool_liquid; +create database if not exists mempool_liquid; grant all on mempool_liquid.* to '${MEMPOOL_LIQUID_USER}'@'localhost' identified by '${MEMPOOL_LIQUID_PASS}'; -create database mempool_liquidtestnet; +create database if not exists mempool_liquidtestnet; grant all on mempool_liquidtestnet.* to '${MEMPOOL_LIQUIDTESTNET_USER}'@'localhost' identified by '${MEMPOOL_LIQUIDTESTNET_PASS}'; -create database mempool_bisq; +create database if not exists mempool_bisq; grant all on mempool_bisq.* to '${MEMPOOL_BISQ_USER}'@'localhost' identified by '${MEMPOOL_BISQ_PASS}'; _EOF_ From 636b4c0da72d31ddde3e27bdfa7d1e078d62327c Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 11 Mar 2025 15:46:03 +0900 Subject: [PATCH 089/534] ops: Add missing if check for CLN in prod install --- production/install | 3 +++ 1 file changed, 3 insertions(+) diff --git a/production/install b/production/install index 487850b37..7c84e5956 100755 --- a/production/install +++ b/production/install @@ -1378,6 +1378,8 @@ fi # Core Lightning for Bitcoin # ############################## +if [ "${CLN_INSTALL}" = ON ];then + echo "[*] Installing Core Lightning" case $OS in FreeBSD) @@ -1418,6 +1420,7 @@ case $OS in ;; esac +fi ##################### # Bisq installation # From 9bef19449fd24dc0e6a47a24a58f7a7dcc7bc051 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 11 Mar 2025 16:37:14 +0900 Subject: [PATCH 090/534] ops: Comment out old keybase commands in build script --- production/mempool-build-all | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/mempool-build-all b/production/mempool-build-all index 377deb316..10ad179ea 100755 --- a/production/mempool-build-all +++ b/production/mempool-build-all @@ -173,7 +173,7 @@ for repo in $frontend_repos;do done # notify everyone -echo "${HOSTNAME} updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general mempool.dev -echo "${HOSTNAME} updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general "mempool.ops.${LOCATION}" +#echo "${HOSTNAME} updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general mempool.dev +#echo "${HOSTNAME} updated to \`${REF}\` @ \`${HASH}\`" | /usr/local/bin/keybase chat send --nonblock --channel general "mempool.ops.${LOCATION}" exit 0 From c79ef93413a46115522e801cb40590df8a2afe37 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 11 Mar 2025 16:38:26 +0900 Subject: [PATCH 091/534] ops: Bump prod to bitcoin v28.1 + elements 23.2.6 --- production/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/install b/production/install index 7c84e5956..f3bebb4e7 100755 --- a/production/install +++ b/production/install @@ -357,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=v28.0 +BITCOIN_LATEST_RELEASE=v28.1 echo -n '.' BISQ_REPO_URL=https://github.com/bisq-network/bisq @@ -378,7 +378,7 @@ ELEMENTS_REPO_URL=https://github.com/ElementsProject/elements ELEMENTS_REPO_NAME=elements ELEMENTS_REPO_BRANCH=master #ELEMENTS_LATEST_RELEASE=$(curl -s https://api.github.com/repos/ElementsProject/elements/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -ELEMENTS_LATEST_RELEASE=elements-22.1.1 +ELEMENTS_LATEST_RELEASE=elements-23.2.6 echo -n '.' BITCOIN_ELECTRS_REPO_URL=https://github.com/mempool/electrs From 65b276678fb8c64ff0b2ac28d0384962a021b3dc Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 12 Mar 2025 09:35:55 +0900 Subject: [PATCH 092/534] ops: Add negative balance check to check script --- production/check | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/production/check b/production/check index 3f31e67ee..3da5e920d 100755 --- a/production/check +++ b/production/check @@ -18,28 +18,37 @@ check_mempoolfoss_frontend_md5_hash() { check_mempool_electrs_git_hash() { echo -n $(curl -s -i https://node${1}.${2}.mempool.space/api/mempool|grep -i x-powered-by|cut -d ' ' -f3|cut -d '-' -f3|tr -d '\r'|tr -d '\n') } +check_mempool_electrs_negative_balance() { + echo -n $(curl -s https://node${1}.${2}.mempool.space/api/address/35Ty15fzBPGQvKnXZMLYvr41Fq2FTdU54a|jq .chain_stats.spent_txo_sum|tr -d '\r'|tr -d '\n') +} check_liquid_electrs_git_hash() { echo -n $(curl -s -i --connect-to "::node${1}.${2}.mempool.space:443" https://liquid.network/api/mempool|grep -i x-powered-by|cut -d ' ' -f3|cut -d '-' -f3|tr -d '\r'|tr -d '\n') } -for site in fmt va1 fra tk7;do +check_contributors_md5_hash() { + echo -n $(curl -s --connect-to "::node${1}.${2}.mempool.space:443" https://mempool.space/api/v1/contributors|md5|cut -c1-8) +} +for site in va1 fra tk7 fmt;do echo "${site}" for node in 201 202 203 204 205 206 207 208 209 210 211 212 213 214;do [ "${site}" = "fmt" ] && [ "${node}" -gt 206 ] && continue [ "${site}" = "tk7" ] && [ "${node}" -gt 206 ] && continue echo -n "node${node}.${site}: " - check_mempoolspace_frontend_git_hash $node $site - echo -n " " - check_mempoolfoss_frontend_git_hash $node $site - echo -n " " - check_mempoolfoss_backend_git_hash $node $site - echo -n " " - check_mempoolspace_frontend_md5_hash $node $site - echo -n " " - check_mempoolfoss_frontend_md5_hash $node $site - echo -n " " +# check_mempoolspace_frontend_git_hash $node $site +# echo -n " " +# check_mempoolfoss_frontend_git_hash $node $site +# echo -n " " +# check_mempoolfoss_backend_git_hash $node $site +# echo -n " " +# check_mempoolspace_frontend_md5_hash $node $site +# echo -n " " +# check_mempoolfoss_frontend_md5_hash $node $site +# echo -n " " check_mempool_electrs_git_hash $node $site echo -n " " - check_liquid_electrs_git_hash $node $site +# check_liquid_electrs_git_hash $node $site +# echo -n " " +# check_contributors_md5_hash $node $site + check_mempool_electrs_negative_balance $node $site echo done done From 305d931d5c3fc5b87b1a2c08efbb4f634a3dee7f Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 12 Mar 2025 09:43:00 +0900 Subject: [PATCH 093/534] ops: Add more sites to check script --- production/check | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/production/check b/production/check index 3da5e920d..d1bba7826 100755 --- a/production/check +++ b/production/check @@ -27,9 +27,12 @@ check_liquid_electrs_git_hash() { check_contributors_md5_hash() { echo -n $(curl -s --connect-to "::node${1}.${2}.mempool.space:443" https://mempool.space/api/v1/contributors|md5|cut -c1-8) } -for site in va1 fra tk7 fmt;do +for site in va1 fra tk7 sg1 hnl;do echo "${site}" for node in 201 202 203 204 205 206 207 208 209 210 211 212 213 214;do + [ "${site}" = "fmt" ] && [ "${node}" = 203 ] && continue + [ "${site}" = "sg1" ] && [ "${node}" -gt 204 ] && continue + [ "${site}" = "hnl" ] && [ "${node}" -gt 204 ] && continue [ "${site}" = "fmt" ] && [ "${node}" -gt 206 ] && continue [ "${site}" = "tk7" ] && [ "${node}" -gt 206 ] && continue echo -n "node${node}.${site}: " From a152afb4af6aedc111b08c1e25ed9813e22656f9 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 12 Mar 2025 11:51:03 +0900 Subject: [PATCH 094/534] ops: Fix nginx conf for elements unix socket paths --- production/nginx/nginx.conf | 4 ++-- production/nginx/server-esplora.conf | 4 ++-- production/nginx/upstream-esplora.conf | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/production/nginx/nginx.conf b/production/nginx/nginx.conf index 81c0c01d5..790bd6d73 100644 --- a/production/nginx/nginx.conf +++ b/production/nginx/nginx.conf @@ -99,8 +99,8 @@ http { set $mempoolTestnet "http://mempool-liquid-testnet"; # for blockstream/esplora daemon, see upstream-esplora.conf - set $esploraMainnet "http://esplora-liquid-mainnet"; - set $esploraTestnet "http://esplora-liquid-testnet"; + set $esploraMainnet "http://esplora-elements-liquid"; + set $esploraTestnet "http://esplora-elements-liquidtestnet"; # filesystem paths root /mempool/public_html/liquid/; diff --git a/production/nginx/server-esplora.conf b/production/nginx/server-esplora.conf index 38cdb0bc2..fdbea6bd5 100644 --- a/production/nginx/server-esplora.conf +++ b/production/nginx/server-esplora.conf @@ -9,7 +9,7 @@ server { listen 127.0.0.1:4001; access_log /dev/null; location / { - proxy_pass http://esplora-liquid-mainnet; + proxy_pass http://esplora-elements-liquid; } } server { @@ -30,6 +30,6 @@ server { listen 127.0.0.1:4004; access_log /dev/null; location / { - proxy_pass http://esplora-liquid-testnet; + proxy_pass http://esplora-elements-liquidtestnet; } } diff --git a/production/nginx/upstream-esplora.conf b/production/nginx/upstream-esplora.conf index 88ffa11bd..80b76df2d 100644 --- a/production/nginx/upstream-esplora.conf +++ b/production/nginx/upstream-esplora.conf @@ -1,7 +1,7 @@ upstream esplora-bitcoin-mainnet { server unix:/bitcoin/socket/esplora-bitcoin-mainnet fail_timeout=10s max_fails=10 weight=99999; } -upstream esplora-liquid-mainnet { +upstream esplora-elements-liquid { server unix:/elements/socket/esplora-elements-liquid fail_timeout=10s max_fails=10 weight=99999; } upstream esplora-bitcoin-testnet { @@ -13,6 +13,6 @@ upstream esplora-bitcoin-testnet4 { upstream esplora-bitcoin-signet { server unix:/bitcoin/socket/esplora-bitcoin-signet fail_timeout=10s max_fails=10 weight=99999; } -upstream esplora-liquid-testnet { +upstream esplora-elements-liquidtestnet { server unix:/elements/socket/esplora-elements-liquidtestnet fail_timeout=10s max_fails=10 weight=99999; } From 7d9e275803e90b621b4419561962086e5f41a3f2 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 12 Mar 2025 14:56:15 +0100 Subject: [PATCH 095/534] [accelerator] show square receipt if available --- .../accelerate-checkout.component.html | 19 +++++++++++++++++-- .../accelerate-checkout.component.ts | 16 ++++++++-------- 2 files changed, 25 insertions(+), 10 deletions(-) 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 4594fd9fc..2038d4b6c 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -567,14 +567,29 @@ } @else if (step === 'success') {

    -

    Your transaction is being accelerated!

    +

    + @if (accelerationResponse) { + Your transaction is being accelerated! + } @else { + Transaction is already being accelerated! + } +

    - Your transaction has been accepted for acceleration by our mining pool partners. + @if (accelerationResponse) { + Your transaction has been accepted for acceleration by our mining pool partners. + } @else { + Transaction has already been accepted for acceleration by our mining pool partners. + }
    + @if (accelerationResponse?.receiptUrl) { + + }

    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 ac6c7f147..06d2fa4cd 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -87,6 +87,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { math = Math; isMobile: boolean = window.innerWidth <= 767.98; isProdDomain = false; + accelerationResponse: { receiptUrl: string | null } | undefined; private _step: CheckoutStep = 'summary'; simpleMode: boolean = true; @@ -194,11 +195,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.scrollToElement('acceleratePreviewAnchor', 'start'); } if (changes.accelerating && this.accelerating) { - if (this.step === 'processing' || this.step === 'paid') { - this.moveToStep('success', true); - } else { // Edge case where the transaction gets accelerated by someone else or on another session - this.closeModal(); - } + this.moveToStep('success', true); } } @@ -541,7 +538,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, costUSD ).subscribe({ - next: () => { + next: (response) => { + this.accelerationResponse = response; this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); @@ -668,7 +666,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { costUSD, verificationToken.userChallenged ).subscribe({ - next: () => { + next: (response) => { + this.accelerationResponse = response; this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); @@ -777,7 +776,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { costUSD, verificationToken.userChallenged ).subscribe({ - next: () => { + next: (response) => { + this.accelerationResponse = response; this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); From cac404ae9bbce0c6192fddf3a99bb8c79483f134 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 12 Mar 2025 15:26:44 +0100 Subject: [PATCH 096/534] [accelerator] make sure we cannot go back from 'success' step --- .../accelerate-checkout/accelerate-checkout.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 06d2fa4cd..0db40af82 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -200,7 +200,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } moveToStep(step: CheckoutStep, force: boolean = false): void { - if (this.isCheckoutLocked > 0 && !force) { + if (this.isCheckoutLocked > 0 && !force || this.step === 'success') { return; } this.processing = false; From 1121377c7a888d8a1d12859cf9488d3db4b56249 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 12 Mar 2025 15:27:00 +0100 Subject: [PATCH 097/534] [accelerator] add missing response from cashapp payment --- .../accelerate-checkout/accelerate-checkout.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 0db40af82..7fc1e88ef 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -870,7 +870,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.details.cashAppPay.referenceId, costUSD ).subscribe({ - next: () => { + next: (response) => { + this.accelerationResponse = response; this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); From 062c5ca03a0d1bf4e8678dc717b9df5b228a4955 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 12 Mar 2025 16:47:31 +0100 Subject: [PATCH 098/534] Trim input data in tx preview --- .../src/app/components/transaction/transaction-raw.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 5ce170e12..f7ae4a751 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -82,7 +82,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.resetState(); this.isLoading = true; try { - const { tx, hex } = decodeRawTransaction(this.pushTxForm.get('txRaw').value, this.stateService.network); + const { tx, hex } = decodeRawTransaction(this.pushTxForm.get('txRaw').value.trim(), this.stateService.network); await this.fetchPrevouts(tx); await this.fetchCpfpInfo(tx); this.processTransaction(tx, hex); From 4dff3adf1169d056f35acd5b3c28bb5fadbd850d Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 12 Mar 2025 16:49:38 +0100 Subject: [PATCH 099/534] Redirect to tx page 2 seconds after broadcast --- .../transaction-raw.component.html | 11 ++++--- .../transaction-raw.component.scss | 8 +++++ .../transaction/transaction-raw.component.ts | 31 ++++++++++++------- 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 3bd8ee6d2..35701889b 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -30,7 +30,6 @@
    -
    @@ -40,14 +39,18 @@
    -
    +
    - + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + Redirecting to transaction page... + - + +
    @if (!hasPrevouts) { diff --git a/frontend/src/app/components/transaction/transaction-raw.component.scss b/frontend/src/app/components/transaction/transaction-raw.component.scss index 5bbe5601e..a4b386cee 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.scss +++ b/frontend/src/app/components/transaction/transaction-raw.component.scss @@ -191,4 +191,12 @@ .no-cursor { cursor: default !important; pointer-events: none; +} + +.btn-broadcast { + margin-left: 5px; + @media (max-width: 567px) { + margin-left: 0; + margin-top: 5px; + } } \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index f7ae4a751..2e4dd4868 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -3,7 +3,7 @@ import { Transaction, Vout } from '@interfaces/electrs.interface'; import { StateService } from '../../services/state.service'; import { Filter, toFilters } from '../../shared/filters.utils'; import { decodeRawTransaction, getTransactionFlags, addInnerScriptsToVin, countSigops } from '../../shared/transaction.utils'; -import { firstValueFrom, Subscription } from 'rxjs'; +import { catchError, firstValueFrom, Subscription, switchMap, tap, throwError, timer } from 'rxjs'; import { WebsocketService } from '../../services/websocket.service'; import { ActivatedRoute, Router } from '@angular/router'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; @@ -36,6 +36,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { isLoadingBroadcast: boolean; errorBroadcast: string; successBroadcast: boolean; + broadcastSubscription: Subscription; isMobile: boolean; @ViewChild('graphContainer') @@ -207,18 +208,22 @@ export class TransactionRawComponent implements OnInit, OnDestroy { }); } - async postTx(): Promise { + postTx(): void { this.isLoadingBroadcast = true; this.errorBroadcast = null; - return new Promise((resolve, reject) => { - this.apiService.postTransaction$(this.rawHexTransaction) - .subscribe((result) => { + + this.broadcastSubscription = this.apiService.postTransaction$(this.rawHexTransaction).pipe( + tap((txid: string) => { this.isLoadingBroadcast = false; this.successBroadcast = true; - this.transaction.txid = result; - resolve(result); - }, - (error) => { + this.transaction.txid = txid; + }), + switchMap((txid: string) => + timer(2000).pipe( + tap(() => this.router.navigate([this.relativeUrlPipe.transform('/tx/' + txid)])), + ) + ), + catchError((error) => { if (typeof error.error === 'string') { const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); this.errorBroadcast = 'Failed to broadcast transaction, reason: ' + (matchText && matchText[1] || error.error); @@ -226,9 +231,9 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.errorBroadcast = 'Failed to broadcast transaction, reason: ' + error.message; } this.isLoadingBroadcast = false; - reject(this.error); - }); - }); + return throwError(() => error); + }) + ).subscribe(); } resetState() { @@ -253,6 +258,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.missingPrevouts = []; this.stateService.markBlock$.next({}); this.mempoolBlocksSubscription?.unsubscribe(); + this.broadcastSubscription?.unsubscribe(); } resetForm() { @@ -308,6 +314,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.mempoolBlocksSubscription?.unsubscribe(); this.flowPrefSubscription?.unsubscribe(); this.stateService.markBlock$.next({}); + this.broadcastSubscription?.unsubscribe(); } } From 00e7e726bc7084933d8e757a69e46049b0eef7bb Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:31:10 -0500 Subject: [PATCH 100/534] Mark mempool accelerator as registered trademark --- LICENSE | 2 +- .../src/app/components/about/about.component.html | 2 +- .../accelerate-checkout.component.html | 2 +- .../privacy-policy/privacy-policy.component.html | 12 ++++++------ .../components/svg-images/svg-images.component.html | 4 ++-- .../terms-of-service/terms-of-service.component.html | 8 ++++---- .../trademark-policy/trademark-policy.component.html | 2 +- .../transaction-details.component.html | 4 ++-- .../src/app/docs/api-docs/api-docs.component.html | 2 +- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/LICENSE b/LICENSE index 1c368c00a..b6e67e523 100644 --- a/LICENSE +++ b/LICENSE @@ -10,7 +10,7 @@ However, this copyright license does not include an implied right or license to use any trademarks, service marks, logos, or trade names of Mempool Space K.K. or any other contributor to The Mempool Open Source Project. -The Mempool Open Source Project®, Mempool Accelerator™, Mempool Enterprise®, +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 diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 3bd8960f5..5b53e94ab 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -451,7 +451,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 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. + 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/accelerate-checkout/accelerate-checkout.component.html b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html index 4594fd9fc..4ac5aa24e 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -158,7 +158,7 @@ - Mempool Accelerator™ fees + Mempool Accelerator® fees 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 06b09ad30..bfd6159c4 100644 --- a/frontend/src/app/components/privacy-policy/privacy-policy.component.html +++ b/frontend/src/app/components/privacy-policy/privacy-policy.component.html @@ -45,14 +45,14 @@
    -

    USING MEMPOOL ACCELERATOR™

    +

    USING MEMPOOL ACCELERATOR®

    -

    If you use Mempool Accelerator™ your acceleration request will be sent to us and relayed to Mempool's mining pool partners. We will store the TXID of the transactions you accelerate with us. We share this information with our mining pool partners, and publicly display accelerated transaction details on our website and APIs. No personal information or account identifiers will be shared with any third party including mining pool partners.

    +

    If you use Mempool Accelerator® your acceleration request will be sent to us and relayed to Mempool's mining pool partners. We will store the TXID of the transactions you accelerate with us. We share this information with our mining pool partners, and publicly display accelerated transaction details on our website and APIs. No personal information or account identifiers will be shared with any third party including mining pool partners.

    -

    When using Mempool Accelerator™ the mempool.space privacy policy will apply: https://mempool.space/privacy-policy.

    +

    When using Mempool Accelerator® the mempool.space privacy policy will apply: https://mempool.space/privacy-policy.


    - +

    SIGNING UP FOR AN ACCOUNT ON MEMPOOL.SPACE

    @@ -67,7 +67,7 @@
  • If you sign up for a subscription to Mempool Enterprise™ we also collect your company name which is not shared with any third-party.
  • -
  • If you sign up for an account on mempool.space and use Mempool Accelerator™ Pro your accelerated transactions will be associated with your account for the purposes of accounting.
  • +
  • If you sign up for an account on mempool.space and use Mempool Accelerator® Pro your accelerated transactions will be associated with your account for the purposes of accounting.
  • @@ -101,7 +101,7 @@

    We aim to retain your data only as long as necessary:

      -
    • An account is considered inactive if all of the following conditions are met: a) No login activity within the past 6 months, b) No active subscriptions associated with the account, c) No Mempool Accelerator™ Pro account credit
    • +
    • An account is considered inactive if all of the following conditions are met: a) No login activity within the past 6 months, b) No active subscriptions associated with the account, c) No Mempool Accelerator® Pro account credit
    • If an account meets the criteria for inactivity as defined above, we will automatically delete the associated account data after a period of 6 months of continuous inactivity, except in the case of payment disputes or account irregularities.
    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 76aa3de85..04b99dea6 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -137,7 +137,7 @@
    - Mempool Accelerator™ + Mempool Accelerator® @@ -695,4 +695,4 @@ - \ No newline at end of file + diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.html b/frontend/src/app/components/terms-of-service/terms-of-service.component.html index 709605a9f..51f035436 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.html +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.html @@ -67,9 +67,9 @@ -

    MEMPOOL ACCELERATOR™

    +

    MEMPOOL ACCELERATOR®

    -

    Mempool Accelerator™ enables members of the Bitcoin community to submit requests for transaction prioritization.

    +

    Mempool Accelerator® enables members of the Bitcoin community to submit requests for transaction prioritization.

    • Mempool will use reasonable commercial efforts to relay user acceleration requests to Mempool's mining pool partners, but it is at the discretion of Mempool and Mempool's mining pool partners to accept acceleration requests.
    • @@ -84,11 +84,11 @@
      -
    • All acceleration payments and Mempool Accelerator™ account credit top-ups are non-refundable.
    • +
    • All acceleration payments and Mempool Accelerator® account credit top-ups are non-refundable.

    • -
    • Mempool Accelerator™ account credit top-ups are prepayment for future accelerations and cannot be withdrawn or transferred.
    • +
    • Mempool Accelerator® account credit top-ups are prepayment for future accelerations and cannot be withdrawn or transferred.

    • 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 e12cbb8b2..f7da0a7a4 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.component.html +++ b/frontend/src/app/components/trademark-policy/trademark-policy.component.html @@ -340,7 +340,7 @@

      Also, if you are using our Marks in a way described in the sections "Uses for Which We Are Granting a License," you must include the following trademark attribution at the foot of the webpage where you have used the Mark (or, if in a book, on the credits page), on any packaging or labeling, and on advertising or marketing materials:

      -

      "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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

      +

      "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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

    • What to Do When You See Abuse

    • 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 index 78bba955c..819e27d89 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html @@ -170,7 +170,7 @@ @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && notAcceleratedOnLoad) { @@ -318,4 +318,4 @@ - \ No newline at end of file + diff --git a/frontend/src/app/docs/api-docs/api-docs.component.html b/frontend/src/app/docs/api-docs/api-docs.component.html index 75e37a3bd..d359500a0 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.html +++ b/frontend/src/app/docs/api-docs/api-docs.component.html @@ -219,7 +219,7 @@ -

      To get your transaction confirmed quicker, you will need to increase its effective feerate.

      If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee. Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.

      If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc).

      Another option to get your transaction confirmed more quickly is Mempool Accelerator™.

      +

      To get your transaction confirmed quicker, you will need to increase its effective feerate.

      If your transaction was created with RBF enabled, your stuck transaction can simply be replaced with a new one that has a higher fee. Otherwise, if you control any of the stuck transaction's outputs, you can use CPFP to increase your stuck transaction's effective feerate.

      If you are not sure how to do RBF or CPFP, work with the tool you used to make the transaction (wallet software, exchange company, etc).

      Another option to get your transaction confirmed more quickly is Mempool Accelerator®.

      From 8efea6160135a6284142f911aaf03aab4045aaae Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 13 Mar 2025 09:49:40 +0900 Subject: [PATCH 101/534] ops: Add electrs popular-scripts cron jobs --- production/bitcoin.crontab | 9 +++++++++ production/elements.crontab | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/production/bitcoin.crontab b/production/bitcoin.crontab index a5bc64241..a17147f7b 100644 --- a/production/bitcoin.crontab +++ b/production/bitcoin.crontab @@ -1,7 +1,16 @@ +# start test network daemons on boot @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 + +# start electrs on boot @reboot sleep 10 ; screen -dmS mainnet /bitcoin/electrs/start mainnet @reboot sleep 10 ; screen -dmS testnet /bitcoin/electrs/start testnet @reboot sleep 10 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4 @reboot sleep 10 ; screen -dmS signet /bitcoin/electrs/start signet + +# daily update of popular-scripts +30 03 * * * $HOME/electrs/start testnet4 popular-scripts >/dev/null 2>&1 +31 03 * * * $HOME/electrs/start testnet popular-scripts >/dev/null 2>&1 +32 03 * * * $HOME/electrs/start signet popular-scripts >/dev/null 2>&1 +33 03 * * * $HOME/electrs/start mainnet popular-scripts >/dev/null 2>&1 diff --git a/production/elements.crontab b/production/elements.crontab index 4f837706e..6590dfbd7 100644 --- a/production/elements.crontab +++ b/production/elements.crontab @@ -8,3 +8,7 @@ # hourly asset update and electrs restart 6 * * * * cd $HOME/asset_registry_db && git pull --quiet origin master && cd $HOME/asset_registry_testnet_db && git pull --quiet origin master && killall electrs + +# daily update of popular-scripts +32 03 * * * $HOME/electrs/start liquid popular-scripts >/dev/null 2>&1 +33 03 * * * $HOME/electrs/start liquidtestnet popular-scripts >/dev/null 2>&1 From e94dc67b3187ebfbaa630e43805e2f4be306803a Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 13 Mar 2025 15:46:11 +0100 Subject: [PATCH 102/534] Update tapscript multisig minimum size --- frontend/src/app/shared/script.utils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index 62a7a5845..df50a4070 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -310,8 +310,10 @@ export function parseTapscriptMultisig(script: string): undefined | { m: number, } const ops = script.split(' '); - // At minimum, one pubkey group (3 tokens) + m push + final opcode = 5 tokens - if (ops.length < 5) return; + // At minimum, 2 pubkey group (3 tokens) + m push + final opcode = 8 tokens + if (ops.length < 8) { + return; + } const finalOp = ops.pop(); if (finalOp !== 'OP_NUMEQUAL' && finalOp !== 'OP_GREATERTHANOREQUAL') { From 188096e651f745ef8a09d4091d1eb727282a50c4 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 13 Mar 2025 16:38:53 +0100 Subject: [PATCH 103/534] Add opcodes that can be used for tapscript multisig --- frontend/src/app/shared/script.utils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index df50a4070..f0c4701db 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -316,7 +316,7 @@ export function parseTapscriptMultisig(script: string): undefined | { m: number, } const finalOp = ops.pop(); - if (finalOp !== 'OP_NUMEQUAL' && finalOp !== 'OP_GREATERTHANOREQUAL') { + if (!['OP_NUMEQUAL', 'OP_NUMEQUALVERIFY', 'OP_GREATERTHANOREQUAL', 'OP_GREATERTHAN', 'OP_EQUAL', 'OP_EQUALVERIFY'].includes(finalOp)) { return; } @@ -331,6 +331,10 @@ export function parseTapscriptMultisig(script: string): undefined | { m: number, return; } + if (finalOp === 'OP_GREATERTHAN') { + m += 1; + } + if (ops.length % 3 !== 0) { return; } From 76f31623feffd946c7072a208c990f1f68f6c9cc Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 13 Mar 2025 15:49:45 -0700 Subject: [PATCH 104/534] Don't tag as latest by default --- .github/workflows/on-tag.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index ba9e1eb7b..1447ec4ab 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -105,7 +105,6 @@ jobs: --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ - --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ --output "type=registry,push=true" \ From 4d89cb01bd06a3176f9a19a793dd85fef8eaf93a Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 14 Mar 2025 13:34:09 +0900 Subject: [PATCH 105/534] ops: Tweak delay times for bitcoin.crontab --- production/bitcoin.crontab | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/production/bitcoin.crontab b/production/bitcoin.crontab index a17147f7b..63df3c52a 100644 --- a/production/bitcoin.crontab +++ b/production/bitcoin.crontab @@ -1,13 +1,13 @@ # start test network daemons on boot -@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 ; /usr/local/bin/bitcoind -testnet >/dev/null 2>&1 +@reboot sleep 20 ; /usr/local/bin/bitcoind -testnet4 >/dev/null 2>&1 +@reboot sleep 30 ; /usr/local/bin/bitcoind -signet >/dev/null 2>&1 # start electrs on boot -@reboot sleep 10 ; screen -dmS mainnet /bitcoin/electrs/start mainnet -@reboot sleep 10 ; screen -dmS testnet /bitcoin/electrs/start testnet -@reboot sleep 10 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4 -@reboot sleep 10 ; screen -dmS signet /bitcoin/electrs/start signet +@reboot sleep 40 ; screen -dmS mainnet /bitcoin/electrs/start mainnet +@reboot sleep 50 ; screen -dmS testnet /bitcoin/electrs/start testnet +@reboot sleep 60 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4 +@reboot sleep 70 ; screen -dmS signet /bitcoin/electrs/start signet # daily update of popular-scripts 30 03 * * * $HOME/electrs/start testnet4 popular-scripts >/dev/null 2>&1 From 322e81d3edcbea536274ea72110188e4f333bc40 Mon Sep 17 00:00:00 2001 From: natsoni Date: Fri, 14 Mar 2025 14:59:15 +0100 Subject: [PATCH 106/534] Parse tapscript unanimous n-of-n multisig --- frontend/src/app/shared/script.utils.ts | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index f0c4701db..8453bdd63 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -256,6 +256,11 @@ export function detectScriptTemplate(type: ScriptType, script_asm: string, witne return ScriptTemplates.multisig(tapscriptMultisig.m, tapscriptMultisig.n); } + const tapscriptUnanimousMultisig = parseTapscriptUnanimousMultisig(script_asm); + if (tapscriptUnanimousMultisig) { + return ScriptTemplates.multisig(tapscriptUnanimousMultisig, tapscriptUnanimousMultisig); + } + return; } @@ -366,6 +371,53 @@ export function parseTapscriptMultisig(script: string): undefined | { m: number, return { m, n }; } +export function parseTapscriptUnanimousMultisig(script: string): undefined | number { + if (!script) { + return; + } + + const ops = script.split(' '); + // At minimum, 2 pubkey group (3 tokens) = 6 tokens + if (ops.length < 6) { + return; + } + + if (ops.length % 3 !== 0) { + return; + } + + const n = ops.length / 3; + + for (let i = 0; i < n; i++) { + const pushOp = ops.shift(); + const pubkey = ops.shift(); + const sigOp = ops.shift(); + + if (pushOp !== 'OP_PUSHBYTES_32') { + return; + } + if (!/^[0-9a-fA-F]{64}$/.test(pubkey)) { + return; + } + if (i < n - 1) { + if (sigOp !== 'OP_CHECKSIGVERIFY') { + return; + } + } else { + // Last opcode can be either CHECKSIG or CHECKSIGVERIFY + if (!(sigOp === 'OP_CHECKSIGVERIFY' || sigOp === 'OP_CHECKSIG')) { + return; + } + } + } + + if (ops.length) { + return; + } + + return n; +} + export function getVarIntLength(n: number): number { if (n < 0xfd) { return 1; From 30003348ce182a53ea5e910bc0f331ea138f7202 Mon Sep 17 00:00:00 2001 From: wiz Date: Sun, 16 Mar 2025 12:49:26 +0900 Subject: [PATCH 107/534] ops: Fix premature socket close bug in nginx cache warmer scripts --- production/nginx-cache-heater | 2 +- production/nginx-cache-warmer | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/production/nginx-cache-heater b/production/nginx-cache-heater index 24ec8a061..e6dea270a 100755 --- a/production/nginx-cache-heater +++ b/production/nginx-cache-heater @@ -4,7 +4,7 @@ hostname=$(hostname) heat() { echo "$1" - curl -i -s "$1" | head -1 + curl -o /dev/null -s "$1" } heatURLs=( diff --git a/production/nginx-cache-warmer b/production/nginx-cache-warmer index f02091747..171f95430 100755 --- a/production/nginx-cache-warmer +++ b/production/nginx-cache-warmer @@ -6,19 +6,19 @@ slugs=(`curl -sSL https://${hostname}/api/v1/mining/pools/3y|jq -r -S '(.pools[] warmSlurp() { echo "$1" - curl -i -s -H 'User-Agent: Googlebot' "$1" | head -1 + curl -o /dev/null -s -H 'User-Agent: Googlebot' "$1" } warmUnfurl() { echo "$1" - curl -i -s -H 'User-Agent: Twitterbot' "$1" | head -1 + curl -o /dev/null -s -H 'User-Agent: Twitterbot' "$1" } warm() { echo "$1" - curl -i -s "$1" | head -1 + curl -o /dev/null -s "$1" } warmSlurpURLs=( From 54cf5ea75e8b2c91e18490b02dc1d9c3086fde9b Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 25 Mar 2025 23:04:52 +0700 Subject: [PATCH 108/534] Fix database diabled --- backend/src/api/blocks.ts | 4 ++-- backend/src/api/common.ts | 7 +++++++ backend/src/api/websocket-handler.ts | 18 +++++++++++++----- backend/src/index.ts | 4 +++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 102601594..581850277 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1391,7 +1391,7 @@ class Blocks { } public async $getBlockAuditSummary(hash: string): Promise { - if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) { + if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) && Common.auditIndexingEnabled()) { return BlocksAuditsRepository.$getBlockAudit(hash); } else { return null; @@ -1399,7 +1399,7 @@ class Blocks { } public async $getBlockTxAuditSummary(hash: string, txid: string): Promise { - if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) { + if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) && Common.auditIndexingEnabled()) { return BlocksAuditsRepository.$getBlockTxAudit(hash, txid); } else { return null; diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 50de63afc..f3569c44c 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -722,6 +722,13 @@ export class Common { ); } + static auditIndexingEnabled(): boolean { + return ( + Common.indexingEnabled() && + config.MEMPOOL.AUDIT === true + ); + } + static gogglesIndexingEnabled(): boolean { return ( Common.blocksSummariesIndexingEnabled() && diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 390896caa..09e56630a 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -1011,15 +1011,19 @@ class WebsocketHandler { const blockTransactions = structuredClone(transactions); this.printLogs(); - await statistics.runStatistics(); + if (config.STATISTICS.ENABLED && config.DATABASE.ENABLED) { + await statistics.runStatistics(); + } const _memPool = memPool.getMempool(); const candidateTxs = await memPool.getMempoolCandidates(); let candidates: GbtCandidates | undefined = (memPool.limitGBT && candidateTxs) ? { txs: candidateTxs, added: [], removed: [] } : undefined; let transactionIds: string[] = (memPool.limitGBT) ? Object.keys(candidates?.txs || {}) : Object.keys(_memPool); - const accelerations = Object.values(mempool.getAccelerations()); - await accelerationRepository.$indexAccelerationsForBlock(block, accelerations, structuredClone(transactions)); + if (config.DATABASE.ENABLED) { + const accelerations = Object.values(mempool.getAccelerations()); + await accelerationRepository.$indexAccelerationsForBlock(block, accelerations, structuredClone(transactions)); + } const rbfTransactions = Common.findMinedRbfTransactions(transactions, memPool.getSpendMap()); memPool.handleRbfTransactions(rbfTransactions); @@ -1095,7 +1099,9 @@ class WebsocketHandler { if (config.CORE_RPC.DEBUG_LOG_PATH && block.extras) { const firstSeen = getRecentFirstSeen(block.id); if (firstSeen) { - BlocksRepository.$saveFirstSeenTime(block.id, firstSeen); + if (config.DATABASE.ENABLED) { + BlocksRepository.$saveFirstSeenTime(block.id, firstSeen); + } block.extras.firstSeen = firstSeen; } } @@ -1392,7 +1398,9 @@ class WebsocketHandler { }); } - await statistics.runStatistics(); + if (config.STATISTICS.ENABLED && config.DATABASE.ENABLED) { + await statistics.runStatistics(); + } } public handleNewStratumJob(job: StratumJob): void { diff --git a/backend/src/index.ts b/backend/src/index.ts index dc6a8ae1a..1b2204c28 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -153,7 +153,9 @@ class Server { await poolsUpdater.updatePoolsJson(); // Needs to be done before loading the disk cache because we sometimes wipe it await syncAssets.syncAssets$(); - await mempoolBlocks.updatePools$(); + if (config.DATABASE.ENABLED) { + await mempoolBlocks.updatePools$(); + } if (config.MEMPOOL.ENABLED) { if (config.MEMPOOL.CACHE_ENABLED) { await diskCache.$loadMempoolCache(); From 08194bff96a3db318c448b71f3ade104bd374c67 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 25 Mar 2025 20:14:18 +0100 Subject: [PATCH 109/534] Include tapscript hex in ScriptInfo --- frontend/src/app/shared/address-utils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 0a7f2df02..1287fb746 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -157,8 +157,10 @@ export class AddressTypeInfo { for (const v of vin) { if (v.inner_witnessscript_asm) { this.tapscript = true; - const controlBlock = v.witness[v.witness.length - 1].startsWith('50') ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; - this.processScript(new ScriptInfo('inner_witnessscript', undefined, v.inner_witnessscript_asm, v.witness, controlBlock)); + const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); + const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; + const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; + this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock)); } } // for single-script types, if we've seen one input we've seen them all From 3b9c26c706c4c9749a818fa5e79fcc4da1ed1d6a Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 25 Mar 2025 20:16:16 +0100 Subject: [PATCH 110/534] Include input index in ScriptInfo --- frontend/src/app/components/address/address.component.ts | 2 +- frontend/src/app/interfaces/electrs.interface.ts | 1 + frontend/src/app/shared/address-utils.ts | 5 ++++- frontend/src/app/shared/script.utils.ts | 6 +++++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 8786f46ee..62c885bd3 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -284,7 +284,7 @@ export class AddressComponent implements OnInit, OnDestroy { let addressVin: Vin[] = []; for (const tx of this.transactions) { - addressVin = addressVin.concat(tx.vin.filter(v => v.prevout?.scriptpubkey_address === this.address.address)); + addressVin = addressVin.concat(tx.vin.map((v, index) => ({ ...v, vinId: `${tx.txid}:${index}` })).filter(v => v.prevout?.scriptpubkey_address === this.address.address)); } this.addressTypeInfo.processInputs(addressVin); // hack to trigger change detection diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index aa2a05a2f..d8effcc6f 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -76,6 +76,7 @@ export interface Vin { issuance?: Issuance; // Custom lazy?: boolean; + vinId?: string; // `txid:index` where txid links to the transaction this input is spent in, and index is the position of this input within this transaction // Ord isInscription?: boolean; } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 1287fb746..e753faac5 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -160,7 +160,7 @@ export class AddressTypeInfo { const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; - this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock)); + this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, v.vinId)); } } // for single-script types, if we've seen one input we've seen them all @@ -214,6 +214,9 @@ export class AddressTypeInfo { } private processScript(script: ScriptInfo): void { + if (this.scripts.has(script.key)) { + return; + } this.scripts.set(script.key, script); if (script.template?.type === 'multisig') { this.isMultisig = { m: script.template['m'], n: script.template['n'] }; diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index 62a7a5845..26a1eade5 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -174,15 +174,19 @@ export class ScriptInfo { scriptPath?: string; hex?: string; asm?: string; + vinId?: string; template: ScriptTemplate; - constructor(type: ScriptType, hex?: string, asm?: string, witness?: string[], scriptPath?: string) { + constructor(type: ScriptType, hex?: string, asm?: string, witness?: string[], scriptPath?: string, vinId?: string) { this.type = type; this.hex = hex; this.asm = asm; if (scriptPath) { this.scriptPath = scriptPath; } + if (vinId) { + this.vinId = vinId; + } if (this.asm) { this.template = detectScriptTemplate(this.type, this.asm, witness); } From 92fda6b8c11cf808fdb215e89b2125399cd637ff Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 25 Mar 2025 20:17:04 +0100 Subject: [PATCH 111/534] Allow to crop custom length in asm styler --- .../transactions-list/transactions-list.component.html | 2 +- frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 6f1d76538..e8646279b 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -164,7 +164,7 @@ P2WSH witness script -
      +
      ...
    + +
    +
    +

    Taproot Tree

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    @@ -288,7 +302,7 @@ - + diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 62c885bd3..a4fc72f16 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -115,6 +115,7 @@ export class AddressComponent implements OnInit, OnDestroy { addressLoadingStatus$: Observable; addressInfo: null | AddressInformation = null; addressTypeInfo: null | AddressTypeInfo; + hasTapTree: boolean; fullyLoaded = false; chainStats: AddressStats; @@ -287,6 +288,7 @@ export class AddressComponent implements OnInit, OnDestroy { addressVin = addressVin.concat(tx.vin.map((v, index) => ({ ...v, vinId: `${tx.txid}:${index}` })).filter(v => v.prevout?.scriptpubkey_address === this.address.address)); } this.addressTypeInfo.processInputs(addressVin); + this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.scriptPath.length / 2 > 33; // hack to trigger change detection this.addressTypeInfo = this.addressTypeInfo.clone(); diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html new file mode 100644 index 000000000..741f2e1d7 --- /dev/null +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html @@ -0,0 +1,15 @@ +
    +
    +
    +
    +
    +
    +
    +
    + + + + +
    diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.scss b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.scss new file mode 100644 index 000000000..3d7e30884 --- /dev/null +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.scss @@ -0,0 +1,31 @@ +.fade-out { + position: relative; + + &::before { + content: ''; + position: absolute; + width: 100%; + height: 40px; + top: -40px; + background: linear-gradient(to top, + var(--fade-out-box-bg-end) 0%, + var(--fade-out-box-bg-end) 30%, + var(--fade-out-box-bg-start) 100%); + z-index: 10000000; + } +} + +.toggle-wrapper { + display: flex; + justify-content: center; + width: 100%; +} + +.button-container { + display: flex; + justify-content: center; +} + +.graph-toggle { + margin-top: 10px; +} \ No newline at end of file diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts new file mode 100644 index 000000000..6a0ed575c --- /dev/null +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -0,0 +1,362 @@ +import { Component, ChangeDetectionStrategy, Input, OnChanges, NgZone, SimpleChanges } from '@angular/core'; +import { Router } from '@angular/router'; +import { Location } from '@angular/common'; +import { AddressTypeInfo } from '@app/shared/address-utils'; +import { EChartsOption } from '@app/graphs/echarts'; +import { ScriptInfo } from '@app/shared/script.utils'; +import { compactSize, taggedHash, uint8ArrayToHexString } from '@app/shared/transaction.utils'; +import { StateService } from '@app/services/state.service'; +import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; +import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; + +interface TaprootTree { + name: string; // the TapBranch hash or TapLeaf script hash + value?: { + leafVersion: number; + script: ScriptInfo; + }; + depth?: number; + children?: [TaprootTree, TaprootTree]; + // ECharts properties + symbol?: string; + symbolSize?: number; + symbolOffset?: number[]; + label?: any; + tooltip?: { label: string, content?: string }[]; +} + +@Component({ + selector: 'app-taproot-address-scripts', + templateUrl: './taproot-address-scripts.component.html', + styleUrls: ['./taproot-address-scripts.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TaprootAddressScriptsComponent implements OnChanges { + @Input() address: AddressTypeInfo; + + tree: TaprootTree; + depth: number = 0; + height: number; + fullTreeShown: boolean; + maxHeight: number = 400; + + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + chartInstance: any; + isTouchscreen: boolean = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || (navigator as any).msMaxTouchPoints > 0; + + constructor( + public stateService: StateService, + private asmStylerPipe: AsmStylerPipe, + private location: Location, + private relativeUrlPipe: RelativeUrlPipe, + private router: Router, + private zone: NgZone, + ) { } + + ngOnChanges(changes: SimpleChanges) { + if (changes.address?.currentValue.scripts) { + this.buildTree(); + this.prepareTree(this.tree, 0); + this.prepareChartOptions(); + } + } + + buildTree(): void { + if (this.address?.scripts.size) { + this.tree = { name: '' }; + for (const script of this.address.scripts.values()) { + let { leafVersion, merklePath } = this.parseControlBlock(script.scriptPath); + this.tree = this.addPathToTree(this.tree, script, leafVersion, merklePath); + } + this.height = (this.depth + 1) * 40; + } + } + + parseControlBlock(controlBlock: string): { leafVersion: number, merklePath: string[] } { + + const m = ((controlBlock.length / 2) - 33) / 32; + if (!Number.isInteger(m)) { + throw new Error("Invalid scriptPath: length does not match the expected format."); + } + + const leafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; + const merklePath = []; + for (let i = 0; i < m; i++) { + merklePath.push(controlBlock.slice(66 + i * 64, 66 + (i + 1) * 64)); + } + + if (merklePath.length > this.depth) { + this.depth = merklePath.length; + } + + return { leafVersion, merklePath }; + } + + addPathToTree(masterTree: TaprootTree, script: ScriptInfo, leafVersion: number, merklePath: string[]): TaprootTree { + // See https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki + let k = taggedHash('TapLeaf', leafVersion.toString(16) + uint8ArrayToHexString(compactSize(script.hex.length / 2)) + script.hex); + let node: TaprootTree = { name: k, value: { leafVersion, script } }; + + // Start from the leaf and go up until we can merge in the current tree + for (let i = 0; i < merklePath.length; i++) { + const e = merklePath[i]; + const [left, right] = [k, e].sort((a, b) => a.localeCompare(b)); + const parentHash = taggedHash('TapBranch', left + right); + const isFirstChild = left === k; + const children: [TaprootTree, TaprootTree] = isFirstChild ? [node, { name: e }] : [{ name: e }, node]; + + if (this.mergeBranchAtDepth(masterTree, parentHash, children, isFirstChild, merklePath.length - i - 1)) { + return masterTree; + } + + k = parentHash; + node = { name: k, children }; + + } + + return node; + } + + mergeBranchAtDepth(tree: TaprootTree, target: string, children: [TaprootTree, TaprootTree], first: boolean, targetDepth: number, currentDepth = 0): boolean { + if (!tree) { + return false; + } + + if (currentDepth === targetDepth) { + if (tree.name === target) { + if (!tree.children) { + tree.children = children; + } else { + if (first) { + tree.children[0] = children[0]; + } else { + tree.children[1] = children[1]; + } + } + return true; + } + return false; + } + + if (tree.children) { + for (const child of tree.children) { + if (this.mergeBranchAtDepth(child, target, children, first, targetDepth, currentDepth + 1)) { + return true; + } + } + } + return false; + } + + prepareTree(node: TaprootTree, depth: number): void { + if (!node) { + return; + } + + node.depth = depth; + node.symbol = 'none'; + + const basePillStyle = { + align: 'center', + padding: [3, 6], + borderRadius: 10, + fontSize: 10, + fontWeight: 'bold', + fontFamily: 'system-ui', + }; + + if (depth === 0) { + node.symbol = 'none'; + node.label = { + formatter: '{pill|TapRoot}', + offset: [0, -5], + rich: { + pill: { + ...basePillStyle, + backgroundColor: 'var(--tertiary)', + color: '#fff', + }, + }, + }; + node.tooltip = [ + { label: 'TapRoot Hash', content: node.name.slice(0, 10) + '…' + node.name.slice(-10) }, + ]; + } + + if (node.children) { + if (depth > 0) { + node.symbol = 'circle'; + node.symbolSize = 10; + node.symbolOffset = [0, 5]; + node.label = { formatter: '' }; + node.tooltip = [ + { label: 'TapBranch Hash', content: node.name.slice(0, 10) + '…' + node.name.slice(-10) }, + { label: 'Depth', content: depth.toString() }, + ]; + } + this.prepareTree(node.children[0], depth + 1); + this.prepareTree(node.children[1], depth + 1); + } else { + if (node.value) { + const script = node.value.script; + const label = script.template?.label; + + node.label = { + formatter: `{pill|${label || 'Script'}}`, + offset: [0, 5], + verticalAlign: 'middle', + rich: { + pill: { + ...basePillStyle, + backgroundColor: '#ffc107', + color: '#212529' + } + } + }; + + node.tooltip = [ + { label: 'TapLeaf Hash', content: node.name.slice(0, 10) + '…' + node.name.slice(-10) }, + { label: 'Depth', content: depth.toString() }, + { label: 'Leaf Version', content: node.value.leafVersion.toString(16) }, + ]; + + } else { + node.symbol = 'circle'; + node.symbolSize = 10; + node.symbolOffset = [0, 5]; + node.label = { formatter: '' }; + node.tooltip = [ + { label: 'Hash', content: node.name.slice(0, 10) + '…' + node.name.slice(-10) }, + { label: 'Depth', content: depth.toString() }, + ]; + } + } + } + + prepareChartOptions() { + if (!this.tree) { + return; + } + + this.chartOptions = { + tooltip: { + show: true, + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + confine: true, + textStyle: { + color: '#b1b1b1', + }, + borderColor: '#000', + formatter: (params: any) => { + const node: TaprootTree = params.data; + if (!node.tooltip) { + return ''; + } + + let rows = node.tooltip.map( + (item) => + ` + ${item.label} + ${item.content} + ` + ).join(''); + + if (node.value?.script.vinId) { + const [txid, vinIndex] = node.value.script.vinId.split(':'); + rows += ` + + Last used in tx + + ${txid.slice(0, 10) + '…' + txid.slice(-10)} + + `; + } + + let asmContent = ''; + if (node.value?.script?.asm) { + const asm = this.asmStylerPipe.transform(node.value.script.asm, 300); + asmContent = ` +
    + ${asm} ${node.value.script.asm.length > 300 ? '...' : ''} +
    `; + } + + let hiddenScriptsMessage = ''; + if (node.tooltip[0].label === 'Hash') { + hiddenScriptsMessage = ` +
    + This node might commit to one or more scripts that have not been revealed yet. +
    `; + } + + return ` +
    + + ${rows} +
    + ${asmContent} + ${hiddenScriptsMessage} +
    `; + }, + }, + series: [{ + type: 'tree', + data: [this.tree as any], + top: '20', + bottom: '20', + right: 0, + left: 0, + lineStyle: { + curveness: 0.9, + width: 2, + }, + emphasis: { + focus: 'ancestor', + itemStyle: { + color: '#ccc', + }, + lineStyle: { + color: '#ccc', + } + }, + orient: 'TB', + expandAndCollapse: false, + animationDurationUpdate: 0, + animationDuration: 0, + }], + }; + } + + onChartInit(ec) { + this.chartInstance = ec; + this.chartInstance.on('click', 'series', this.onChartClick.bind(this)); + } + + onChartClick(e): void { + if (this.isTouchscreen) { // show tooltip on touchscreen, and click on link in tooltip to navigate + return; + } + + if (!e.data.value?.script.vinId) { + return; + } + + const [txid, vinIndex] = e.data.value.script.vinId.split(':'); + const url = this.router.createUrlTree([this.relativeUrlPipe.transform('/tx'), txid], { fragment: 'vin=' + vinIndex }); + + this.zone.run(() => { + if (e.event?.event?.ctrlKey || e.event?.event?.metaKey) { + const fullUrl = this.location.prepareExternalUrl(this.router.serializeUrl(url)); + window.open(fullUrl, '_blank'); + } else { + this.router.navigate([this.relativeUrlPipe.transform('/tx'), txid], { fragment: 'vin=' + vinIndex }); + } + }); + + } +} \ No newline at end of file diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index 67ed7e3b8..7fd309c24 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, CustomChart } from 'echarts/charts'; +import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, CustomChart, TreeChart } from 'echarts/charts'; import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; // Typescript interfaces @@ -13,6 +13,6 @@ echarts.use([ LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, - CustomChart, + CustomChart, TreeChart ]); 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 f882b4221..9be556424 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -41,7 +41,9 @@ import { AddressGraphComponent } from '@components/address-graph/address-graph.c 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 { TaprootAddressScriptsComponent } from '@components/taproot-address-scripts/taproot-address-scripts.component'; import { CommonModule } from '@angular/common'; +import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; @NgModule({ declarations: [ @@ -85,6 +87,7 @@ import { CommonModule } from '@angular/common'; UtxoGraphComponent, ActiveAccelerationBox, AddressesTreemap, + TaprootAddressScriptsComponent, ], imports: [ CommonModule, @@ -97,6 +100,9 @@ import { CommonModule } from '@angular/common'; exports: [ NgxEchartsModule, ActiveAccelerationBox, + ], + providers: [ + AsmStylerPipe ] }) export class GraphsModule { } diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index eafe8ae99..d990d182d 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -3,7 +3,7 @@ import { getVarIntLength, parseMultisigScript, isPoint } from '@app/shared/scrip import { Transaction, Vin } from '@interfaces/electrs.interface'; import { CpfpInfo, RbfInfo, TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; -import { Hash } from './sha256'; +import { hash, Hash } from './sha256'; // Bitcoin Core default policy settings const MAX_STANDARD_TX_WEIGHT = 400_000; @@ -1380,11 +1380,11 @@ function toWords(bytes) { } // Helper functions -function uint8ArrayToHexString(uint8Array: Uint8Array): string { +export function uint8ArrayToHexString(uint8Array: Uint8Array): string { return Array.from(uint8Array).map(byte => byte.toString(16).padStart(2, '0')).join(''); } -function hexStringToUint8Array(hex: string): Uint8Array { +export function hexStringToUint8Array(hex: string): Uint8Array { const buf = new Uint8Array(hex.length / 2); for (let i = 0; i < buf.length; i++) { buf[i] = parseInt(hex.substr(i * 2, 2), 16); @@ -1521,6 +1521,32 @@ function readVector(buffer: Uint8Array, offset: number): [Uint8Array[], number] return [vector, updatedOffset]; } +// SHA256(SHA256(tag) || SHA256(tag) || dataHex) +export function taggedHash(tag: string, dataHex: string): string { + const encoder = new TextEncoder(); + const tagHash = hash(encoder.encode(tag)); + return uint8ArrayToHexString(hash(new Uint8Array([...tagHash, ...tagHash, ...hexStringToUint8Array(dataHex)]))); +} + +export function compactSize(n: number): Uint8Array { + if (n <= 252) { + return new Uint8Array([n]); + } else if (n <= 0xffff) { + return new Uint8Array([0xfd, n & 0xff, (n >> 8) & 0xff]); + } else if (n <= 0xffffffff) { + return new Uint8Array([0xfe, n & 0xff, (n >> 8) & 0xff, (n >> 16) & 0xff, (n >> 24) & 0xff]); + } else { + const buffer = new Uint8Array(9); + buffer[0] = 0xff; + let num = BigInt(n); + for (let i = 1; i <= 8; i++) { + buffer[i] = Number(num & BigInt(0xff)); + num >>= BigInt(8); + } + return buffer; + } +} + // Inversed the opcodes object from https://github.com/mempool/mempool/blob/14e49126c3ca8416a8d7ad134a95c5e090324d69/backend/src/utils/bitcoin-script.ts#L1 const opcodes = { 0: 'OP_0', From b153d21162aea4e51ee773fe96bf24137a14bf0b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 10 Mar 2025 04:35:52 +0000 Subject: [PATCH 114/534] automatically fetch enabled wallets from services backend --- backend/src/api/services/wallets.ts | 33 ++++++++++++++++++++++++++ backend/src/config.ts | 2 ++ production/mempool-config.mainnet.json | 1 + 3 files changed, 36 insertions(+) diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index dd4d7ebc9..f498a80ad 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -30,6 +30,7 @@ const POLL_FREQUENCY = 5 * 60 * 1000; // 5 minutes class WalletApi { private wallets: Record = {}; private syncing = false; + private lastSync = 0; constructor() { this.wallets = config.WALLETS.ENABLED ? (config.WALLETS.WALLETS as string[]).reduce((acc, wallet) => { @@ -47,7 +48,38 @@ class WalletApi { if (!config.WALLETS.ENABLED || this.syncing) { return; } + this.syncing = true; + + if (config.WALLETS.AUTO && (Date.now() - this.lastSync) > POLL_FREQUENCY) { + try { + // update list of active wallets + this.lastSync = Date.now(); + const response = await axios.get(config.MEMPOOL_SERVICES.API + `/wallets`); + const walletList: string[] = response.data; + if (walletList) { + // create a quick lookup dictionary of active wallets + const newWallets: Record = Object.fromEntries( + walletList.map(wallet => [wallet, true]) + ); + for (const wallet of walletList) { + // don't overwrite existing wallets + if (!this.wallets[wallet]) { + this.wallets[wallet] = { name: wallet, addresses: {}, lastPoll: 0 }; + } + } + // remove wallets that are no longer active + for (const wallet of Object.keys(this.wallets)) { + if (!newWallets[wallet]) { + delete this.wallets[wallet]; + } + } + } + } catch (e) { + logger.err(`Error updating active wallets: ${(e instanceof Error ? e.message : e)}`); + } + } + for (const walletKey of Object.keys(this.wallets)) { const wallet = this.wallets[walletKey]; if (wallet.lastPoll < (Date.now() - POLL_FREQUENCY)) { @@ -72,6 +104,7 @@ class WalletApi { } } } + this.syncing = false; } diff --git a/backend/src/config.ts b/backend/src/config.ts index a1050a7d5..3fe3db2ee 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -164,6 +164,7 @@ interface IConfig { }, WALLETS: { ENABLED: boolean; + AUTO: boolean; WALLETS: string[]; }, STRATUM: { @@ -334,6 +335,7 @@ const defaults: IConfig = { }, 'WALLETS': { 'ENABLED': false, + 'AUTO': false, 'WALLETS': [], }, 'STRATUM': { diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 9505601d2..87f58f916 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -159,6 +159,7 @@ }, "WALLETS": { "ENABLED": true, + "AUTO": true, "WALLETS": ["BITB", "3350"] }, "STRATUM": { From 072b83243e5202de0b2722855d8f66ca22031f18 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 10 Mar 2025 04:38:51 +0000 Subject: [PATCH 115/534] update custom dashboard config --- frontend/custom-sv-config.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/custom-sv-config.json b/frontend/custom-sv-config.json index dee3dab18..9a61704a2 100644 --- a/frontend/custom-sv-config.json +++ b/frontend/custom-sv-config.json @@ -16,10 +16,10 @@ "mobileOrder": 4 }, { - "component": "balance", + "component": "walletBalance", "mobileOrder": 1, "props": { - "address": "32ixEdVJWo3kmvJGMTZq5jAQVZZeuwnqzo" + "wallet": "ONBTC" } }, { @@ -30,21 +30,22 @@ } }, { - "component": "address", + "component": "wallet", "mobileOrder": 2, "props": { - "address": "32ixEdVJWo3kmvJGMTZq5jAQVZZeuwnqzo", - "period": "1m" + "wallet": "ONBTC", + "period": "1m", + "label": "bitcoin.gob.sv" } }, { "component": "blocks" }, { - "component": "addressTransactions", + "component": "walletTransactions", "mobileOrder": 3, "props": { - "address": "32ixEdVJWo3kmvJGMTZq5jAQVZZeuwnqzo" + "wallet": "ONBTC" } } ] From 3056454389ea80380920ef8e702089e9bb629f55 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 26 Feb 2025 04:48:22 +0000 Subject: [PATCH 116/534] Add configurable label to balance widget --- .../address-graph/address-graph.component.ts | 22 +++++++++++++++++++ .../custom-dashboard.component.html | 4 ++-- frontend/src/app/graphs/echarts.ts | 4 ++-- 3 files changed, 26 insertions(+), 4 deletions(-) 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 2bbfd5e34..005c64e9f 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -44,6 +44,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { @Input() right: number | string = 10; @Input() left: number | string = 70; @Input() widget: boolean = false; + @Input() label: string = ''; @Input() defaultFiat: boolean = false; @Input() showLegend: boolean = true; @Input() showYAxis: boolean = true; @@ -55,6 +56,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { hoverData: any[] = []; conversions: any; allowZoom: boolean = false; + labelGraphic: any; selected = { [$localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`]: true, 'Fiat': false }; @@ -85,6 +87,18 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { ngOnChanges(changes: SimpleChanges): void { this.isLoading = true; + this.labelGraphic = this.label ? { + type: 'text', + right: '36px', + bottom: '36px', + z: 100, + silent: true, + style: { + fill: '#fff', + text: this.label, + font: '24px sans-serif' + } + } : undefined; if (!this.addressSummary$ && (!this.address || !this.stats)) { return; } @@ -205,6 +219,10 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { right: this.adjustedRight, left: this.adjustedLeft, }, + graphic: this.labelGraphic ? [{ + ...this.labelGraphic, + right: this.adjustedRight + 22 + 'px', + }] : undefined, legend: (this.showLegend && !this.stateService.isAnyTestnet()) ? { data: [ { @@ -443,6 +461,10 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { right: this.adjustedRight, left: this.adjustedLeft, }, + graphic: this.labelGraphic ? [{ + ...this.labelGraphic, + right: this.adjustedRight + 22 + 'px', + }] : undefined, legend: { selected: this.selected, }, 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 8ca1a5ac4..defb7c068 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 @@   - +
    @@ -272,7 +272,7 @@   - + diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index 67ed7e3b8..36a0517e4 100644 --- a/frontend/src/app/graphs/echarts.ts +++ b/frontend/src/app/graphs/echarts.ts @@ -1,7 +1,7 @@ // Import tree-shakeable echarts import * as echarts from 'echarts/core'; 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 { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, GraphicComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; // Typescript interfaces import { EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption } from 'echarts'; @@ -13,6 +13,6 @@ echarts.use([ LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, - CustomChart, + CustomChart, GraphicComponent ]); export { echarts, EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption }; \ No newline at end of file From fb50ea7a6d06e3a4a28db3061d8b2ba74bedafee Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 4 Feb 2025 12:02:12 +0000 Subject: [PATCH 117/534] detect and warn about address poisoning attacks --- .../transactions-list.component.html | 21 ++- .../transactions-list.component.ts | 56 +++++++ frontend/src/app/shared/address-utils.ts | 145 ++++++++++++++++++ .../address-text/address-text.component.html | 17 ++ .../address-text/address-text.component.scss | 32 ++++ .../address-text/address-text.component.ts | 20 +++ frontend/src/app/shared/shared.module.ts | 6 +- 7 files changed, 290 insertions(+), 7 deletions(-) create mode 100644 frontend/src/app/shared/components/address-text/address-text.component.html create mode 100644 frontend/src/app/shared/components/address-text/address-text.component.scss create mode 100644 frontend/src/app/shared/components/address-text/address-text.component.ts 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 6f1d76538..7721298fb 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -16,6 +16,11 @@
    {{ errorUnblinded }}
    + @if (similarityMatches.get(tx.txid)?.size) { + + }
    @@ -68,9 +73,11 @@ - - - + {{ vin.prevout.scriptpubkey_type?.toUpperCase() }} @@ -217,9 +224,11 @@ 'highlight': this.addresses.length && ((vout.scriptpubkey_type !== 'p2pk' && addresses.includes(vout.scriptpubkey_address)) || this.addresses.includes(vout.scriptpubkey.slice(2, -2))) }"> + + + + + + + + \ No newline at end of file diff --git a/frontend/src/app/components/treasuries/treasuries.component.scss b/frontend/src/app/components/treasuries/treasuries.component.scss index b56bb3ead..6dad9a9d7 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.scss +++ b/frontend/src/app/components/treasuries/treasuries.component.scss @@ -30,6 +30,16 @@ .skeleton-loader { max-width: 100%; + background-color: var(--secondary); + border-radius: 3px; +} + +.skeleton-loader-transactions { + max-width: 250px; + position: relative; + top: 2px; + margin-bottom: -3px; + height: 18px; } .more-padding { @@ -75,4 +85,70 @@ .less-padding { padding: 20px 20px; } +} + +.treasury-leaderboard-table { + width: 100%; + text-align: left; + table-layout: fixed; + tr, td, th { + border: 0px; + padding-top: 0.65rem !important; + padding-bottom: 0.7rem !important; + } + td { + overflow: hidden; + } + .clickable-row { + cursor: pointer; + &:hover { + background-color: var(--secondary); + } + } + .table-cell-position { + width: 10%; + text-align: center; + .position-container { + display: flex; + align-items: center; + justify-content: center; + .color-swatch { + width: 16px; + height: 16px; + border-radius: 3px; + display: inline-block; + } + .position-number { + min-width: 20px; + } + } + } + .table-cell-name { + width: 40%; + text-align: left; + } + .table-cell-balance { + width: 25%; + text-align: right; + } + .table-cell-value { + width: 25%; + text-align: right; + } +} + +.position-container { + .skeleton-loader { + &.color-swatch { + width: 16px; + height: 16px; + min-width: 16px; + } + &.position-number { + width: 20px; + height: 18px; + min-width: 20px; + margin-left: 8px; + } + } } \ No newline at end of file diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index bce51aea6..8c58ee503 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -6,6 +6,7 @@ import { StateService } from '@app/services/state.service'; import { catchError, map, scan, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; import { WalletStats } from '@app/shared/wallet-stats'; import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-treasuries', @@ -19,6 +20,7 @@ export class TreasuriesComponent implements OnInit, OnDestroy { isLoading = true; error: any; walletSubscriptions: Subscription[] = []; + currentSortedWallets: string[] = []; // Individual wallet data walletObservables: Record>> = {}; @@ -26,11 +28,13 @@ export class TreasuriesComponent implements OnInit, OnDestroy { individualWalletSummaries: Record> = {}; walletStatsObservables: Record> = {}; walletStats$: Observable>; + sortedWallets$: Observable; constructor( private apiService: ApiService, private stateService: StateService, private electrsApiService: ElectrsApiService, + private router: Router, ) {} ngOnInit() { @@ -227,6 +231,25 @@ export class TreasuriesComponent implements OnInit, OnDestroy { return of({}); }) ); + + this.sortedWallets$ = this.walletStats$.pipe( + map(walletStats => { + return [...this.wallets].sort((a, b) => { + const balanceA = walletStats[a]?.balance || 0; + const balanceB = walletStats[b]?.balance || 0; + return balanceB - balanceA; + }); + }), + tap(sortedWallets => { + // Update selectedWallets to maintain the same order + const newSelectedWallets: Record = {}; + sortedWallets.forEach(wallet => { + newSelectedWallets[wallet] = this.selectedWallets[wallet] ?? true; + }); + this.selectedWallets = newSelectedWallets; + this.currentSortedWallets = sortedWallets; + }) + ); } private deduplicateWalletTransactions(walletTransactions: AddressTxSummary[]): AddressTxSummary[] { @@ -246,6 +269,19 @@ export class TreasuriesComponent implements OnInit, OnDestroy { }); } + getWalletColor(wallet: string): string { + // Use a consistent color for each wallet based on its position in the sorted list + const colors = [ + '#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40', + ]; + const index = this.currentSortedWallets.indexOf(wallet); + return colors[index % colors.length]; + } + + navigateToWallet(wallet: string): void { + this.router.navigate(['/wallet', wallet]); + } + ngOnDestroy() { // Clean up subscriptions this.walletSubscriptions.forEach(sub => { From 2ec8cdda932c7cf2bb2c7d37b6307d7df368ee94 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 25 Apr 2025 19:34:42 +0000 Subject: [PATCH 220/534] restrict treasuries dashboard to official build --- .../src/app/graphs/graphs.routing.module.ts | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index 1bfdfb808..d025fd95e 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -98,18 +98,6 @@ const routes: Routes = [ networkSpecific: true, } }, - { - path: 'treasuries', - component: StartComponent, - children: [{ - path: '', - component: TreasuriesComponent, - data: { - networks: ['bitcoin'], - networkSpecific: true, - }, - }] - }, { path: 'graphs', data: { networks: ['bitcoin', 'liquid'] }, @@ -194,6 +182,21 @@ const routes: Routes = [ }, ]; +if (window['__env']?.OFFICIAL_MEMPOOL_SPACE) { + routes[0].children?.push({ + path: 'treasuries', + component: StartComponent, + children: [{ + path: '', + component: TreasuriesComponent, + data: { + networks: ['bitcoin'], + networkSpecific: true, + }, + }] + }); +} + @NgModule({ imports: [RouterModule.forChild(routes)], }) From a5fe71c7a3deb6c62cf33d0458102088e7b4b28a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 2 May 2025 22:28:30 +0000 Subject: [PATCH 221/534] add pie chart to treasuries dashboard --- .../treasuries-graph.component.ts | 28 +- .../treasuries-pie.component.html | 7 + .../treasuries-pie.component.scss | 135 +++++++++ .../treasuries-pie.component.ts | 280 ++++++++++++++++++ .../treasuries/treasuries.component.html | 88 +++--- .../treasuries/treasuries.component.scss | 10 +- .../treasuries/treasuries.component.ts | 16 +- frontend/src/app/graphs/graphs.module.ts | 2 + 8 files changed, 509 insertions(+), 57 deletions(-) create mode 100644 frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.html create mode 100644 frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.scss create mode 100644 frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 8dbd73254..095038f63 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -10,6 +10,12 @@ import { StateService } from '@app/services/state.service'; import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; import { SeriesOption } from 'echarts'; import { WalletStats } from '@app/shared/wallet-stats'; +import { chartColors } from '@app/app.constants'; + + +// export const treasuriesPalette = [ +// '#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40', +// ]; const periodSeconds = { '1d': (60 * 60 * 24), @@ -65,11 +71,6 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { isLoading = true; chartInstance: any = undefined; - // Color palette for multiple wallets - colorPalette = [ - '#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40', - ]; - constructor( @Inject(LOCALE_ID) public locale: string, public stateService: StateService, @@ -215,7 +216,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { })); this.chartOptions = { - color: this.colorPalette, + color: chartColors, animation: false, grid: { top: 20, @@ -260,11 +261,12 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { tooltip += `
    ${date}
    `; // Get all active wallet IDs from the selected wallets - const activeWalletIds = Object.keys(this.selectedWallets) - .filter(walletId => this.selectedWallets[walletId] && this.walletData[walletId]); + const activeWalletIds: { walletId: string, index: number }[] = this.wallets + .map((walletId, index) => ({ walletId, index })) + .filter(({ walletId }) => this.selectedWallets[walletId] && this.walletData[walletId]); // For each active wallet, find and display the most recent balance - activeWalletIds.forEach((walletId, index) => { + activeWalletIds.forEach(({ walletId, index }) => { const walletPoints = this.walletData[walletId]; if (!walletPoints || !walletPoints.length) { return; @@ -274,7 +276,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { let mostRecentPoint: any = null; for (let i = 0; i < walletPoints.length; i++) { const point: any = walletPoints[i]; - const pointTime = Array.isArray(point) ? point[0] : + const pointTime = Array.isArray(point) ? point[0] : (point && typeof point === 'object' && 'value' in point ? point.value[0] : null); if (pointTime && pointTime <= tooltipTime) { @@ -293,11 +295,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { (mostRecentPoint && typeof mostRecentPoint === 'object' && 'value' in mostRecentPoint ? mostRecentPoint.value[1] : null); if (balance !== null && !isNaN(balance)) { - // Create a marker for this series using the color from colorPalette - const colorIndex = index % this.colorPalette.length; - - // Get color for marker - use direct color from palette - const markerColor = this.colorPalette[colorIndex]; + const markerColor = chartColors[index % chartColors.length]; const marker = ``; diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.html b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.html new file mode 100644 index 000000000..c4e6ac024 --- /dev/null +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.html @@ -0,0 +1,7 @@ +
    +
    +
    +
    +
    +
    diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.scss b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.scss new file mode 100644 index 000000000..cf53ebe14 --- /dev/null +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.scss @@ -0,0 +1,135 @@ +.card-header { + border-bottom: 0; + font-size: 18px; + @media (min-width: 465px) { + font-size: 20px; + } +} + +.full-container { + padding: 0px 15px; + width: 100%; + height: calc(100% - 140px); + padding-bottom: 20px; + @media (max-width: 992px) { + height: calc(100% - 190px); + }; + @media (max-width: 575px) { + height: calc(100% - 230px); + }; +} + +.chart { + max-height: 400px; + @media (max-width: 767.98px) { + max-height: 230px; + } + margin-bottom: 20px; +} +.chart-widget { + width: 100%; + height: 100%; + @media (max-width: 767px) { + max-height: 240px; + } + @media (max-width: 485px) { + max-height: 200px; + } +} + +@media (max-width: 767.98px) { + .pools-table th, + .pools-table td { + padding: .3em !important; + } +} + +@media (max-width: 430px) { + .pool-name { + max-width: 110px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .health-column { + display: none; + } +} + +.loadingGraphs { + position: absolute; + top: 50%; + left: calc(50% - 15px); + z-index: 99; +} + +.pool-distribution { + min-height: 56px; + display: block; + @media (min-width: 485px) { + display: flex; + flex-direction: row; + } + h5 { + margin-bottom: 5px; + } + .item { + max-width: 160px; + width: 50%; + display: inline-block; + margin: 0px auto 20px; + &:nth-child(2) { + order: 2; + @media (min-width: 485px) { + order: 3; + } + } + &:nth-child(3) { + width: 50%; + order: 3; + @media (min-width: 485px) { + order: 2; + display: block; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: block; + } + } + .card-title { + font-size: 1rem; + color: var(--title-fg); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .card-text { + font-size: 18px; + span { + color: var(--transparent-fg); + font-size: 12px; + } + } + } +} + +.skeleton-loader { + width: 100%; + display: block; + max-width: 80px; + margin: 15px auto 3px; +} + + +td { + .difference { + &.positive { + color: rgb(66, 183, 71); + } + &.negative { + color: rgb(183, 66, 66); + } + } +} diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts new file mode 100644 index 000000000..c2da96a40 --- /dev/null +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -0,0 +1,280 @@ +import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, Input, NgZone, OnChanges, SimpleChanges, ChangeDetectorRef, EventEmitter, Output } from '@angular/core'; +import { Router } from '@angular/router'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; +import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; +import { StateService } from '@app/services/state.service'; +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'; +import { WalletStats } from '@app/shared/wallet-stats'; +import { AddressTxSummary } from '@interfaces/electrs.interface'; +import { chartColors } from '@app/app.constants'; +import { formatNumber } from '@angular/common'; + +@Component({ + selector: 'app-treasuries-pie', + templateUrl: './treasuries-pie.component.html', + styleUrls: ['./treasuries-pie.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TreasuriesPieComponent implements OnChanges { + @Input() height: number = 300; + @Input() mode: 'relative' | 'all' = 'relative'; + @Input() walletStats: Record; + @Input() walletSummaries$: Observable>; + @Input() selectedWallets: Record = {}; + @Input() wallets: string[] = []; + @Output() navigateToWallet: EventEmitter = new EventEmitter(); + + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + chartInstance: any = undefined; + error: any; + isLoading = true; + subscription: Subscription; + redraw$: BehaviorSubject = new BehaviorSubject(false); + + walletBalance: Record = {}; + + constructor( + @Inject(LOCALE_ID) public locale: string, + public stateService: StateService, + private router: Router, + private zone: NgZone, + private cd: ChangeDetectorRef, + ) { + } + + ngOnInit(): void { + this.isLoading = true; + this.setupSubscription(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.walletSummaries$ || changes.selectedWallets || changes.mode) { + if (this.subscription) { + this.subscription.unsubscribe(); + } + this.setupSubscription(); + } else { + // re-trigger subscription + this.redraw$.next(true); + } + } + + setupSubscription(): void { + this.subscription = combineLatest([ + this.redraw$, + this.walletSummaries$ + ]).subscribe(([_, walletSummaries]) => { + if (walletSummaries) { + this.error = null; + this.processWalletData(walletSummaries); + this.prepareChartOptions(); + } + this.isLoading = false; + this.cd.markForCheck(); + }); + } + + processWalletData(walletSummaries: Record): void { + this.walletBalance = {}; + + Object.entries(walletSummaries).forEach(([walletId, summary]) => { + if (summary?.length) { + const total = this.walletStats[walletId] ? this.walletStats[walletId].balance : summary.reduce((acc, tx) => acc + tx.value, 0); + this.walletBalance[walletId] = total; + } + }); + } + + generateChartSeriesData(): PieSeriesOption[] { + let sliceThreshold = 1; + if (isMobile()) { + sliceThreshold = 2; + } + + const data: object[] = []; + + let edgeDistance: any = '20%'; + if (isMobile()) { + edgeDistance = 0; + } else { + edgeDistance = 10; + } + + const treasuriesTotal = Object.values(this.walletBalance).reduce((acc, v) => acc + v, 0); + const total = this.mode === 'relative' ? treasuriesTotal : 2099999997690000; + + const entries = this.wallets.map((id, index) => ({ + id, + balance: this.walletBalance[id], + share: (this.walletBalance[id] / total) * 100, + color: chartColors[index % chartColors.length], + })); + if (this.mode === 'all') { + entries.unshift({ + id: 'remaining', + balance: (total - treasuriesTotal), + share: ((total - treasuriesTotal) / total) * 100, + color: 'orange' + }); + + console.log('ALL! ', entries); + } + + const otherEntry = { id: 'other', balance: 0, share: 0 }; + + entries.forEach((entry) => { + if (entry.share < sliceThreshold) { + otherEntry.balance += entry.balance; + otherEntry.share = (otherEntry.balance / total) * 100; + return; + } + data.push({ + itemStyle: { + color: entry.color, + }, + value: entry.share, + name: entry.id, + label: { + overflow: 'none', + color: 'var(--tooltip-grey)', + alignTo: 'edge', + edgeDistance: edgeDistance, + }, + tooltip: { + show: !isMobile(), + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: 'var(--tooltip-grey)', + }, + borderColor: '#000', + formatter: () => { + return `${entry.id} (${entry.share.toFixed(2)}%)
    + ${formatNumber(entry.balance / 100_000_000, this.locale, '1.3-3')} BTC
    `; + } + }, + data: entry.id as any, + } as PieSeriesOption); + }); + + const percentage = otherEntry.share.toFixed(2) + '%'; + + if (otherEntry.share > 0) { + data.push({ + itemStyle: { + color: '#6b6b6b', + }, + value: otherEntry.share, + name: $localize`Other (${percentage})`, + label: { + overflow: 'none', + color: 'var(--tooltip-grey)', + alignTo: 'edge', + edgeDistance: edgeDistance + }, + tooltip: { + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: 'var(--tooltip-grey)', + }, + borderColor: '#000', + formatter: () => { + return `${otherEntry.id} (${otherEntry.share}%)
    + ${formatNumber(otherEntry.balance, this.locale, '1.3-3')}
    `; + } + }, + data: 9999 as any, + } as PieSeriesOption); + } + + return data; + } + + prepareChartOptions(): void { + const pieSize = ['20%', '80%']; // Desktop + + this.chartOptions = { + animation: false, + color: chartColors, + tooltip: { + trigger: 'item', + textStyle: { + align: 'left', + } + }, + series: [ + { + zlevel: 0, + minShowLabelAngle: 1.8, + name: 'Treasuries', + type: 'pie', + radius: pieSize, + data: this.generateChartSeriesData(), + labelLine: { + lineStyle: { + width: 2, + }, + }, + label: { + fontSize: 14, + }, + itemStyle: { + borderRadius: 1, + borderWidth: 1, + borderColor: '#000', + }, + emphasis: { + itemStyle: { + shadowBlur: 40, + shadowColor: 'rgba(0, 0, 0, 0.75)', + }, + labelLine: { + lineStyle: { + width: 3, + } + } + } + } + ], + }; + } + + onChartInit(ec): void { + if (this.chartInstance !== undefined) { + return; + } + + this.chartInstance = ec; + this.chartInstance.on('click', (e) => { + if (e.data.data === 9999) { // "Other" + return; + } + this.navigateToWallet.emit(e.data.data); + }); + } + + onSaveChart(): void { + const now = new Date(); + this.chartOptions.backgroundColor = 'var(--active-bg)'; + this.chartInstance.setOption(this.chartOptions); + download(this.chartInstance.getDataURL({ + pixelRatio: 2, + excludeComponents: ['dataZoom'], + }), `treasuries-pie-${Math.round(now.getTime() / 1000)}.svg`); + this.chartOptions.backgroundColor = 'none'; + this.chartInstance.setOption(this.chartOptions); + } + + isEllipsisActive(e: HTMLElement): boolean { + return (e.offsetWidth < e.scrollWidth); + } +} + diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index f2fbe1ac2..5a1a5f416 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -1,5 +1,6 @@
    -
    + +
    @@ -12,47 +13,68 @@
    - - - - - - + + + + + + + +
    - - - + P2PK diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 20f11abd8..6f01a6e59 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -14,6 +14,7 @@ import { StorageService } from '@app/services/storage.service'; import { OrdApiService } from '@app/services/ord-api.service'; import { Inscription } from '@app/shared/ord/inscription.utils'; import { Etching, Runestone } from '@app/shared/ord/rune.utils'; +import { ADDRESS_SIMILARITY_THRESHOLD, AddressMatch, AddressSimilarity, AddressType, AddressTypeInfo, checkedCompareAddressStrings, detectAddressType } from '@app/shared/address-utils'; @Component({ selector: 'app-transactions-list', @@ -55,6 +56,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { showFullScript: { [vinIndex: number]: boolean } = {}; showFullWitness: { [vinIndex: number]: { [witnessIndex: number]: boolean } } = {}; showOrdData: { [key: string]: { show: boolean; inscriptions?: Inscription[]; runestone?: Runestone, runeInfo?: { [id: string]: { etching: Etching; txid: string; } }; } } = {}; + similarityMatches: Map> = new Map(); constructor( public stateService: StateService, @@ -144,6 +146,8 @@ export class TransactionsListComponent implements OnInit, OnChanges { this.currency = currency; this.refreshPrice(); }); + + this.updateAddressSimilarities(); } refreshPrice(): void { @@ -183,6 +187,8 @@ export class TransactionsListComponent implements OnInit, OnChanges { } } if (changes.transactions || changes.addresses) { + this.similarityMatches.clear(); + this.updateAddressSimilarities(); if (!this.transactions || !this.transactions.length) { return; } @@ -296,6 +302,56 @@ export class TransactionsListComponent implements OnInit, OnChanges { } } + updateAddressSimilarities(): void { + if (!this.transactions || !this.transactions.length) { + return; + } + for (const tx of this.transactions) { + if (this.similarityMatches.get(tx.txid)) { + continue; + } + + const similarityGroups: Map = new Map(); + let lastGroup = 0; + + // Check for address poisoning similarity matches + this.similarityMatches.set(tx.txid, new Map()); + const comparableVouts = [ + ...tx.vout.slice(0, 20), + ...this.addresses.map(addr => ({ scriptpubkey_address: addr, scriptpubkey_type: detectAddressType(addr, this.stateService.network) })) + ].filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type)); + const comparableVins = tx.vin.slice(0, 20).map(v => v.prevout).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v?.scriptpubkey_type)); + for (const vout of comparableVouts) { + const address = vout.scriptpubkey_address; + const addressType = vout.scriptpubkey_type; + if (this.similarityMatches.get(tx.txid)?.has(address)) { + continue; + } + for (const compareAddr of [ + ...comparableVouts.filter(v => v.scriptpubkey_type === addressType && v.scriptpubkey_address !== address), + ...comparableVins.filter(v => v.scriptpubkey_type === addressType && v.scriptpubkey_address !== address) + ]) { + const similarity = checkedCompareAddressStrings(address, compareAddr.scriptpubkey_address, addressType as AddressType, this.stateService.network); + if (similarity?.status === 'comparable' && similarity.score > ADDRESS_SIMILARITY_THRESHOLD) { + let group = similarityGroups.get(address) || lastGroup++; + similarityGroups.set(address, group); + const bestVout = this.similarityMatches.get(tx.txid)?.get(address); + if (!bestVout || bestVout.score < similarity.score) { + this.similarityMatches.get(tx.txid)?.set(address, { score: similarity.score, match: similarity.left, group }); + } + // opportunistically update the entry for the compared address + const bestCompare = this.similarityMatches.get(tx.txid)?.get(compareAddr.scriptpubkey_address); + if (!bestCompare || bestCompare.score < similarity.score) { + group = similarityGroups.get(compareAddr.scriptpubkey_address) || lastGroup++; + similarityGroups.set(compareAddr.scriptpubkey_address, group); + this.similarityMatches.get(tx.txid)?.set(compareAddr.scriptpubkey_address, { score: similarity.score, match: similarity.right, group }); + } + } + } + } + } + } + onScroll(): void { this.loadMore.emit(); } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 0a7f2df02..0ca4ec2e0 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -78,6 +78,7 @@ const p2trRegex = RegExp('^p' + BECH32_CHARS_LW + '{58}$'); const pubkeyRegex = RegExp('^' + `(04${HEX_CHARS}{128})|(0[23]${HEX_CHARS}{64})$`); export function detectAddressType(address: string, network: string): AddressType { + network = network || 'mainnet'; // normal address types const firstChar = address.substring(0, 1); if (ADDRESS_PREFIXES[network].base58.pubkey.includes(firstChar) && base58Regex.test(address.slice(1))) { @@ -211,6 +212,18 @@ export class AddressTypeInfo { } } + public compareTo(other: AddressTypeInfo): AddressSimilarityResult { + return compareAddresses(this.address, other.address, this.network); + } + + public compareToString(other: string): AddressSimilarityResult { + if (other === this.address) { + return { status: 'identical' }; + } + const otherInfo = new AddressTypeInfo(this.network, other); + return this.compareTo(otherInfo); + } + private processScript(script: ScriptInfo): void { this.scripts.set(script.key, script); if (script.template?.type === 'multisig') { @@ -218,3 +231,135 @@ export class AddressTypeInfo { } } } + +export interface AddressMatch { + prefix: string; + postfix: string; +} + +export interface AddressSimilarity { + status: 'comparable'; + score: number; + left: AddressMatch; + right: AddressMatch; +} +export type AddressSimilarityResult = + | { status: 'identical' } + | { status: 'incomparable' } + | AddressSimilarity; + +export const ADDRESS_SIMILARITY_THRESHOLD = 10_000_000; // 1 false positive per ~10 million comparisons + +function fuzzyPrefixMatch(a: string, b: string, rtl: boolean = false): { score: number, matchA: string, matchB: string } { + let score = 0; + let gap = false; + let done = false; + + let ai = 0; + let bi = 0; + let prefixA = ''; + let prefixB = ''; + if (rtl) { + a = a.split('').reverse().join(''); + b = b.split('').reverse().join(''); + } + + while (ai < a.length && bi < b.length && !done) { + if (a[ai] === b[bi]) { + // matching characters + prefixA += a[ai]; + prefixB += b[bi]; + score++; + ai++; + bi++; + } else if (!gap) { + // try looking ahead in both strings to find the best match + const nextMatchA = (ai + 1 < a.length && a[ai + 1] === b[bi]); + const nextMatchB = (bi + 1 < b.length && a[ai] === b[bi + 1]); + const nextMatchBoth = (ai + 1 < a.length && bi + 1 < b.length && a[ai + 1] === b[bi + 1]); + if (nextMatchBoth) { + // single differing character + prefixA += a[ai]; + prefixB += b[bi]; + ai++; + bi++; + } else if (nextMatchA) { + // character missing in b + prefixA += a[ai]; + ai++; + } else if (nextMatchB) { + // character missing in a + prefixB += b[bi]; + bi++; + } else { + ai++; + bi++; + } + gap = true; + } else { + done = true; + } + } + + if (rtl) { + prefixA = prefixA.split('').reverse().join(''); + prefixB = prefixB.split('').reverse().join(''); + } + + return { score, matchA: prefixA, matchB: prefixB }; +} + +export function compareAddressInfo(a: AddressTypeInfo, b: AddressTypeInfo): AddressSimilarityResult { + if (a.address === b.address) { + return { status: 'identical' }; + } + if (a.type !== b.type) { + return { status: 'incomparable' }; + } + if (!['p2pkh', 'p2sh', 'p2sh-p2wpkh', 'p2sh-p2wsh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(a.type)) { + return { status: 'incomparable' }; + } + const isBase58 = a.type === 'p2pkh' || a.type === 'p2sh'; + + const left = fuzzyPrefixMatch(a.address, b.address); + const right = fuzzyPrefixMatch(a.address, b.address, true); + // depending on address type, some number of matching prefix characters are guaranteed + const prefixScore = isBase58 ? 1 : ADDRESS_PREFIXES[a.network || 'mainnet'].bech32.length; + + // add the two scores together + const totalScore = left.score + right.score - prefixScore; + + // adjust for the size of the alphabet (58 vs 32) + const normalizedScore = Math.pow(isBase58 ? 58 : 32, totalScore); + + return { + status: 'comparable', + score: normalizedScore, + left: { + prefix: left.matchA, + postfix: right.matchA, + }, + right: { + prefix: left.matchB, + postfix: right.matchB, + }, + }; +} + +export function compareAddresses(a: string, b: string, network: string): AddressSimilarityResult { + if (a === b) { + return { status: 'identical' }; + } + const aInfo = new AddressTypeInfo(network, a); + return aInfo.compareToString(b); +} + +// avoids the overhead of creating AddressTypeInfo objects for each address, +// but a and b *MUST* be valid normalized addresses, of the same valid type +export function checkedCompareAddressStrings(a: string, b: string, type: AddressType, network: string): AddressSimilarityResult { + return compareAddressInfo( + { address: a, type: type, network: network } as AddressTypeInfo, + { address: b, type: type, network: network } as AddressTypeInfo, + ); +} + diff --git a/frontend/src/app/shared/components/address-text/address-text.component.html b/frontend/src/app/shared/components/address-text/address-text.component.html new file mode 100644 index 000000000..ddcd8d751 --- /dev/null +++ b/frontend/src/app/shared/components/address-text/address-text.component.html @@ -0,0 +1,17 @@ + +@if (similarity) { + +} @else { + + + +} \ No newline at end of file diff --git a/frontend/src/app/shared/components/address-text/address-text.component.scss b/frontend/src/app/shared/components/address-text/address-text.component.scss new file mode 100644 index 000000000..3b5bf50b7 --- /dev/null +++ b/frontend/src/app/shared/components/address-text/address-text.component.scss @@ -0,0 +1,32 @@ +.address-text { + text-overflow: unset; + display: flex; + flex-direction: row; + align-items: start; + position: relative; + + font-family: monospace; + + .infix { + flex-grow: 0; + flex-shrink: 1; + overflow: hidden; + text-overflow: ellipsis; + user-select: none; + + text-decoration: underline 2px; + } + + .prefix, .postfix { + flex-shrink: 0; + flex-grow: 0; + user-select: none; + + text-decoration: underline var(--red) 2px; + } +} + +.poison-alert { + margin-left: .5em; + color: var(--yellow); +} \ No newline at end of file diff --git a/frontend/src/app/shared/components/address-text/address-text.component.ts b/frontend/src/app/shared/components/address-text/address-text.component.ts new file mode 100644 index 000000000..f618428aa --- /dev/null +++ b/frontend/src/app/shared/components/address-text/address-text.component.ts @@ -0,0 +1,20 @@ +import { Component, Input } from '@angular/core'; +import { AddressMatch, AddressTypeInfo } from '@app/shared/address-utils'; + +@Component({ + selector: 'app-address-text', + templateUrl: './address-text.component.html', + styleUrls: ['./address-text.component.scss'] +}) +export class AddressTextComponent { + @Input() address: string; + @Input() info: AddressTypeInfo | null; + @Input() similarity: { score: number, match: AddressMatch, group: number } | null; + + groupColors: string[] = [ + 'var(--primary)', + 'var(--success)', + 'var(--info)', + 'white', + ]; +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index d937e6bbb..335b428ed 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -7,7 +7,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline, - faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope } from '@fortawesome/free-solid-svg-icons'; + faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -94,6 +94,7 @@ import { SatsComponent } from '@app/shared/components/sats/sats.component'; import { BtcComponent } from '@app/shared/components/btc/btc.component'; import { FeeRateComponent } from '@app/shared/components/fee-rate/fee-rate.component'; import { AddressTypeComponent } from '@app/shared/components/address-type/address-type.component'; +import { AddressTextComponent } from '@app/shared/components/address-text/address-text.component'; import { TruncateComponent } from '@app/shared/components/truncate/truncate.component'; import { SearchResultsComponent } from '@components/search-form/search-results/search-results.component'; import { TimestampComponent } from '@app/shared/components/timestamp/timestamp.component'; @@ -214,6 +215,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c BtcComponent, FeeRateComponent, AddressTypeComponent, + AddressTextComponent, TruncateComponent, SearchResultsComponent, TimestampComponent, @@ -360,6 +362,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c BtcComponent, FeeRateComponent, AddressTypeComponent, + AddressTextComponent, TruncateComponent, SearchResultsComponent, TimestampComponent, @@ -465,5 +468,6 @@ export class SharedModule { library.addIcons(faShareNodes); library.addIcons(faCreditCard); library.addIcons(faMicroscope); + library.addIcons(faExclamationTriangle); } } From d805304d7958706a672fbc8734f9dd5f454cc67a Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 16:14:46 +0900 Subject: [PATCH 118/534] Use github-hosted runners --- .github/workflows/ci.yml | 10 +++++----- .github/workflows/docker_update_latest_tag.yml | 2 +- .github/workflows/get_backend_block_height.yml | 2 +- .github/workflows/get_backend_hash.yml | 2 +- .github/workflows/get_image_digest.yml | 2 +- .github/workflows/on-tag.yml | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d2fc387f..9f99778e2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: node: ["20", "21"] flavor: ["dev", "prod"] fail-fast: false - runs-on: "ubuntu-latest" + runs-on: mempool-ci name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: @@ -66,7 +66,7 @@ jobs: cache: name: "Cache assets for builds" - runs-on: "ubuntu-latest" + runs-on: mempool-ci steps: - name: Checkout uses: actions/checkout@v3 @@ -163,7 +163,7 @@ jobs: node: ["20", "21"] flavor: ["dev", "prod"] fail-fast: false - runs-on: "ubuntu-latest" + runs-on: mempool-ci name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: @@ -246,7 +246,7 @@ jobs: e2e: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" - runs-on: "ubuntu-latest" + runs-on: mempool-ci needs: frontend strategy: fail-fast: false @@ -378,7 +378,7 @@ jobs: validate_docker_json: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" - runs-on: "ubuntu-latest" + runs-on: mempool-ci name: Validate generated backend Docker JSON steps: diff --git a/.github/workflows/docker_update_latest_tag.yml b/.github/workflows/docker_update_latest_tag.yml index 5d21697d5..c5ba87f58 100644 --- a/.github/workflows/docker_update_latest_tag.yml +++ b/.github/workflows/docker_update_latest_tag.yml @@ -15,7 +15,7 @@ jobs: service: - frontend - backend - runs-on: ubuntu-latest + runs-on: mempool-ci steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/get_backend_block_height.yml b/.github/workflows/get_backend_block_height.yml index 52f3b038c..73db6107e 100644 --- a/.github/workflows/get_backend_block_height.yml +++ b/.github/workflows/get_backend_block_height.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] jobs: print-backend-sha: - runs-on: 'ubuntu-latest' + runs-on: mempool-ci name: Get block height steps: - name: Checkout diff --git a/.github/workflows/get_backend_hash.yml b/.github/workflows/get_backend_hash.yml index 57950dee4..d63860c5e 100644 --- a/.github/workflows/get_backend_hash.yml +++ b/.github/workflows/get_backend_hash.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] jobs: print-backend-sha: - runs-on: 'ubuntu-latest' + runs-on: mempool-ci name: Print backend hashes steps: - name: Checkout diff --git a/.github/workflows/get_image_digest.yml b/.github/workflows/get_image_digest.yml index 7414eeb08..3d86c860c 100644 --- a/.github/workflows/get_image_digest.yml +++ b/.github/workflows/get_image_digest.yml @@ -10,7 +10,7 @@ on: type: string jobs: print-images-sha: - runs-on: 'ubuntu-latest' + runs-on: mempool-ci name: Print digest for images steps: - name: Checkout diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 1447ec4ab..b02d9ff03 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -21,7 +21,7 @@ jobs: service: - frontend - backend - runs-on: ubuntu-latest + runs-on: mempool-ci timeout-minutes: 120 name: Build and push to DockerHub steps: From 8303f4df4144d17009bf7841fbf8d3e451560800 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 31 Mar 2025 07:14:22 +0000 Subject: [PATCH 119/534] add local cache file for public wallet data --- backend/src/api/services/wallets.ts | 82 +++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index f498a80ad..540c093fe 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -4,6 +4,7 @@ import { IEsploraApi } from '../bitcoin/esplora-api.interface'; import bitcoinApi from '../bitcoin/bitcoin-api-factory'; import axios from 'axios'; import { TransactionExtended } from '../../mempool.interfaces'; +import { promises as fsPromises } from 'fs'; interface WalletAddress { address: string; @@ -31,12 +32,90 @@ class WalletApi { private wallets: Record = {}; private syncing = false; private lastSync = 0; + private isSaving = false; + private cacheSchemaVersion = 1; + + private static TMP_FILE_NAME = config.MEMPOOL.CACHE_DIR + '/tmp-wallets-cache.json'; + private static FILE_NAME = config.MEMPOOL.CACHE_DIR + '/wallets-cache.json'; constructor() { this.wallets = config.WALLETS.ENABLED ? (config.WALLETS.WALLETS as string[]).reduce((acc, wallet) => { acc[wallet] = { name: wallet, addresses: {}, lastPoll: 0 }; return acc; }, {} as Record) : {}; + + // Load cache on startup + if (config.WALLETS.ENABLED) { + this.$loadCache(); + } + } + + private async $loadCache(): Promise { + try { + const cacheData = await fsPromises.readFile(WalletApi.FILE_NAME, 'utf8'); + if (!cacheData) { + return; + } + + const data = JSON.parse(cacheData); + + if (data.cacheSchemaVersion !== this.cacheSchemaVersion) { + logger.notice('Wallets cache contains an outdated schema version. Clearing it.'); + return this.$wipeCache(); + } + + this.wallets = data.wallets; + // Reset lastSync time to force transaction history refresh + for (const wallet of Object.values(this.wallets)) { + wallet.lastPoll = 0; + for (const address of Object.values(wallet.addresses)) { + address.lastSync = 0; + } + } + logger.info('Restored wallets data from disk cache'); + } catch (e) { + logger.warn('Failed to parse wallets cache. Skipping. Reason: ' + (e instanceof Error ? e.message : e)); + } + } + + private async $saveCache(): Promise { + if (this.isSaving || !config.WALLETS.ENABLED) { + return; + } + + try { + this.isSaving = true; + logger.debug('Writing wallets data to disk cache...'); + + const cacheData = { + cacheSchemaVersion: this.cacheSchemaVersion, + wallets: this.wallets, + }; + + await fsPromises.writeFile( + WalletApi.TMP_FILE_NAME, + JSON.stringify(cacheData), + { flag: 'w' } + ); + + await fsPromises.rename(WalletApi.TMP_FILE_NAME, WalletApi.FILE_NAME); + + logger.debug('Wallets data saved to disk cache'); + } catch (e) { + logger.warn('Error writing to wallets cache file: ' + (e instanceof Error ? e.message : e)); + } finally { + this.isSaving = false; + } + } + + private async $wipeCache(): Promise { + try { + await fsPromises.unlink(WalletApi.FILE_NAME); + } catch (e: any) { + if (e?.code !== 'ENOENT') { + logger.err(`Cannot wipe wallets cache file ${WalletApi.FILE_NAME}. Exception ${JSON.stringify(e)}`); + } + } } public getWallet(wallet: string): Record { @@ -99,6 +178,9 @@ class WalletApi { } wallet.lastPoll = Date.now(); logger.debug(`Synced ${Object.keys(wallet.addresses).length} addresses for wallet ${wallet.name}`); + + // Update cache + await this.$saveCache(); } catch (e) { logger.err(`Error syncing wallet ${wallet.name}: ${(e instanceof Error ? e.message : e)}`); } From 77569a2531c57bbdfcd63e65b0b259d978dfc598 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 31 Mar 2025 07:39:34 +0000 Subject: [PATCH 120/534] fix 404 response for missing wallet --- backend/src/api/services/services-routes.ts | 6 +++++- backend/src/api/services/wallets.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backend/src/api/services/services-routes.ts b/backend/src/api/services/services-routes.ts index 520496249..281bb1602 100644 --- a/backend/src/api/services/services-routes.ts +++ b/backend/src/api/services/services-routes.ts @@ -17,7 +17,11 @@ class ServicesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 5).toUTCString()); const walletId = req.params.walletId; const wallet = await WalletApi.getWallet(walletId); - res.status(200).send(wallet); + if (wallet === null) { + res.status(404).send('No such wallet'); + } else { + res.status(200).send(wallet); + } } catch (e) { handleError(req, res, 500, 'Failed to get wallet'); } diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index 540c093fe..b68a2e3c4 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -118,8 +118,12 @@ class WalletApi { } } - public getWallet(wallet: string): Record { - return this.wallets?.[wallet]?.addresses || {}; + public getWallet(wallet: string): Record | null { + if (wallet in this.wallets) { + return this.wallets?.[wallet]?.addresses || {}; + } else { + return null; + } } // resync wallet addresses from the services backend From 4ec88286bde97f6529f344f1fdf0e3bc8b0f96f8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 31 Mar 2025 07:40:19 +0000 Subject: [PATCH 121/534] handle 404 wallet response --- .../src/app/components/wallet/wallet.component.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index 43cc7ee80..883404231 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute, ParamMap } from '@angular/router'; +import { ActivatedRoute, ParamMap, Router } 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'; @@ -11,6 +11,8 @@ import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { WalletAddress } from '@interfaces/node-api.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { AudioService } from '@app/services/audio.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; + class WalletStats implements ChainStats { addresses: string[]; @@ -134,12 +136,14 @@ export class WalletComponent implements OnInit, OnDestroy { constructor( private route: ActivatedRoute, + private router: Router, private websocketService: WebsocketService, private stateService: StateService, private apiService: ApiService, private electrsApiService: ElectrsApiService, private audioService: AudioService, private seoService: SeoService, + private relativeUrlPipe: RelativeUrlPipe, ) { } ngOnInit(): void { @@ -156,8 +160,11 @@ export class WalletComponent implements OnInit, OnDestroy { switchMap((walletName: string) => this.apiService.getWallet$(walletName).pipe( catchError((err) => { this.error = err; - this.seoService.logSoft404(); console.log(err); + if (err.status === 404) { + this.seoService.logSoft404(); + this.router.navigate([this.relativeUrlPipe.transform('')]); + } return of({}); }) )), From c3052285309da96251baef7159696567e17f5fbb Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:02:52 +0900 Subject: [PATCH 122/534] Revert mempool-ci runners --- .github/workflows/ci.yml | 5 +++++ .github/workflows/docker_update_latest_tag.yml | 2 +- .github/workflows/get_backend_block_height.yml | 2 +- .github/workflows/get_backend_hash.yml | 2 +- .github/workflows/get_image_digest.yml | 2 +- .github/workflows/on-tag.yml | 2 +- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f99778e2..08842cbe9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,7 @@ jobs: flavor: ["dev", "prod"] fail-fast: false runs-on: mempool-ci + runs-on: ubuntu-latest name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: @@ -67,6 +68,7 @@ jobs: cache: name: "Cache assets for builds" runs-on: mempool-ci + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -164,6 +166,7 @@ jobs: flavor: ["dev", "prod"] fail-fast: false runs-on: mempool-ci + runs-on: ubuntu-latest name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }} steps: @@ -247,6 +250,7 @@ jobs: e2e: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" runs-on: mempool-ci + runs-on: ubuntu-latest needs: frontend strategy: fail-fast: false @@ -379,6 +383,7 @@ jobs: validate_docker_json: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" runs-on: mempool-ci + runs-on: ubuntu-latest name: Validate generated backend Docker JSON steps: diff --git a/.github/workflows/docker_update_latest_tag.yml b/.github/workflows/docker_update_latest_tag.yml index c5ba87f58..5d21697d5 100644 --- a/.github/workflows/docker_update_latest_tag.yml +++ b/.github/workflows/docker_update_latest_tag.yml @@ -15,7 +15,7 @@ jobs: service: - frontend - backend - runs-on: mempool-ci + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/get_backend_block_height.yml b/.github/workflows/get_backend_block_height.yml index 73db6107e..ae30188e5 100644 --- a/.github/workflows/get_backend_block_height.yml +++ b/.github/workflows/get_backend_block_height.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] jobs: print-backend-sha: - runs-on: mempool-ci + runs-on: ubuntu-latest name: Get block height steps: - name: Checkout diff --git a/.github/workflows/get_backend_hash.yml b/.github/workflows/get_backend_hash.yml index d63860c5e..0e31735b6 100644 --- a/.github/workflows/get_backend_hash.yml +++ b/.github/workflows/get_backend_hash.yml @@ -4,7 +4,7 @@ on: [workflow_dispatch] jobs: print-backend-sha: - runs-on: mempool-ci + runs-on: ubuntu-latest name: Print backend hashes steps: - name: Checkout diff --git a/.github/workflows/get_image_digest.yml b/.github/workflows/get_image_digest.yml index 3d86c860c..18ad39fde 100644 --- a/.github/workflows/get_image_digest.yml +++ b/.github/workflows/get_image_digest.yml @@ -10,7 +10,7 @@ on: type: string jobs: print-images-sha: - runs-on: mempool-ci + runs-on: ubuntu-latest name: Print digest for images steps: - name: Checkout diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index b02d9ff03..1447ec4ab 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -21,7 +21,7 @@ jobs: service: - frontend - backend - runs-on: mempool-ci + runs-on: ubuntu-latest timeout-minutes: 120 name: Build and push to DockerHub steps: From 7c682d8be949b2ce583b7815a3a5933a9685166f Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:05:52 +0900 Subject: [PATCH 123/534] Add parameterized proxy --- frontend/proxy.conf.parameterized.js | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 frontend/proxy.conf.parameterized.js diff --git a/frontend/proxy.conf.parameterized.js b/frontend/proxy.conf.parameterized.js new file mode 100644 index 000000000..eee9bf1f7 --- /dev/null +++ b/frontend/proxy.conf.parameterized.js @@ -0,0 +1,36 @@ +const fs = require('fs'); + +const PROXY_CONFIG = require('./proxy.conf'); + +const addApiKeyHeader = (proxyReq, req, res) => { + if (process.env.MEMPOOL_CI_API_KEY) { + proxyReq.setHeader('X-Mempool-Auth', process.env.MEMPOOL_CI_API_KEY); + } +}; + +PROXY_CONFIG.forEach((entry) => { + const mempoolHostname = process.env.MEMPOOL_HOSTNAME + ? process.env.MEMPOOL_HOSTNAME + : 'mempool.space'; + + const liquidHostname = process.env.LIQUID_HOSTNAME + ? process.env.LIQUID_HOSTNAME + : 'liquid.network'; + + entry.target = entry.target.replace('mempool.space', mempoolHostname); + entry.target = entry.target.replace('liquid.network', liquidHostname); + + if (entry.onProxyReq) { + const originalProxyReq = entry.onProxyReq; + entry.onProxyReq = (proxyReq, req, res) => { + originalProxyReq(proxyReq, req, res); + if (process.env.MEMPOOL_CI_API_KEY) { + proxyReq.setHeader('X-Mempool-Auth', process.env.MEMPOOL_CI_API_KEY); + } + }; + } else { + entry.onProxyReq = addApiKeyHeader; + } +}); + +module.exports = PROXY_CONFIG; From f56e748c0dcbee65aa34c082ef9ef50ceffa5627 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:10:44 +0900 Subject: [PATCH 124/534] Replace staging with parameterized --- frontend/angular.json | 12 +++--------- frontend/package.json | 12 +++++------- frontend/proxy.conf.staging.js | 12 ------------ 3 files changed, 8 insertions(+), 28 deletions(-) delete mode 100644 frontend/proxy.conf.staging.js diff --git a/frontend/angular.json b/frontend/angular.json index 3aa1cb6a8..c5da6a09a 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -261,20 +261,14 @@ "proxyConfig": "proxy.conf.mixed.js", "verbose": true }, - "staging": { - "proxyConfig": "proxy.conf.js", - "disableHostCheck": true, - "host": "0.0.0.0", - "verbose": true - }, "local-prod": { "proxyConfig": "proxy.conf.js", "disableHostCheck": true, "host": "0.0.0.0", "verbose": false }, - "local-staging": { - "proxyConfig": "proxy.conf.staging.js", + "parameterized": { + "proxyConfig": "proxy.conf.parameterized.js", "disableHostCheck": true, "host": "0.0.0.0", "verbose": false @@ -371,4 +365,4 @@ } } } -} +} \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index b50085a54..8d4ee6e27 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,14 +25,12 @@ "i18n-extract-from-source": "npm run ng -- extract-i18n --out-file ./src/locale/messages.xlf", "i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force", "serve": "npm run generate-config && npm run ng -- serve -c local", - "serve:stg": "npm run generate-config && npm run ng -- serve -c staging", "serve:local-prod": "npm run generate-config && npm run ng -- serve -c local-prod", - "serve:local-staging": "npm run generate-config && npm run ng -- serve -c local-staging", + "serve:parameterized": "npm run generate-config && npm run ng -- serve -c parameterized", "start": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local", + "start:parameterized": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c parameterized", "start:local-esplora": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-esplora", - "start:stg": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c staging", "start:local-prod": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-prod", - "start:local-staging": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-staging", "start:mixed": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c mixed", "build": "npm run generate-config && npm run ng -- build --configuration production --localize && npm run sync-assets-dev && npm run sync-assets && npm run build-mempool.js", "sync-assets": "rsync -av ./src/resources ./dist/mempool/browser && node sync-assets.js 'dist/mempool/browser/resources/'", @@ -58,8 +56,8 @@ "cypress:run:record": "cypress run --record", "cypress:open:ci": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-prod 4200 cypress:open", "cypress:run:ci": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-prod 4200 cypress:run:record", - "cypress:open:ci:staging": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-staging 4200 cypress:open", - "cypress:run:ci:staging": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:local-staging 4200 cypress:run:record" + "cypress:open:ci:parameterized": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:parameterized 4200 cypress:open", + "cypress:run:ci:parameterized": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:parameterized 4200 cypress:run:record" }, "dependencies": { "@angular-devkit/build-angular": "^17.3.1", @@ -123,4 +121,4 @@ "scarfSettings": { "enabled": false } -} +} \ No newline at end of file diff --git a/frontend/proxy.conf.staging.js b/frontend/proxy.conf.staging.js deleted file mode 100644 index 0165bed96..000000000 --- a/frontend/proxy.conf.staging.js +++ /dev/null @@ -1,12 +0,0 @@ -const fs = require('fs'); - -let PROXY_CONFIG = require('./proxy.conf'); - -PROXY_CONFIG.forEach(entry => { - const hostname = process.env.CYPRESS_REROUTE_TESTNET === 'true' ? 'mempool-staging.fra.mempool.space' : 'node201.va1.mempool.space'; - console.log(`e2e tests running against ${hostname}`); - entry.target = entry.target.replace("mempool.space", hostname); - entry.target = entry.target.replace("liquid.network", "liquid-staging.va1.mempool.space"); -}); - -module.exports = PROXY_CONFIG; From 57765e4ee64667c3fff48c7982ee0859c468d4de Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:10:58 +0900 Subject: [PATCH 125/534] Update e2e task with the new target --- .github/workflows/ci.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 08842cbe9..0c603c42a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,6 @@ jobs: node: ["20", "21"] flavor: ["dev", "prod"] fail-fast: false - runs-on: mempool-ci runs-on: ubuntu-latest name: Backend (${{ matrix.flavor }}) - node ${{ matrix.node }} @@ -67,7 +66,6 @@ jobs: cache: name: "Cache assets for builds" - runs-on: mempool-ci runs-on: ubuntu-latest steps: - name: Checkout @@ -165,7 +163,6 @@ jobs: node: ["20", "21"] flavor: ["dev", "prod"] fail-fast: false - runs-on: mempool-ci runs-on: ubuntu-latest name: Frontend (${{ matrix.flavor }}) - node ${{ matrix.node }} @@ -249,7 +246,6 @@ jobs: e2e: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" - runs-on: mempool-ci runs-on: ubuntu-latest needs: frontend strategy: @@ -313,7 +309,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:${{ matrix.module }} - start: npm run start:local-staging + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -338,7 +334,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:${{ matrix.module }} - start: npm run start:local-staging + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -363,7 +359,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:mempool - start: npm run start:local-staging + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -382,7 +378,6 @@ jobs: validate_docker_json: if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" - runs-on: mempool-ci runs-on: ubuntu-latest name: Validate generated backend Docker JSON From 9f6d0a6dcb74ff61a7e695bd2ecdd8e7ac3a6083 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:11:14 +0900 Subject: [PATCH 126/534] Add new parameterized e2e dispatch workflow --- .github/workflows/e2e_parameterized.yml | 154 ++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 .github/workflows/e2e_parameterized.yml diff --git a/.github/workflows/e2e_parameterized.yml b/.github/workflows/e2e_parameterized.yml new file mode 100644 index 000000000..d041a4b9f --- /dev/null +++ b/.github/workflows/e2e_parameterized.yml @@ -0,0 +1,154 @@ +name: 'Parameterized e2e tests' + +on: + workflow_dispatch: + inputs: + mempool_hostname: + description: 'Mempool Hostname' + required: true + default: 'mempool.space' + type: string + liquid_hostname: + description: 'Liquid Hostname' + required: true + default: 'liquid.network' + type: string + +jobs: + e2e: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + module: ["mempool", "liquid", "testnet4"] + + name: E2E tests for ${{ matrix.module }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + path: ${{ matrix.module }} + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 20 + cache: "npm" + cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json + + - name: Restore cached mining pool assets + continue-on-error: true + id: cache-mining-pool-restore + uses: actions/cache/restore@v4 + with: + path: | + mining-pool-assets.zip + key: mining-pool-assets-cache + + - name: Restore cached promo video assets + continue-on-error: true + id: cache-promo-video-restore + uses: actions/cache/restore@v4 + with: + path: | + promo-video-assets.zip + key: promo-video-assets-cache + + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: mining-pool-assets + + - name: Unzip assets before building (src/resources) + run: unzip -o mining-pool-assets.zip -d ${{ matrix.module }}/frontend/src/resources/mining-pools + + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: promo-video-assets + + - name: Unzip assets before building (src/resources) + run: unzip -o promo-video-assets.zip -d ${{ matrix.module }}/frontend/src/resources/promo-video + + # mempool + - name: Chrome browser tests (${{ matrix.module }}) + if: ${{ matrix.module == 'mempool' }} + uses: cypress-io/github-action@v5 + with: + tag: ${{ github.event_name }} + working-directory: ${{ matrix.module }}/frontend + build: npm run config:defaults:${{ matrix.module }} + start: npm run start:ci-parameterized + wait-on: "http://localhost:4200" + wait-on-timeout: 120 + record: true + parallel: true + spec: | + cypress/e2e/mainnet/*.spec.ts + cypress/e2e/signet/*.spec.ts + group: Tests on Chrome (${{ matrix.module }}) + browser: "chrome" + ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" + env: + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} + LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} + + # liquid + - name: Chrome browser tests (${{ matrix.module }}) + if: ${{ matrix.module == 'liquid' }} + uses: cypress-io/github-action@v5 + with: + tag: ${{ github.event_name }} + working-directory: ${{ matrix.module }}/frontend + build: npm run config:defaults:${{ matrix.module }} + start: npm run start:ci-parameterized + wait-on: "http://localhost:4200" + wait-on-timeout: 120 + record: true + parallel: true + spec: | + cypress/e2e/liquid/liquid.spec.ts + cypress/e2e/liquidtestnet/liquidtestnet.spec.ts + group: Tests on Chrome (${{ matrix.module }}) + browser: "chrome" + ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" + env: + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} + LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} + + # testnet + - name: Chrome browser tests (${{ matrix.module }}) + if: ${{ matrix.module == 'testnet4' }} + uses: cypress-io/github-action@v5 + with: + tag: ${{ github.event_name }} + working-directory: ${{ matrix.module }}/frontend + build: npm run config:defaults:mempool + start: npm run start:ci-parameterized + wait-on: "http://localhost:4200" + wait-on-timeout: 120 + record: true + parallel: true + spec: | + cypress/e2e/testnet4/*.spec.ts + group: Tests on Chrome (${{ matrix.module }}) + browser: "chrome" + ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" + env: + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} + LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} + MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} From 860ca9698fbc7115200e7f15a2223ac0f0b4e003 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:47:14 +0900 Subject: [PATCH 127/534] Fix failing RBF test on mobile --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 08a4741b3..70c3a1cb1 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -495,8 +495,8 @@ describe('Mainnet', () => { }); }); - describe('RBF transactions', () => { - it('shows RBF transactions properly (mobile)', () => { + describe.only('RBF transactions', () => { + it('shows RBF transactions properly (mobile - details)', () => { cy.intercept('/api/v1/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f/cached', { fixture: 'mainnet_tx_cached.json' }).as('cached_tx'); @@ -507,7 +507,7 @@ describe('Mainnet', () => { cy.viewport('iphone-xr'); cy.mockMempoolSocket(); - cy.visit('/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f'); + cy.visit('/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f?mode=details'); cy.waitForSkeletonGone(); @@ -525,7 +525,7 @@ describe('Mainnet', () => { } }); - cy.get('.alert-replaced').should('be.visible'); + cy.get('.alert-mempool').should('be.visible'); }); it('shows RBF transactions properly (desktop)', () => { From d57b9ac9a40e4a33b8b8cf1e446731a5632bf036 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 31 Mar 2025 22:56:33 +0900 Subject: [PATCH 128/534] Fix running only one test --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 70c3a1cb1..a011073bd 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -495,7 +495,7 @@ describe('Mainnet', () => { }); }); - describe.only('RBF transactions', () => { + describe('RBF transactions', () => { it('shows RBF transactions properly (mobile - details)', () => { cy.intercept('/api/v1/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f/cached', { fixture: 'mainnet_tx_cached.json' From 6533c19bd16979bbc814ce0ea4ad10ca1129d44b Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Tue, 1 Apr 2025 09:23:52 +0900 Subject: [PATCH 129/534] Add support for running tests against any PR or branch --- .github/workflows/e2e_parameterized.yml | 131 ++++++++++++++++++++++-- 1 file changed, 125 insertions(+), 6 deletions(-) diff --git a/.github/workflows/e2e_parameterized.yml b/.github/workflows/e2e_parameterized.yml index d041a4b9f..da1814b84 100644 --- a/.github/workflows/e2e_parameterized.yml +++ b/.github/workflows/e2e_parameterized.yml @@ -3,6 +3,11 @@ name: 'Parameterized e2e tests' on: workflow_dispatch: inputs: + ref: + description: 'Branch name or Pull Request number (e.g., master or 6102)' + required: true + default: 'master' + type: string mempool_hostname: description: 'Mempool Hostname' required: true @@ -15,8 +20,111 @@ on: type: string jobs: + cache: + name: "Cache assets for builds" + runs-on: ubuntu-latest + steps: + - name: Determine checkout ref + id: determine-ref + run: | + REF_INPUT="${{ github.event.inputs.ref }}" + if [[ "$REF_INPUT" =~ ^[0-9]+$ ]]; then + echo "ref=refs/pull/$REF_INPUT/head" >> $GITHUB_OUTPUT + else + echo "ref=$REF_INPUT" >> $GITHUB_OUTPUT + fi + + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ steps.determine-ref.outputs.ref }} + path: assets + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + registry-url: "https://registry.npmjs.org" + + - name: Install (Prod dependencies only) + run: npm ci --omit=dev --omit=optional + working-directory: assets/frontend + + - name: Restore cached mining pool assets + continue-on-error: true + id: cache-mining-pool-restore + uses: actions/cache/restore@v4 + with: + path: | + mining-pool-assets.zip + key: mining-pool-assets-cache + + - name: Restore promo video assets + continue-on-error: true + id: cache-promo-video-restore + uses: actions/cache/restore@v4 + with: + path: | + promo-video-assets.zip + key: promo-video-assets-cache + + - name: Unzip assets before building (src/resources) + continue-on-error: true + run: unzip -o mining-pool-assets.zip -d assets/frontend/src/resources/mining-pools + + - name: Unzip assets before building (src/resources) + continue-on-error: true + run: unzip -o promo-video-assets.zip -d assets/frontend/src/resources/promo-video + + # - name: Unzip assets before building (dist) + # continue-on-error: true + # run: unzip assets.zip -d assets/frontend/dist/mempool/browser/resources + + - name: Sync-assets + run: npm run sync-assets-dev + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MEMPOOL_CDN: 1 + VERBOSE: 1 + working-directory: assets/frontend + + - name: Zip mining-pool assets + run: zip -jrq mining-pool-assets.zip assets/frontend/src/resources/mining-pools/* + + - name: Zip promo-video assets + run: zip -jrq promo-video-assets.zip assets/frontend/src/resources/promo-video/* + + - name: Upload mining pool assets as artifact + uses: actions/upload-artifact@v4 + with: + name: mining-pool-assets + path: mining-pool-assets.zip + + - name: Upload promo video assets as artifact + uses: actions/upload-artifact@v4 + with: + name: promo-video-assets + path: promo-video-assets.zip + + - name: Save mining pool assets cache + id: cache-mining-pool-save + uses: actions/cache/save@v4 + with: + path: | + mining-pool-assets.zip + key: mining-pool-assets-cache + + - name: Save promo video assets cache + id: cache-promo-video-save + uses: actions/cache/save@v4 + with: + path: | + promo-video-assets.zip + key: promo-video-assets-cache + e2e: runs-on: ubuntu-latest + needs: cache strategy: fail-fast: false matrix: @@ -24,9 +132,20 @@ jobs: name: E2E tests for ${{ matrix.module }} steps: + - name: Determine checkout ref + id: determine-ref + run: | + REF_INPUT="${{ github.event.inputs.ref }}" + if [[ "$REF_INPUT" =~ ^[0-9]+$ ]]; then + echo "ref=refs/pull/$REF_INPUT/head" >> $GITHUB_OUTPUT + else + echo "ref=$REF_INPUT" >> $GITHUB_OUTPUT + fi + - name: Checkout uses: actions/checkout@v3 with: + ref: ${{ steps.determine-ref.outputs.ref }} path: ${{ matrix.module }} - name: Setup node @@ -78,7 +197,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:${{ matrix.module }} - start: npm run start:ci-parameterized + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -90,7 +209,7 @@ jobs: browser: "chrome" ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" env: - COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ref ${{ github.event.inputs.ref }} - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} @@ -106,7 +225,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:${{ matrix.module }} - start: npm run start:ci-parameterized + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -118,7 +237,7 @@ jobs: browser: "chrome" ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" env: - COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ref ${{ github.event.inputs.ref }} - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} @@ -134,7 +253,7 @@ jobs: tag: ${{ github.event_name }} working-directory: ${{ matrix.module }}/frontend build: npm run config:defaults:mempool - start: npm run start:ci-parameterized + start: npm run start:parameterized wait-on: "http://localhost:4200" wait-on-timeout: 120 record: true @@ -145,7 +264,7 @@ jobs: browser: "chrome" ci-build-id: "${{ github.sha }}-${{ github.workflow }}-${{ github.event_name }}" env: - COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} + COMMIT_INFO_MESSAGE: ${{ github.event_name }} (${{ github.sha }}) - ref ${{ github.event.inputs.ref }} - ${{ github.event.inputs.mempool_hostname }} - ${{ github.event.inputs.liquid_hostname }} MEMPOOL_HOSTNAME: ${{ github.event.inputs.mempool_hostname }} LIQUID_HOSTNAME: ${{ github.event.inputs.liquid_hostname }} MEMPOOL_CI_API_KEY: ${{ secrets.MEMPOOL_CI_API_KEY }} From 3500a657a98187ca8a356e2278d7a170340af36d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 1 Apr 2025 06:23:36 +0000 Subject: [PATCH 130/534] misc changes --- .../blockchain/blockchain.component.html | 4 ++-- .../blockchain/blockchain.component.scss | 7 +++++++ .../blockchain/blockchain.component.ts | 19 +++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/components/blockchain/blockchain.component.html b/frontend/src/app/components/blockchain/blockchain.component.html index af3bf52b1..d56a115e5 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.html +++ b/frontend/src/app/components/blockchain/blockchain.component.html @@ -1,4 +1,4 @@ -
    +
    @@ -10,7 +10,7 @@
    - +
    diff --git a/frontend/src/app/components/blockchain/blockchain.component.scss b/frontend/src/app/components/blockchain/blockchain.component.scss index 32225598a..c428874ba 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.scss +++ b/frontend/src/app/components/blockchain/blockchain.component.scss @@ -19,6 +19,13 @@ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE10+/Edge */ user-select: none; /* Standard */ + + + transition: transform 2s; + + &.flipped { + transform: rotate(180deg); + } } .position-container { diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index 2e3224a9c..913fd29a9 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -29,6 +29,8 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { connected: boolean = true; blockDisplayMode: 'size' | 'fees'; + flipped: boolean = false; + dividerOffset: number | null = null; mempoolOffset: number | null = null; positionStyle = { @@ -90,10 +92,14 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { } toggleBlockDisplayMode(): void { - if (this.blockDisplayMode === 'size') this.blockDisplayMode = 'fees'; - else this.blockDisplayMode = 'size'; - this.StorageService.setValue('block-display-mode-preference', this.blockDisplayMode); - this.stateService.blockDisplayMode$.next(this.blockDisplayMode); + if (this.isA1()) { + this.flipped = !this.flipped; + } else { + if (this.blockDisplayMode === 'size') this.blockDisplayMode = 'fees'; + else this.blockDisplayMode = 'size'; + this.StorageService.setValue('block-display-mode-preference', this.blockDisplayMode); + this.stateService.blockDisplayMode$.next(this.blockDisplayMode); + } } onMempoolWidthChange(width): void { @@ -126,6 +132,11 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { } } + isA1(): boolean { + const now = new Date(); + return now.getMonth() === 3 && now.getDate() === 1; + } + onResize(): void { const width = this.containerWidth || window.innerWidth; if (width >= 768) { From 1c9b422db41cea2b095910612b65c55341bc96ee Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 1 Apr 2025 06:42:05 +0000 Subject: [PATCH 131/534] fix pool update retry delay --- backend/src/tasks/pools-updater.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index 38e816d74..1d015cb11 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -98,7 +98,8 @@ class PoolsUpdater { logger.info(`Mining pools-v2.json (${githubSha}) import completed`, this.tag); } catch (e) { - this.lastRun = now - 600; // Try again in 10 minutes + // fast-forward lastRun to 10 minutes before the next scheduled update + this.lastRun = now - (config.MEMPOOL.POOLS_UPDATE_DELAY - 600); logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, this.tag); } } From ab5c49ea7a7469b28b14d713a65f11cf4fd5a494 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 1 Apr 2025 07:34:49 +0000 Subject: [PATCH 132/534] Reset block cache after updating pools --- backend/src/api/pools-parser.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/backend/src/api/pools-parser.ts b/backend/src/api/pools-parser.ts index 2fd55d6c5..2895da5a5 100644 --- a/backend/src/api/pools-parser.ts +++ b/backend/src/api/pools-parser.ts @@ -8,6 +8,7 @@ import mining from './mining/mining'; import transactionUtils from './transaction-utils'; import BlocksRepository from '../repositories/BlocksRepository'; import redisCache from './redis-cache'; +import blocks from './blocks'; class PoolsParser { miningPools: any[] = []; @@ -42,6 +43,8 @@ class PoolsParser { await this.$insertUnknownPool(); let reindexUnknown = false; + let clearCache = false; + for (const pool of this.miningPools) { if (!pool.id) { @@ -78,17 +81,20 @@ class PoolsParser { logger.debug(`Inserting new mining pool ${pool.name}`); await PoolsRepository.$insertNewMiningPool(pool, slug); reindexUnknown = true; + clearCache = true; } else { if (poolDB.name !== pool.name) { // Pool has been renamed const newSlug = pool.name.replace(/[^a-z0-9]/gi, '').toLowerCase(); logger.warn(`Renaming ${poolDB.name} mining pool to ${pool.name}. Slug has been updated. Maybe you want to make a redirection from 'https://mempool.space/mining/pool/${poolDB.slug}' to 'https://mempool.space/mining/pool/${newSlug}`); await PoolsRepository.$renameMiningPool(poolDB.id, newSlug, pool.name); + clearCache = true; } if (poolDB.link !== pool.link) { // Pool link has changed logger.debug(`Updating link for ${pool.name} mining pool`); await PoolsRepository.$updateMiningPoolLink(poolDB.id, pool.link); + clearCache = true; } if (JSON.stringify(pool.addresses) !== poolDB.addresses || JSON.stringify(pool.regexes) !== poolDB.regexes) { @@ -96,6 +102,7 @@ class PoolsParser { logger.notice(`Updating addresses and/or coinbase tags for ${pool.name} mining pool.`); await PoolsRepository.$updateMiningPoolTags(poolDB.id, pool.addresses, pool.regexes); reindexUnknown = true; + clearCache = true; await this.$reindexBlocksForPool(poolDB.id); } } @@ -111,6 +118,19 @@ class PoolsParser { } await this.$reindexBlocksForPool(unknownPool.id); } + + // refresh the in-memory block cache with the reindexed data + if (clearCache) { + for (const block of blocks.getBlocks()) { + const reindexedBlock = await blocks.$indexBlock(block.height); + if (reindexedBlock.id === block.id) { + block.extras.pool = reindexedBlock.extras.pool; + } + } + // update persistent cache with the reindexed data + diskCache.$saveCacheToDisk(); + redisCache.$updateBlocks(blocks.getBlocks()); + } } public matchBlockMiner(scriptsig: string, addresses: string[], pools: PoolTag[]): PoolTag | undefined { From a0946ab046f90fc9d1bf23e00ed87655849efbcd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 1 Apr 2025 08:51:05 +0000 Subject: [PATCH 133/534] more misc changes --- .../blockchain/blockchain.component.html | 2 +- .../blockchain/blockchain.component.scss | 5 +++-- .../blockchain/blockchain.component.ts | 21 +++++++++++++++++-- frontend/src/app/services/state.service.ts | 4 ++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/blockchain/blockchain.component.html b/frontend/src/app/components/blockchain/blockchain.component.html index d56a115e5..6ff92f523 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.html +++ b/frontend/src/app/components/blockchain/blockchain.component.html @@ -1,4 +1,4 @@ -
    +
    diff --git a/frontend/src/app/components/blockchain/blockchain.component.scss b/frontend/src/app/components/blockchain/blockchain.component.scss index c428874ba..4f1d466a4 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.scss +++ b/frontend/src/app/components/blockchain/blockchain.component.scss @@ -21,11 +21,12 @@ user-select: none; /* Standard */ - transition: transform 2s; - &.flipped { transform: rotate(180deg); } + &.ready-to-flip { + transition: transform 2s; + } } .position-container { diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index 913fd29a9..b24ef728d 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -29,7 +29,8 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { connected: boolean = true; blockDisplayMode: 'size' | 'fees'; - flipped: boolean = false; + flipped: boolean = true; + readyToFlip: boolean = false; dividerOffset: number | null = null; mempoolOffset: number | null = null; @@ -42,7 +43,22 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { public stateService: StateService, public StorageService: StorageService, private cd: ChangeDetectorRef, - ) {} + ) { + if (this.StorageService.getValue('ap-flipped') !== null) { + this.flipped = false; + } else { + this.flipped = this.stateService.apFlipped; + if (this.flipped) { + setTimeout(() => { + this.flipped = false; + this.stateService.apFlipped = false; + }, 5000); + } + setTimeout(() => { + this.readyToFlip = true; + }, 500); + } + } ngOnInit(): void { this.onResize(); @@ -94,6 +110,7 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { toggleBlockDisplayMode(): void { if (this.isA1()) { this.flipped = !this.flipped; + this.StorageService.setValue('ap-flipped', this.flipped ? 'true' : 'false'); } else { if (this.blockDisplayMode === 'size') this.blockDisplayMode = 'fees'; else this.blockDisplayMode = 'size'; diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 7f8f81744..b1e8480c8 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -147,6 +147,8 @@ export class StateService { mempoolSequence: number; mempoolBlockState: { block: number, transactions: { [txid: string]: TransactionStripped} }; + apFlipped = false; + backend$ = new BehaviorSubject<'esplora' | 'electrum' | 'none'>('esplora'); networkChanged$ = new ReplaySubject(1); lightningChanged$ = new ReplaySubject(1); @@ -254,6 +256,8 @@ export class StateService { } }); + this.apFlipped = true; + 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 = {}; From 9f5c654b52284b9b584e9b1a5af317b125237950 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 1 Apr 2025 11:31:37 +0000 Subject: [PATCH 134/534] clamp min pool update delay --- backend/src/tasks/pools-updater.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index 1d015cb11..8a1a779a1 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -99,7 +99,7 @@ class PoolsUpdater { } catch (e) { // fast-forward lastRun to 10 minutes before the next scheduled update - this.lastRun = now - (config.MEMPOOL.POOLS_UPDATE_DELAY - 600); + this.lastRun = now - Math.max(config.MEMPOOL.POOLS_UPDATE_DELAY - 600, 600); logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, this.tag); } } From 3dc6089d59ba52b5f76164cc221e2a777fcfd109 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 1 Apr 2025 14:42:32 +0200 Subject: [PATCH 135/534] Revert changes to vin interface --- .../src/app/components/address/address.component.ts | 10 ++++++++-- frontend/src/app/interfaces/electrs.interface.ts | 1 - frontend/src/app/shared/address-utils.ts | 7 ++++--- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index a4fc72f16..032a28ff0 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -284,10 +284,16 @@ export class AddressComponent implements OnInit, OnDestroy { this.isLoadingTransactions = false; let addressVin: Vin[] = []; + let vinIds: string[] = []; for (const tx of this.transactions) { - addressVin = addressVin.concat(tx.vin.map((v, index) => ({ ...v, vinId: `${tx.txid}:${index}` })).filter(v => v.prevout?.scriptpubkey_address === this.address.address)); + tx.vin.forEach((v, index) => { + if (v.prevout?.scriptpubkey_address === this.address.address) { + addressVin.push(v); + vinIds.push(`${tx.txid}:${index}`); + } + }); } - this.addressTypeInfo.processInputs(addressVin); + this.addressTypeInfo.processInputs(addressVin, vinIds); this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.scriptPath.length / 2 > 33; // hack to trigger change detection this.addressTypeInfo = this.addressTypeInfo.clone(); diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index d8effcc6f..aa2a05a2f 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -76,7 +76,6 @@ export interface Vin { issuance?: Issuance; // Custom lazy?: boolean; - vinId?: string; // `txid:index` where txid links to the transaction this input is spent in, and index is the position of this input within this transaction // Ord isInscription?: boolean; } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 4338151e9..bc8e12981 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -152,16 +152,17 @@ export class AddressTypeInfo { return cloned; } - public processInputs(vin: Vin[] = []): void { + public processInputs(vin: Vin[] = [], vinIds: string[] = []): void { // taproot can have multiple script paths if (this.type === 'v1_p2tr') { - for (const v of vin) { + for (let i = 0; i < vin.length; i++) { + const v = vin[i]; if (v.inner_witnessscript_asm) { this.tapscript = true; const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; - this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, v.vinId)); + this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); } } // for single-script types, if we've seen one input we've seen them all From fcdbb25728328dbb16cf9e5440f5b1364b538155 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 1 Apr 2025 14:43:05 +0200 Subject: [PATCH 136/534] TapRoot -> Taproot --- .../taproot-address-scripts.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 6a0ed575c..9d2c99ea5 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -171,7 +171,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { if (depth === 0) { node.symbol = 'none'; node.label = { - formatter: '{pill|TapRoot}', + formatter: '{pill|Taproot}', offset: [0, -5], rich: { pill: { From 2235d6305fc10c332d501eac350fb3aefc0831db Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 2 Apr 2025 00:28:17 +0000 Subject: [PATCH 137/534] Fix loose screws on the blockchain bar --- .../blockchain/blockchain.component.html | 4 +- .../blockchain/blockchain.component.scss | 8 ---- .../blockchain/blockchain.component.ts | 38 +++---------------- frontend/src/app/services/state.service.ts | 4 -- 4 files changed, 7 insertions(+), 47 deletions(-) diff --git a/frontend/src/app/components/blockchain/blockchain.component.html b/frontend/src/app/components/blockchain/blockchain.component.html index 6ff92f523..af3bf52b1 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.html +++ b/frontend/src/app/components/blockchain/blockchain.component.html @@ -1,4 +1,4 @@ -
    +
    @@ -10,7 +10,7 @@
    - +
    diff --git a/frontend/src/app/components/blockchain/blockchain.component.scss b/frontend/src/app/components/blockchain/blockchain.component.scss index 4f1d466a4..32225598a 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.scss +++ b/frontend/src/app/components/blockchain/blockchain.component.scss @@ -19,14 +19,6 @@ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE10+/Edge */ user-select: none; /* Standard */ - - - &.flipped { - transform: rotate(180deg); - } - &.ready-to-flip { - transition: transform 2s; - } } .position-container { diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index b24ef728d..2e3224a9c 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -29,9 +29,6 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { connected: boolean = true; blockDisplayMode: 'size' | 'fees'; - flipped: boolean = true; - readyToFlip: boolean = false; - dividerOffset: number | null = null; mempoolOffset: number | null = null; positionStyle = { @@ -43,22 +40,7 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { public stateService: StateService, public StorageService: StorageService, private cd: ChangeDetectorRef, - ) { - if (this.StorageService.getValue('ap-flipped') !== null) { - this.flipped = false; - } else { - this.flipped = this.stateService.apFlipped; - if (this.flipped) { - setTimeout(() => { - this.flipped = false; - this.stateService.apFlipped = false; - }, 5000); - } - setTimeout(() => { - this.readyToFlip = true; - }, 500); - } - } + ) {} ngOnInit(): void { this.onResize(); @@ -108,15 +90,10 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { } toggleBlockDisplayMode(): void { - if (this.isA1()) { - this.flipped = !this.flipped; - this.StorageService.setValue('ap-flipped', this.flipped ? 'true' : 'false'); - } else { - if (this.blockDisplayMode === 'size') this.blockDisplayMode = 'fees'; - else this.blockDisplayMode = 'size'; - this.StorageService.setValue('block-display-mode-preference', this.blockDisplayMode); - this.stateService.blockDisplayMode$.next(this.blockDisplayMode); - } + if (this.blockDisplayMode === 'size') this.blockDisplayMode = 'fees'; + else this.blockDisplayMode = 'size'; + this.StorageService.setValue('block-display-mode-preference', this.blockDisplayMode); + this.stateService.blockDisplayMode$.next(this.blockDisplayMode); } onMempoolWidthChange(width): void { @@ -149,11 +126,6 @@ export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { } } - isA1(): boolean { - const now = new Date(); - return now.getMonth() === 3 && now.getDate() === 1; - } - onResize(): void { const width = this.containerWidth || window.innerWidth; if (width >= 768) { diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index b1e8480c8..7f8f81744 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -147,8 +147,6 @@ export class StateService { mempoolSequence: number; mempoolBlockState: { block: number, transactions: { [txid: string]: TransactionStripped} }; - apFlipped = false; - backend$ = new BehaviorSubject<'esplora' | 'electrum' | 'none'>('esplora'); networkChanged$ = new ReplaySubject(1); lightningChanged$ = new ReplaySubject(1); @@ -256,8 +254,6 @@ export class StateService { } }); - this.apFlipped = true; - 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 = {}; From c43f436b04c1d7ad1680a149d94b271314e1b941 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:18:12 +0900 Subject: [PATCH 138/534] Add a new WS mocking utility to send fixtures or single messages --- frontend/cypress/support/commands.ts | 5 +++ frontend/cypress/support/index.d.ts | 1 + frontend/cypress/support/websocket.ts | 64 +++++++++++++++++++++++++-- 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/frontend/cypress/support/commands.ts b/frontend/cypress/support/commands.ts index 018f63569..2ce198241 100644 --- a/frontend/cypress/support/commands.ts +++ b/frontend/cypress/support/commands.ts @@ -44,6 +44,7 @@ import { PageIdleDetector } from './PageIdleDetector'; import { mockWebSocket } from './websocket'; +import { mockWebSocketV2 } from './websocket'; /* global Cypress */ const codes = { @@ -72,6 +73,10 @@ Cypress.Commands.add('mockMempoolSocket', () => { mockWebSocket(); }); +Cypress.Commands.add('mockMempoolSocketV2', () => { + mockWebSocketV2(); +}); + Cypress.Commands.add('changeNetwork', (network: "testnet" | "testnet4" | "signet" | "liquid" | "mainnet") => { cy.get('.dropdown-toggle').click().then(() => { cy.get(`a.${network}`).click().then(() => { diff --git a/frontend/cypress/support/index.d.ts b/frontend/cypress/support/index.d.ts index 2c5328301..21ffe6a2d 100644 --- a/frontend/cypress/support/index.d.ts +++ b/frontend/cypress/support/index.d.ts @@ -5,6 +5,7 @@ declare namespace Cypress { waitForSkeletonGone(): Chainable waitForPageIdle(): Chainable mockMempoolSocket(): Chainable + mockMempoolSocketV2(): Chainable changeNetwork(network: "testnet"|"testnet4"|"signet"|"liquid"|"mainnet"): Chainable } } \ No newline at end of file diff --git a/frontend/cypress/support/websocket.ts b/frontend/cypress/support/websocket.ts index 1356ccc76..b067cc6e8 100644 --- a/frontend/cypress/support/websocket.ts +++ b/frontend/cypress/support/websocket.ts @@ -27,6 +27,37 @@ const createMock = (url: string) => { return mocks[url]; }; +export const mockWebSocketV2 = () => { + cy.on('window:before:load', (win) => { + const winWebSocket = win.WebSocket; + cy.stub(win, 'WebSocket').callsFake((url) => { + console.log(url); + if ((new URL(url).pathname.indexOf('/sockjs-node/') !== 0)) { + const { server, websocket } = createMock(url); + + win.mockServer = server; + win.mockServer.on('connection', (socket) => { + win.mockSocket = socket; + }); + + win.mockServer.on('message', (message) => { + console.log(message); + }); + + return websocket; + } else { + return new winWebSocket(url); + } + }); + }); + + cy.on('window:before:unload', () => { + for (const url in mocks) { + cleanupMock(url); + } + }); +}; + export const mockWebSocket = () => { cy.on('window:before:load', (win) => { const winWebSocket = win.WebSocket; @@ -65,6 +96,27 @@ export const mockWebSocket = () => { }); }; +export const receiveWebSocketMessageFromServer = ({ + params +}: { params?: any } = {}) => { + cy.window().then((win) => { + if (params.message) { + console.log('sending message'); + win.mockSocket.send(params.message.contents); + } + + if (params.file) { + cy.readFile(`cypress/fixtures/${params.file.path}`, 'utf-8').then((fixture) => { + console.log('sending payload'); + win.mockSocket.send(JSON.stringify(fixture)); + }); + + } + }); + return; +}; + + export const emitMempoolInfo = ({ params }: { params?: any } = {}) => { @@ -82,16 +134,22 @@ export const emitMempoolInfo = ({ switch (params.command) { case "init": { win.mockSocket.send('{"conversions":{"USD":32365.338815782445}}'); - cy.readFile('cypress/fixtures/mainnet_live2hchart.json', 'ascii').then((fixture) => { + cy.readFile('cypress/fixtures/mainnet_live2hchart.json', 'utf-8').then((fixture) => { win.mockSocket.send(JSON.stringify(fixture)); }); - cy.readFile('cypress/fixtures/mainnet_mempoolInfo.json', 'ascii').then((fixture) => { + cy.readFile('cypress/fixtures/mainnet_mempoolInfo.json', 'utf-8').then((fixture) => { win.mockSocket.send(JSON.stringify(fixture)); }); break; } case "rbfTransaction": { - cy.readFile('cypress/fixtures/mainnet_rbf.json', 'ascii').then((fixture) => { + cy.readFile('cypress/fixtures/mainnet_rbf.json', 'utf-8').then((fixture) => { + win.mockSocket.send(JSON.stringify(fixture)); + }); + break; + } + case 'trackTx': { + cy.readFile('cypress/fixtures/track_tx.json', 'utf-8').then((fixture) => { win.mockSocket.send(JSON.stringify(fixture)); }); break; From 20ef5b328888a5eb858b80674094e047334c96df Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:19:06 +0900 Subject: [PATCH 139/534] Add fixtures for the RBF tx tracker test --- .../details_rbf/api_accelerator_estimate.json | 60 + .../details_rbf/api_block_history.json | 1 + .../details_rbf/api_mining_pools_1w.json | 260 ++++ .../fixtures/details_rbf/tx01_api_cached.json | 55 + .../fixtures/details_rbf/tx01_api_rbf.json | 34 + .../details_rbf/tx01_ws_blocks_01.json | 579 ++++++++ .../tx01_ws_mempool_blocks_01.json | 68 + .../details_rbf/tx01_ws_stratum_jobs.json | 1235 +++++++++++++++++ .../details_rbf/tx01_ws_tx_replaced.json | 5 + .../fixtures/details_rbf/tx02_api_cpfp.json | 9 + .../fixtures/details_rbf/tx02_api_rbf.json | 36 + .../fixtures/details_rbf/tx02_api_tx.json | 38 + .../details_rbf/tx02_api_tx_times.json | 3 + .../fixtures/details_rbf/tx02_ws_block.json | 116 ++ .../tx02_ws_block_confirmation.json | 116 ++ .../tx02_ws_mempool_blocks_01.json | 75 + .../details_rbf/tx02_ws_next_block.json | 75 + .../details_rbf/tx02_ws_tx_position.json | 9 + 18 files changed, 2774 insertions(+) create mode 100644 frontend/cypress/fixtures/details_rbf/api_accelerator_estimate.json create mode 100644 frontend/cypress/fixtures/details_rbf/api_block_history.json create mode 100644 frontend/cypress/fixtures/details_rbf/api_mining_pools_1w.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_api_cached.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_api_rbf.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_ws_blocks_01.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_ws_mempool_blocks_01.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_ws_stratum_jobs.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx01_ws_tx_replaced.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_api_cpfp.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_api_rbf.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_api_tx.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_api_tx_times.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_ws_block.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_ws_block_confirmation.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_ws_mempool_blocks_01.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_ws_next_block.json create mode 100644 frontend/cypress/fixtures/details_rbf/tx02_ws_tx_position.json diff --git a/frontend/cypress/fixtures/details_rbf/api_accelerator_estimate.json b/frontend/cypress/fixtures/details_rbf/api_accelerator_estimate.json new file mode 100644 index 000000000..889c5d763 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/api_accelerator_estimate.json @@ -0,0 +1,60 @@ +{ + "txSummary": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "effectiveVsize": 224, + "effectiveFee": 960, + "ancestorCount": 1 + }, + "cost": 1000, + "targetFeeRate": 3, + "nextBlockFee": 672, + "userBalance": 0, + "mempoolBaseFee": 50000, + "vsizeFee": 0, + "pools": [ + 36, + 102, + 112, + 44, + 4, + 2, + 6, + 94, + 143, + 43, + 105, + 115, + 142, + 111 + ], + "options": [ + { + "fee": 1000 + }, + { + "fee": 2000 + }, + { + "fee": 10000 + } + ], + "hasAccess": false, + "availablePaymentMethods": { + "bitcoin": { + "enabled": true, + "min": 1000, + "max": 10000000 + }, + "applePay": { + "enabled": true, + "min": 10, + "max": 1000 + }, + "googlePay": { + "enabled": true, + "min": 10, + "max": 1000 + } + }, + "unavailable": false +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/api_block_history.json b/frontend/cypress/fixtures/details_rbf/api_block_history.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/api_block_history.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/api_mining_pools_1w.json b/frontend/cypress/fixtures/details_rbf/api_mining_pools_1w.json new file mode 100644 index 000000000..3a678ca02 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/api_mining_pools_1w.json @@ -0,0 +1,260 @@ +{ + "pools": [ + { + "poolId": 112, + "name": "Foundry USA", + "link": "https://foundrydigital.com", + "blockCount": 323, + "rank": 1, + "emptyBlocks": 0, + "slug": "foundryusa", + "avgMatchRate": 99.96, + "avgFeeDelta": "-0.01971455", + "poolUniqueId": 111 + }, + { + "poolId": 45, + "name": "AntPool", + "link": "https://www.antpool.com", + "blockCount": 171, + "rank": 2, + "emptyBlocks": 0, + "slug": "antpool", + "avgMatchRate": 99.99, + "avgFeeDelta": "-0.04227368", + "poolUniqueId": 44 + }, + { + "poolId": 74, + "name": "ViaBTC", + "link": "https://viabtc.com", + "blockCount": 166, + "rank": 3, + "emptyBlocks": 0, + "slug": "viabtc", + "avgMatchRate": 99.99, + "avgFeeDelta": "-0.02530964", + "poolUniqueId": 73 + }, + { + "poolId": 37, + "name": "F2Pool", + "link": "https://www.f2pool.com", + "blockCount": 104, + "rank": 4, + "emptyBlocks": 0, + "slug": "f2pool", + "avgMatchRate": 99.99, + "avgFeeDelta": "-0.03299327", + "poolUniqueId": 36 + }, + { + "poolId": 116, + "name": "MARA Pool", + "link": "https://marapool.com", + "blockCount": 66, + "rank": 5, + "emptyBlocks": 0, + "slug": "marapool", + "avgMatchRate": 99.97, + "avgFeeDelta": "0.02366061", + "poolUniqueId": 115 + }, + { + "poolId": 103, + "name": "SpiderPool", + "link": "https://www.spiderpool.com", + "blockCount": 46, + "rank": 6, + "emptyBlocks": 1, + "slug": "spiderpool", + "avgMatchRate": 97.82, + "avgFeeDelta": "-0.07258913", + "poolUniqueId": 102 + }, + { + "poolId": 142, + "name": "SECPOOL", + "link": "https://www.secpool.com", + "blockCount": 30, + "rank": 7, + "emptyBlocks": 1, + "slug": "secpool", + "avgMatchRate": 96.67, + "avgFeeDelta": "-0.06596000", + "poolUniqueId": 141 + }, + { + "poolId": 106, + "name": "Binance Pool", + "link": "https://pool.binance.com", + "blockCount": 28, + "rank": 8, + "emptyBlocks": 0, + "slug": "binancepool", + "avgMatchRate": 99.99, + "avgFeeDelta": "-0.05834286", + "poolUniqueId": 105 + }, + { + "poolId": 5, + "name": "Luxor", + "link": "https://mining.luxor.tech", + "blockCount": 28, + "rank": 9, + "emptyBlocks": 0, + "slug": "luxor", + "avgMatchRate": 100, + "avgFeeDelta": "-0.05496071", + "poolUniqueId": 4 + }, + { + "poolId": 143, + "name": "OCEAN", + "link": "https://ocean.xyz/", + "blockCount": 12, + "rank": 10, + "emptyBlocks": 0, + "slug": "ocean", + "avgMatchRate": 91.9, + "avgFeeDelta": "-0.14650833", + "poolUniqueId": 142 + }, + { + "poolId": 44, + "name": "Braiins Pool", + "link": "https://braiins.com/pool", + "blockCount": 12, + "rank": 11, + "emptyBlocks": 0, + "slug": "braiinspool", + "avgMatchRate": 100, + "avgFeeDelta": "-0.03553333", + "poolUniqueId": 43 + }, + { + "poolId": 113, + "name": "SBI Crypto", + "link": "https://sbicrypto.com", + "blockCount": 8, + "rank": 12, + "emptyBlocks": 0, + "slug": "sbicrypto", + "avgMatchRate": 98.65, + "avgFeeDelta": "-0.04246250", + "poolUniqueId": 112 + }, + { + "poolId": 152, + "name": "Carbon Negative", + "link": "https://github.com/bitcoin-data/mining-pools/issues/48", + "blockCount": 7, + "rank": 13, + "emptyBlocks": 0, + "slug": "carbonnegative", + "avgMatchRate": 99.75, + "avgFeeDelta": "-0.04407143", + "poolUniqueId": 151 + }, + { + "poolId": 7, + "name": "BTC.com", + "link": "https://pool.btc.com", + "blockCount": 5, + "rank": 14, + "emptyBlocks": 0, + "slug": "btccom", + "avgMatchRate": 99.98, + "avgFeeDelta": "-0.02496000", + "poolUniqueId": 6 + }, + { + "poolId": 162, + "name": "Mining Squared", + "link": "https://pool.bsquared.network/", + "blockCount": 4, + "rank": 15, + "emptyBlocks": 0, + "slug": "miningsquared", + "avgMatchRate": 100, + "avgFeeDelta": "-0.00915000", + "poolUniqueId": 161 + }, + { + "poolId": 95, + "name": "Poolin", + "link": "https://www.poolin.com", + "blockCount": 4, + "rank": 16, + "emptyBlocks": 0, + "slug": "poolin", + "avgMatchRate": 100, + "avgFeeDelta": "-0.26485000", + "poolUniqueId": 94 + }, + { + "poolId": 1, + "name": "Unknown", + "link": "https://learnmeabitcoin.com/technical/coinbase-transaction", + "blockCount": 4, + "rank": 17, + "emptyBlocks": 0, + "slug": "unknown", + "avgMatchRate": 100, + "avgFeeDelta": "-0.06490000", + "poolUniqueId": 0 + }, + { + "poolId": 144, + "name": "WhitePool", + "link": "https://whitebit.com/mining-pool", + "blockCount": 3, + "rank": 18, + "emptyBlocks": 0, + "slug": "whitepool", + "avgMatchRate": 100, + "avgFeeDelta": "-0.01293333", + "poolUniqueId": 143 + }, + { + "poolId": 3, + "name": "ULTIMUSPOOL", + "link": "https://www.ultimuspool.com", + "blockCount": 1, + "rank": 19, + "emptyBlocks": 0, + "slug": "ultimuspool", + "avgMatchRate": 100, + "avgFeeDelta": "-0.16130000", + "poolUniqueId": 2 + }, + { + "poolId": 50, + "name": "Solo CK", + "link": "https://solo.ckpool.org", + "blockCount": 1, + "rank": 20, + "emptyBlocks": 0, + "slug": "solock", + "avgMatchRate": 100, + "avgFeeDelta": "-0.01510000", + "poolUniqueId": 49 + }, + { + "poolId": 158, + "name": "BitFuFuPool", + "link": "https://www.bitfufu.com/pool", + "blockCount": 1, + "rank": 21, + "emptyBlocks": 0, + "slug": "bitfufupool", + "avgMatchRate": 100, + "avgFeeDelta": "-0.01630000", + "poolUniqueId": 157 + } + ], + "blockCount": 1024, + "lastEstimatedHashrate": 786391245138648900000, + "lastEstimatedHashrate3d": 797683179385121300000, + "lastEstimatedHashrate1w": 827836055441520300000 +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_api_cached.json b/frontend/cypress/fixtures/details_rbf/tx01_api_cached.json new file mode 100644 index 000000000..62184cc9d --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_api_cached.json @@ -0,0 +1,55 @@ +{ + "txid": "242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "fb16c141d22a3a7af5e44e7478a8663866c35d554cd85107ec8a99b97e5a72e9", + "vout": 0, + "prevout": { + "scriptpubkey": "76a914099f831c49289c7b9cc07a9a632867ecd51a105a88ac", + "scriptpubkey_asm": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 099f831c49289c7b9cc07a9a632867ecd51a105a OP_EQUALVERIFY OP_CHECKSIG", + "scriptpubkey_type": "p2pkh", + "scriptpubkey_address": "1stAprEZapjCYGUACUcXohQqSHF9MU5Kj", + "value": 50000 + }, + "scriptsig": "483045022100f44a50e894c30b28400933da120b872ff15bd2e66dd034ffbbb925fd054dd60f02206ba477a9da3fae68a9f420f53bc25493270bd987d13b75fef39cf514aea9cdb3014104ea83ffe426ee6b6827029c72fbdcb0a1602829c1fe384637a7d178aa62a6a1e3d7f29250e001ee708a93ca9771f50ee638aaaaef8941c8a7e2bad5494b23e0df", + "scriptsig_asm": "OP_PUSHBYTES_72 3045022100f44a50e894c30b28400933da120b872ff15bd2e66dd034ffbbb925fd054dd60f02206ba477a9da3fae68a9f420f53bc25493270bd987d13b75fef39cf514aea9cdb301 OP_PUSHBYTES_65 04ea83ffe426ee6b6827029c72fbdcb0a1602829c1fe384637a7d178aa62a6a1e3d7f29250e001ee708a93ca9771f50ee638aaaaef8941c8a7e2bad5494b23e0df", + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "5120a2fc5cb445755389eed295ab9d594b0facd3e00840a3e477fa7c025412c53795", + "scriptpubkey_asm": "OP_PUSHNUM_1 OP_PUSHBYTES_32 a2fc5cb445755389eed295ab9d594b0facd3e00840a3e477fa7c025412c53795", + "scriptpubkey_type": "v1_p2tr", + "scriptpubkey_address": "bc1p5t79edz9w4fcnmkjjk4e6k2tp7kd8cqggz37gal60sp9gyk9x72sk4mk0f", + "value": 49394 + } + ], + "size": 233, + "weight": 932, + "sigops": 0, + "fee": 606, + "status": { + "confirmed": false + }, + "order": 701313494, + "vsize": 233, + "adjustedVsize": 233, + "feePerVsize": 2.6008583690987126, + "adjustedFeePerVsize": 2.6008583690987126, + "effectiveFeePerVsize": 2.6008583690987126, + "firstSeen": 1743541407, + "inputs": [], + "cpfpDirty": false, + "ancestors": [], + "descendants": [], + "bestDescendant": null, + "position": { + "block": 0, + "vsize": 318595.5 + }, + "flags": 1099511645193 +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_api_rbf.json b/frontend/cypress/fixtures/details_rbf/tx01_api_rbf.json new file mode 100644 index 000000000..5278f9ffe --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_api_rbf.json @@ -0,0 +1,34 @@ +{ + "replacements": { + "tx": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "fee": 960, + "vsize": 224, + "value": 49040, + "rate": 4.285714285714286, + "time": 1743541726, + "rbf": true, + "fullRbf": false + }, + "time": 1743541726, + "fullRbf": false, + "replaces": [ + { + "tx": { + "txid": "242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29", + "fee": 606, + "vsize": 233, + "value": 49394, + "rate": 2.6008583690987126, + "time": 1743541407, + "rbf": true + }, + "time": 1743541407, + "interval": 319, + "fullRbf": false, + "replaces": [] + } + ] + }, + "replaces": null +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_ws_blocks_01.json b/frontend/cypress/fixtures/details_rbf/tx01_ws_blocks_01.json new file mode 100644 index 000000000..32b6578fc --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_ws_blocks_01.json @@ -0,0 +1,579 @@ +{ + "blocks": [ + { + "id": "0000000000000000000079f5b74b6533abb0b1ece06570d8d157b5bebd1460b4", + "height": 890440, + "version": 559235072, + "timestamp": 1743535677, + "bits": 386038124, + "nonce": 2920325684, + "difficulty": 113757508810854, + "merkle_root": "c793d5fdbfb1ebe99e14a13a6d65370057d311774d33c71da166663b18722474", + "tx_count": 3823, + "size": 1578209, + "weight": 3993461, + "previousblockhash": "000000000000000000020fb2e24425793e17e60e188205dc1694d221790348b2", + "mediantime": 1743532406, + "stale": false, + "extras": { + "reward": 319838750, + "coinbaseRaw": "0348960d082f5669614254432f2cfabe6d6d294719da11c017243828bf32c405341db7f19387fee92c25413c45e114907f9810000000000000001058bf9601429f9fa7a6c160d10d00000000000000", + "orphans": [], + "medianFee": 4, + "feeRange": [ + 3, + 3, + 3.0191082802547773, + 3.980952380952381, + 5, + 10, + 427.748502994012 + ], + "totalFees": 7338750, + "avgFee": 1920, + "avgFeeRate": 7, + "utxoSetChange": 4093, + "avgTxSize": 412.71000000000004, + "totalInputs": 7430, + "totalOutputs": 11523, + "totalOutputAmt": 547553568373, + "segwitTotalTxs": 3432, + "segwitTotalSize": 1467920, + "segwitTotalWeight": 3552413, + "feePercentiles": null, + "virtualSize": 998365.25, + "coinbaseAddress": "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4", + "coinbaseAddresses": [ + "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4" + ], + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 fb37342f6275b13936799def06f2eb4c0f201515 OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "\u0003H–\r\b/ViaBTC/,ú¾mm)G\u0019Ú\u0011À\u0017$8(¿2Ä\u00054\u001d·ñ“‡þé,%Aìg/Foundry USA Pool #dropgold/\u0001S\nEaç\u0002\u0000\u0000\u0000\u0000\u0000", + "header": "00a03220b46014bdbeb557d1d87065e0ecb1b0ab33654bb7f579000000000000000000003ed60f06cec16df4399b5dafa7077036c2eb58cc6a16e6cdca559b9e2f7e4525bb3eec676c790217b7b3c9cb", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 111, + "name": "Foundry USA", + "slug": "foundryusa", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2792968, + "expectedWeight": 3991959, + "similarity": 0.9951416839808291 + } + }, + { + "id": "000000000000000000014845978a876b3d8bf5d489b9d87e88873952b06ddfce", + "height": 890442, + "version": 557981696, + "timestamp": 1743536834, + "bits": 386038124, + "nonce": 470697326, + "difficulty": 113757508810854, + "merkle_root": "5e92e681c1db2797a5b3e5016729059f8b60a256cafb51d835dac2b3964c0db4", + "tx_count": 3566, + "size": 1628328, + "weight": 3993552, + "previousblockhash": "00000000000000000000ef5a27459785ea4c91e05f64adfad306af6dfc0cd19c", + "mediantime": 1743532867, + "stale": false, + "extras": { + "reward": 318057766, + "coinbaseRaw": "034a960d194d696e656420627920416e74506f6f6c204d000201e15e2989fabe6d6dd599e9dfa40be51f1517c8f512c5c3d51c7656182f1df335d34b98ee02c527db080000000000000000004f92b702000000000000", + "orphans": [], + "medianFee": 3.00860164711668, + "feeRange": [ + 1.5174418604651163, + 2.0140845070422535, + 2.492354740061162, + 3, + 4.020942408376963, + 7, + 200 + ], + "totalFees": 5557766, + "avgFee": 1558, + "avgFeeRate": 5, + "utxoSetChange": 1971, + "avgTxSize": 456.48, + "totalInputs": 7938, + "totalOutputs": 9909, + "totalOutputAmt": 900044492230, + "segwitTotalTxs": 3214, + "segwitTotalSize": 1526463, + "segwitTotalWeight": 3586200, + "feePercentiles": null, + "virtualSize": 998388, + "coinbaseAddress": "37jKPSmbEGwgfacCr2nayn1wTaqMAbA94Z", + "coinbaseAddresses": [ + "37jKPSmbEGwgfacCr2nayn1wTaqMAbA94Z", + "39C7fxSzEACPjM78Z7xdPxhf7mKxJwvfMJ" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 42402a28dd61f2718a4b27ae72a4791d5bbdade7 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003J–\r\u0019Mined by AntPool M\u0000\u0002\u0001á^)‰ú¾mmՙéߤ\u000bå\u001f\u0015\u0017Èõ\u0012ÅÃÕ\u001cvV\u0018/\u001dó5ÓK˜î\u0002Å'Û\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000O’·\u0002\u0000\u0000\u0000\u0000\u0000\u0000", + "header": "002042219cd10cfc6daf06d3faad645fe0914cea859745275aef00000000000000000000b40d4c96b3c2da35d851fbca56a2608b9f05296701e5b3a59727dbc181e6925ec242ec676c7902176e450e1c", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 44, + "name": "AntPool", + "slug": "antpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 5764747, + "expectedWeight": 3991786, + "similarity": 0.9029319155137951 + } + }, + { + "id": "000000000000000000026e08b270834273511b353bed30d54706211adc96f5f6", + "height": 890443, + "version": 706666496, + "timestamp": 1743537197, + "bits": 386038124, + "nonce": 321696065, + "difficulty": 113757508810854, + "merkle_root": "3d7574f7eca741fa94b4690868a242e5b286f8a0417ad0275d4ab05893e96350", + "tx_count": 2155, + "size": 1700002, + "weight": 3993715, + "previousblockhash": "000000000000000000014845978a876b3d8bf5d489b9d87e88873952b06ddfce", + "mediantime": 1743533789, + "stale": false, + "extras": { + "reward": 315112344, + "coinbaseRaw": "034b960d21202020204d696e656420627920536563706f6f6c2020202070000b05e388958c01fabe6d6db7ae4bfa7b1294e16e800b4563f1f5ddeb5c0740319eba45600f3f05d2d7272910000000000000000000c2cb7e020000", + "orphans": [], + "medianFee": 1.4360674424569184, + "feeRange": [ + 1, + 1.0135135135135136, + 1.09717868338558, + 2.142857142857143, + 3.009584664536741, + 4.831858407079646, + 196.07843137254903 + ], + "totalFees": 2612344, + "avgFee": 1212, + "avgFeeRate": 2, + "utxoSetChange": -2880, + "avgTxSize": 788.64, + "totalInputs": 9773, + "totalOutputs": 6893, + "totalOutputAmt": 264603969671, + "segwitTotalTxs": 1933, + "segwitTotalSize": 1556223, + "segwitTotalWeight": 3418707, + "feePercentiles": null, + "virtualSize": 998428.75, + "coinbaseAddress": "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "coinbaseAddresses": [ + "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "3Awm3FNpmwrbvAFVThRUFqgpbVuqWisni9" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 8ee90177614ecde53314fd67c46162f315852a07 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003K–\r! Mined by Secpool p\u0000\u000b\u0005㈕Œ\u0001ú¾mm·®Kú{\u0012”án€\u000bEcñõÝë\\\u0007@1žºE`\u000f?\u0005Ò×')\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÂË~\u0002\u0000\u0000", + "header": "00e01e2acedf6db0523987887ed8b989d4f58b3d6b878a974548010000000000000000005063e99358b04a5d27d07a41a0f886b2e542a2680869b494fa41a7ecf774753d2d44ec676c79021741b12c13", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 141, + "name": "SECPOOL", + "slug": "secpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2623934, + "expectedWeight": 3991917, + "similarity": 0.9951244468050102 + } + }, + { + "id": "00000000000000000001b36ec470ae4ec39f5d975f665d6f40e9d35bfa65290d", + "height": 890444, + "version": 671080448, + "timestamp": 1743539347, + "bits": 386038124, + "nonce": 994357124, + "difficulty": 113757508810854, + "merkle_root": "c891d4bf68e22916274b667eb3287d50da2ddd63f8dad892da045cc2ad4a7b21", + "tx_count": 3797, + "size": 1500309, + "weight": 3993525, + "previousblockhash": "000000000000000000026e08b270834273511b353bed30d54706211adc96f5f6", + "mediantime": 1743533986, + "stale": false, + "extras": { + "reward": 318708524, + "coinbaseRaw": "034c960d082f5669614254432f2cfabe6d6d45b7fd7ab53a0914da7dcc9d21fe44f0936f5354169a56df9d5139f07afbc2b41000000000000000106fc0eb03f0ac2e851d18d8d9f85ad70000000000", + "orphans": [], + "medianFee": 4.064775540157046, + "feeRange": [ + 3.014354066985646, + 3.18368700265252, + 3.602836879432624, + 4.231825525040388, + 5.581730769230769, + 10, + 697.7151162790698 + ], + "totalFees": 6208524, + "avgFee": 1635, + "avgFeeRate": 6, + "utxoSetChange": 5755, + "avgTxSize": 395.02, + "totalInputs": 6681, + "totalOutputs": 12436, + "totalOutputAmt": 835839828101, + "segwitTotalTxs": 3351, + "segwitTotalSize": 1354446, + "segwitTotalWeight": 3410181, + "feePercentiles": null, + "virtualSize": 998381.25, + "coinbaseAddress": "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4", + "coinbaseAddresses": [ + "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4" + ], + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 fb37342f6275b13936799def06f2eb4c0f201515 OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "\u0003L–\r\b/ViaBTC/,ú¾mmE·ýzµ:\t\u0014Ú}̝!þDð“oST\u0016šVߝQ9ðzû´\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010oÀë\u0003ð¬.…\u001d\u0018ØÙøZ×\u0000\u0000\u0000\u0000\u0000", + "header": "00e0ff27f6f596dc1a210647d530ed3b351b5173428370b2086e02000000000000000000217b4aadc25c04da92d8daf863dd2dda507d28b37e664b271629e268bfd491c8934cec676c79021784af443b", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 73, + "name": "ViaBTC", + "slug": "viabtc", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 6253024, + "expectedWeight": 3991868, + "similarity": 0.9862862477811569 + } + }, + { + "id": "00000000000000000001402065f940b9475159bdc962c92a66d3c6652ffa338a", + "height": 890445, + "version": 601202688, + "timestamp": 1743539574, + "bits": 386038124, + "nonce": 1647397133, + "difficulty": 113757508810854, + "merkle_root": "61d8294afa8f6bafa4d979a77d187dee5f75a6392f957ea647d96eefbbbc5e9b", + "tx_count": 3579, + "size": 1659862, + "weight": 3993406, + "previousblockhash": "00000000000000000001b36ec470ae4ec39f5d975f665d6f40e9d35bfa65290d", + "mediantime": 1743535677, + "stale": false, + "extras": { + "reward": 315617086, + "coinbaseRaw": "034d960d04764dec672f466f756e6472792055534120506f6f6c202364726f70676f6c642f4fac7c451540000000000000", + "orphans": [], + "medianFee": 2.5565329189526835, + "feeRange": [ + 1.521613832853026, + 2, + 2.2411347517730498, + 3, + 3, + 3.954954954954955, + 162.78343949044586 + ], + "totalFees": 3117086, + "avgFee": 871, + "avgFeeRate": 3, + "utxoSetChange": 1881, + "avgTxSize": 463.65000000000003, + "totalInputs": 7893, + "totalOutputs": 9774, + "totalOutputAmt": 324878597485, + "segwitTotalTxs": 3189, + "segwitTotalSize": 1538741, + "segwitTotalWeight": 3509030, + "feePercentiles": null, + "virtualSize": 998351.5, + "coinbaseAddress": "bc1pp7w6kxnj7lzgm29pmuhezwl0vjdlcrthqukll5gn9xuqfq5n673smy4m63", + "coinbaseAddresses": [ + "bc1pp7w6kxnj7lzgm29pmuhezwl0vjdlcrthqukll5gn9xuqfq5n673smy4m63", + "bc1qwzrryqr3ja8w7hnja2spmkgfdcgvqwp5swz4af4ngsjecfz0w0pqud7k38" + ], + "coinbaseSignature": "OP_PUSHNUM_1 OP_PUSHBYTES_32 0f9dab1a72f7c48da8a1df2f913bef649bfc0d77072dffd11329b8048293d7a3", + "coinbaseSignatureAscii": "\u0003M–\r\u0004vMìg/Foundry USA Pool #dropgold/O¬|E\u0015@\u0000\u0000\u0000\u0000\u0000\u0000", + "header": "00a0d5230d2965fa5bd3e9406f5d665f975d9fc34eae70c46eb3010000000000000000009b5ebcbbef6ed947a67e952f39a6755fee7d187da779d9a4af6b8ffa4a29d861764dec676c7902170d493162", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 111, + "name": "Foundry USA", + "slug": "foundryusa", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 3145370, + "expectedWeight": 3991903, + "similarity": 0.9903353189076812 + } + }, + { + "id": "00000000000000000001fe3d26b02146d0fc2192db06cbc12478d4b347f5306b", + "height": 890446, + "version": 537722880, + "timestamp": 1743541107, + "bits": 386038124, + "nonce": 826569764, + "difficulty": 113757508810854, + "merkle_root": "d9b320d7cb5aace80ca20b934b13b4a272121fbdd59f3aaba690e0326ca2c144", + "tx_count": 3998, + "size": 1541360, + "weight": 3993545, + "previousblockhash": "00000000000000000001402065f940b9475159bdc962c92a66d3c6652ffa338a", + "mediantime": 1743535803, + "stale": false, + "extras": { + "reward": 317976882, + "coinbaseRaw": "034e960d20202020204d696e656420627920536563706f6f6c2020202070001b04fad5fdfefabe6d6d59dd8ebce6e5aab8fb943bbdcede474b6f2d00a395a717970104a6958c17f1ca100000000000000000008089c9350200", + "orphans": [], + "medianFee": 3.3750830641948864, + "feeRange": [ + 2.397163120567376, + 3, + 3, + 3.463647199046484, + 4.49438202247191, + 7.213930348258707, + 476.1904761904762 + ], + "totalFees": 5476882, + "avgFee": 1370, + "avgFeeRate": 5, + "utxoSetChange": 4951, + "avgTxSize": 385.41, + "totalInputs": 7054, + "totalOutputs": 12005, + "totalOutputAmt": 983289729453, + "segwitTotalTxs": 3538, + "segwitTotalSize": 1396505, + "segwitTotalWeight": 3414233, + "feePercentiles": null, + "virtualSize": 998386.25, + "coinbaseAddress": "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "coinbaseAddresses": [ + "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "3Awm3FNpmwrbvAFVThRUFqgpbVuqWisni9" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 8ee90177614ecde53314fd67c46162f315852a07 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003N–\r Mined by Secpool p\u0000\u001b\u0004úÕýþú¾mmYݎ¼æåª¸û”;½ÎÞGKo-\u0000£•§\u0017—\u0001\u0004¦•Œ\u0017ñÊ\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000€‰É5\u0002\u0000", + "header": "00000d208a33fa2f65c6d3662ac962c9bd595147b940f96520400100000000000000000044c1a26c32e090a6ab3a9fd5bd1f1272a2b4134b930ba20ce8ac5acbd720b3d97353ec676c79021724744431", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 141, + "name": "SECPOOL", + "slug": "secpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 5601814, + "expectedWeight": 3991928, + "similarity": 0.9537877497871488 + } + }, + { + "id": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "height": 890447, + "version": 568860672, + "timestamp": 1743541240, + "bits": 386038124, + "nonce": 4008077709, + "difficulty": 113757508810854, + "merkle_root": "8c3b098e4e50b67075a4fc52bf4cd603aaa450c240c18a865c9ddc0f27104f5f", + "tx_count": 1919, + "size": 1747789, + "weight": 3993172, + "previousblockhash": "00000000000000000001fe3d26b02146d0fc2192db06cbc12478d4b347f5306b", + "mediantime": 1743536834, + "stale": false, + "extras": { + "reward": 314435106, + "coinbaseRaw": "034f960d0f2f736c7573682f65000002fba05ef1fabe6d6df8d29032ea6f9ab1debd223651f30887df779c6195869e70a7b787b3a15f4b1710000000000000000000ee5f0c00b20200000000", + "orphans": [], + "medianFee": 1.4653828213500366, + "feeRange": [ + 1.0845070422535212, + 1.2, + 1.51, + 2.0141129032258065, + 2.3893805309734515, + 4.025477707006369, + 300.0065359477124 + ], + "totalFees": 1935106, + "avgFee": 1008, + "avgFeeRate": 1, + "utxoSetChange": -4244, + "avgTxSize": 910.58, + "totalInputs": 9909, + "totalOutputs": 5665, + "totalOutputAmt": 210763861504, + "segwitTotalTxs": 1720, + "segwitTotalSize": 1629450, + "segwitTotalWeight": 3519924, + "feePercentiles": null, + "virtualSize": 998293, + "coinbaseAddress": "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11", + "coinbaseAddresses": [ + "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 1f0cbbec8bc4c945e4e16249b11eee911eded55f OP_EQUAL", + "coinbaseSignatureAscii": "\u0003O–\r\u000f/slush/e\u0000\u0000\u0002û ^ñú¾mmøÒ2êoš±Þ½\"6Qó\b‡ßwœa•†žp§·‡³¡_K\u0017\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000î_\f\u0000²\u0002\u0000\u0000\u0000\u0000", + "header": "0020e8216b30f547b3d47824c1cb06db9221fcd04621b0263dfe010000000000000000005f4f10270fdc9d5c868ac140c250a4aa03d64cbf52fca47570b6504e8e093b8cf853ec676c7902178d69e6ee", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 43, + "name": "Braiins Pool", + "slug": "braiinspool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2059571, + "expectedWeight": 3991720, + "similarity": 0.9149852183486826 + } + } + ], + "mempool-blocks": [ + { + "blockSize": 1779311, + "blockVSize": 997968.5, + "nTx": 2132, + "totalFees": 2902870, + "medianFee": 2.0479263387949875, + "feeRange": [ + 1.0721153846153846, + 1.9980563654033041, + 2.2195704057279237, + 3.009493670886076, + 3.4955223880597015, + 6.0246913580246915, + 218.1818181818182 + ] + }, + { + "blockSize": 1959636, + "blockVSize": 997903.5, + "nTx": 497, + "totalFees": 1093076, + "medianFee": 1.102049424602265, + "feeRange": [ + 1.0401794819498267, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.0761096766260911, + 1.1021605957228275 + ] + }, + { + "blockSize": 1477260, + "blockVSize": 997997.25, + "nTx": 720, + "totalFees": 1016195, + "medianFee": 1.007409072434199, + "feeRange": [ + 1, + 1.0019120458891013, + 1.0040863981319323, + 1.0081019768823594, + 1.018450184501845, + 1.0203327171903882, + 1.0485018498190837 + ] + }, + { + "blockSize": 1021308, + "blockVSize": 431071.5, + "nTx": 823, + "totalFees": 432342, + "medianFee": 0, + "feeRange": [ + 1, + 1, + 1, + 1.0028011204481793, + 1.0042075736325387, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ] +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_ws_mempool_blocks_01.json b/frontend/cypress/fixtures/details_rbf/tx01_ws_mempool_blocks_01.json new file mode 100644 index 000000000..47a685757 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_ws_mempool_blocks_01.json @@ -0,0 +1,68 @@ +{ + "mempool-blocks": [ + { + "blockSize": 1780038, + "blockVSize": 997989.75, + "nTx": 2134, + "totalFees": 2919589, + "medianFee": 2.0479263387949875, + "feeRange": [ + 1.0101010101010102, + 2, + 2.235576923076923, + 3.010452961672474, + 3.5240274599542336, + 6.032085561497326, + 218.1818181818182 + ] + }, + { + "blockSize": 1958446, + "blockVSize": 997996, + "nTx": 503, + "totalFees": 1093277, + "medianFee": 1.102049424602265, + "feeRange": [ + 1.0101010101010102, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.067677314564158, + 1.0761096766260911, + 1.1021605957228275 + ] + }, + { + "blockSize": 1477611, + "blockVSize": 997927.5, + "nTx": 725, + "totalFees": 1016311, + "medianFee": 1.0075971559364956, + "feeRange": [ + 1, + 1.0019334049409236, + 1.0042075736325387, + 1.0081019768823594, + 1.018450184501845, + 1.0203327171903882, + 1.0548148148148149 + ] + }, + { + "blockSize": 1028219, + "blockVSize": 435137, + "nTx": 833, + "totalFees": 436414, + "medianFee": 0, + "feeRange": [ + 1, + 1, + 1, + 1.0028011204481793, + 1.004231311706629, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ] +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_ws_stratum_jobs.json b/frontend/cypress/fixtures/details_rbf/tx01_ws_stratum_jobs.json new file mode 100644 index 000000000..48d2fe01e --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_ws_stratum_jobs.json @@ -0,0 +1,1235 @@ +{ + "stratumJobs": { + "2": { + "jobId": "1743541734_2517178", + "extraNonce": "00004237", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff510350960d142f756c74696d75732f373833e5005202fe934b78fabe6d6d4bec519f2060f58bc5ba10289fbedb1f9456cc864a15f153cbfed624324382181000000000000000", + "coinbase2": "ffffffff05220200000000000017a914332c82217820c32fb9c107b67356cfdc8f8da6a6876271cc120000000017a91472c52c9c71c5f644cf6e712661710503e65e69ad870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f524501ebbaf365b0d5fa072e2b2429db23696291f2c0383d81f61600af32dd72a5ac21aaf1274a3862af6d00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e6", + "cleanJobs": false, + "received": 1743541734950, + "pool": 2, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff510350960d142f756c74696d75732f373833e5005202fe934b78fabe6d6d4bec519f2060f58bc5ba10289fbedb1f9456cc864a15f153cbfed624324382181000000000000000000042370000000000000000ffffffff05220200000000000017a914332c82217820c32fb9c107b67356cfdc8f8da6a6876271cc120000000017a91472c52c9c71c5f644cf6e712661710503e65e69ad870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f524501ebbaf365b0d5fa072e2b2429db23696291f2c0383d81f61600af32dd72a5ac21aaf1274a3862af6d00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541734, + "reward": 315388804, + "scriptsig": "0350960d142f756c74696d75732f373833e5005202fe934b78fabe6d6d4bec519f2060f58bc5ba10289fbedb1f9456cc864a15f153cbfed624324382181000000000000000000042370000000000000000" + }, + "4": { + "jobId": "450915", + "extraNonce": "00", + "extraNonce2Size": 7, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff580350960d1b4d696e6564206279204c75786f72205465636868005702fe933c3bfabe6d6d8ae1255df7029c6f68cd8ea446d227ef3dc39ef1ac7a55085969307c7bfaa736100000000000000000005813", + "coinbase2": "ffffffff05220200000000000017a914bf73ad4cf3a107812bad3deb310611bee49a3c79875173cc120000000017a914056adde53ebc396a1b3b678bb0d3a5c116ff430c870000000000000000266a24aa21a9ed0844cc9ee7cc307219c6002e18930cdde972a552bc8d1eabad7976208a0e1b8000000000000000002f6a2d434f524501a37cf4faa0758b26dca666f3e36d42fa15cc0106f459cc4ca322d298304ff163b2a360d756c5db8400000000000000002b6a2952534b424c4f434b3a1357f52232e7585b34c3e0cd5d433a50aac01937aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "71b686070fe7bdfaf6a8812ab487fd91d15e21c90fcf5d6bafca745e9b474a19", + "802911f2f657223b6cf06eec9b523b005b6bc2bec56b8fb35d777ef275398ba7", + "7a2626e535df0e88542c11e2c939de4d49e29a654da437bdbbf9d4b89ad8cea1", + "c49488289a1335c2bcf24b8661ce01ace0e6c35e0105a116fb55ccf981e46c59", + "8f8908b51423dc8ea13a97524f4159d629754f89c8ddfab140b8c695442215f3", + "48cc791e2e2fd0d16c9bf774967162a333ee2eeeedbace83f9ac5368bbc1dc97", + "8e25b97a71a9121cbec116aae71825cc1f8679687c44ef7dd94d2841244e16d9", + "e5328ff6cc72161b5c5e97152a4544f3900ac0a63abde9564919ffa30e28505d", + "3f12570807f882825eaa97b598308bd27e7f36d8ba79e039d81dcfe6cbf1fdd6", + "6afcf4b7a3fd41e8b6290459722bf83f0aff5a36b2b54e9f4210f9cb8bef51b9", + "1a9bdc30e04b9705106827938046b8485384b584254c2f93afdc50ed42a189b2" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e6", + "cleanJobs": false, + "received": 1743541735146, + "pool": 4, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff580350960d1b4d696e6564206279204c75786f72205465636868005702fe933c3bfabe6d6d8ae1255df7029c6f68cd8ea446d227ef3dc39ef1ac7a55085969307c7bfaa7361000000000000000000058130000000000000000ffffffff05220200000000000017a914bf73ad4cf3a107812bad3deb310611bee49a3c79875173cc120000000017a914056adde53ebc396a1b3b678bb0d3a5c116ff430c870000000000000000266a24aa21a9ed0844cc9ee7cc307219c6002e18930cdde972a552bc8d1eabad7976208a0e1b8000000000000000002f6a2d434f524501a37cf4faa0758b26dca666f3e36d42fa15cc0106f459cc4ca322d298304ff163b2a360d756c5db8400000000000000002b6a2952534b424c4f434b3a1357f52232e7585b34c3e0cd5d433a50aac01937aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541734, + "reward": 315389299, + "scriptsig": "0350960d1b4d696e6564206279204c75786f72205465636868005702fe933c3bfabe6d6d8ae1255df7029c6f68cd8ea446d227ef3dc39ef1ac7a55085969307c7bfaa7361000000000000000000058130000000000000000" + }, + "36": { + "jobId": "B75cp1aWq", + "extraNonce": "00", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff640350960d2cfabe6d6da35ece7974edab96759db21f0953f4eaa2200241771a0976d18c5c6e27c5340a10000000f09f909f092f4632506f6f6c2f6b000000000000000000000000000000000000000000000000000000000000000000000005", + "coinbase2": "0722020000000000001976a914c6740a12d0a7d556f89782bf5faf0e12cf25a63988ac3a4acb12000000001976a91469f2a01f4ff9e6ac24df9062e9828753474b348088ac0000000000000000266a24aa21a9ed534cb114f7fd20c22a47d45e6bb6c5460bf3a9cce404265e0961cfd6c881190700000000000000002f6a2d434f5245017c706ca44a28fdd25761250961276bd61d5aa87be7ec323813c943336c579e238228a8ebd096a7e50000000000000000126a10455853415401051b0f0e0e0b1f1200130000000000000000266a2448617468241c617362765014f47be645944e22747340fba7c5a705548dbae9b4a84e62ff00000000000000002c6a4c2952534b424c4f434b3a81cc66e44e74bd510bfde3b83b286662e6a2e597aa8a53c435370b130070fc91dc608334", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "723847223fbee3db7918859bb384999905cba259070859ec77ebfa329b05065a", + "cd7913bf8e499b13ad83c84b2dcc5de216823ff59e45cc76af8f47570114476e", + "2cec318ccfb9046dd1b929e52e7d131cfbf0499fa0f17470944bd0a39d7392a7", + "98531b18c2ce0bfd02dbc7efc9463a4a891cb30c3dda244ebc17d34a52e6e2b9", + "66a73af7f957129069b86ec454ab2e8ac4399e2f6549d6e0e4367844abc8d546", + "6c30f7579f6b6734d6ce96b86e33d318513bafeee287870a960c5a7081244a0c", + "aac144dd768fb69fb813f0eebdd02afb8b55e00d0a61101cf167ecda07a1bc2b", + "ed81f05edaf48584c328a7d4c1f2de3720c2eaba0fa7aa37e4f0792603c60b67", + "98ce77b30480722596a787892493dfdac342b5c717aa5d2a3a4ca1a4b461321c", + "d1372489dd7304c4c44214da63b071c987ee084440861140fb56d5ea03ba8e39", + "efeeb673f474c3d4724bf2503a0903ff73ff01afabc37ffa694f8c79022d7078" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55cb", + "cleanJobs": false, + "received": 1743541719279, + "pool": 36, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff640350960d2cfabe6d6da35ece7974edab96759db21f0953f4eaa2200241771a0976d18c5c6e27c5340a10000000f09f909f092f4632506f6f6c2f6b0000000000000000000000000000000000000000000000000000000000000000000000050000000000000000000722020000000000001976a914c6740a12d0a7d556f89782bf5faf0e12cf25a63988ac3a4acb12000000001976a91469f2a01f4ff9e6ac24df9062e9828753474b348088ac0000000000000000266a24aa21a9ed534cb114f7fd20c22a47d45e6bb6c5460bf3a9cce404265e0961cfd6c881190700000000000000002f6a2d434f5245017c706ca44a28fdd25761250961276bd61d5aa87be7ec323813c943336c579e238228a8ebd096a7e50000000000000000126a10455853415401051b0f0e0e0b1f1200130000000000000000266a2448617468241c617362765014f47be645944e22747340fba7c5a705548dbae9b4a84e62ff00000000000000002c6a4c2952534b424c4f434b3a81cc66e44e74bd510bfde3b83b286662e6a2e597aa8a53c435370b130070fc91dc608334", + "height": 890448, + "timestamp": 1743541707, + "reward": 315313244, + "scriptsig": "0350960d2cfabe6d6da35ece7974edab96759db21f0953f4eaa2200241771a0976d18c5c6e27c5340a10000000f09f909f092f4632506f6f6c2f6b0000000000000000000000000000000000000000000000000000000000000000000000050000000000" + }, + "43": { + "jobId": "131d", + "extraNonce": "00", + "extraNonce2Size": 6, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4c0350960d0f2f736c7573682f65000303fe9334c4fabe6d6dbb9c929fe497398b9a628aa161b72ed26b10e8ca5f29c485f42b468355043a15100000000000000000004e802e", + "coinbase2": "ffffffff038473cc120000000017a9141f0cbbec8bc4c945e4e16249b11eee911eded55f870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e6", + "cleanJobs": false, + "received": 1743541734908, + "pool": 43, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4c0350960d0f2f736c7573682f65000303fe9334c4fabe6d6dbb9c929fe497398b9a628aa161b72ed26b10e8ca5f29c485f42b468355043a15100000000000000000004e802e00000000000000ffffffff038473cc120000000017a9141f0cbbec8bc4c945e4e16249b11eee911eded55f870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541734, + "reward": 315388804, + "scriptsig": "0350960d0f2f736c7573682f65000303fe9334c4fabe6d6dbb9c929fe497398b9a628aa161b72ed26b10e8ca5f29c485f42b468355043a15100000000000000000004e802e00000000000000" + }, + "44": { + "jobId": "3750742", + "extraNonce": "00002c10", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff580350960d1b4d696e656420627920416e74506f6f6c3830369c001700fe93b694fabe6d6d433177d6fe558d8cee3035bb1b481156f8b411c21bddef7fb8aec740e4617c501000000000000000", + "coinbase2": "ffffffff06220200000000000017a91442402a28dd61f2718a4b27ae72a4791d5bbdade7876271cc120000000017a9145249bdf2c131d43995cff42e8feee293f79297a8870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f52450164db24a662e20bbdf72d1cc6e973dbb2d12897d54e3ecda72cb7961caa4b541b1e322bcfe0b5a0300000000000000000146a12455853415401000d130f0e0e0b041f12001300000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e7", + "cleanJobs": false, + "received": 1743541735750, + "pool": 44, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff580350960d1b4d696e656420627920416e74506f6f6c3830369c001700fe93b694fabe6d6d433177d6fe558d8cee3035bb1b481156f8b411c21bddef7fb8aec740e4617c50100000000000000000002c100000000000000000ffffffff06220200000000000017a91442402a28dd61f2718a4b27ae72a4791d5bbdade7876271cc120000000017a9145249bdf2c131d43995cff42e8feee293f79297a8870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f52450164db24a662e20bbdf72d1cc6e973dbb2d12897d54e3ecda72cb7961caa4b541b1e322bcfe0b5a0300000000000000000146a12455853415401000d130f0e0e0b041f12001300000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541735, + "reward": 315388804, + "scriptsig": "0350960d1b4d696e656420627920416e74506f6f6c3830369c001700fe93b694fabe6d6d433177d6fe558d8cee3035bb1b481156f8b411c21bddef7fb8aec740e4617c50100000000000000000002c100000000000000000" + }, + "49": { + "jobId": "67444bb00005e280", + "extraNonce": "1eecec72", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff350350960d0004d155ec67047a5741090c", + "coinbase2": "0a636b706f6f6c112f736f6c6f2e636b706f6f6c2e6f72672fffffffff03dd276b12000000001976a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac483a60000000000016001451ed61d2f6aa260cc72cdf743e4e436a82c010270000000000000000266a24aa21a9ed6c1f16b33ae5c1c628b53c6011f38866955c8b59448e5aee14f9967c8cb7ab1c00000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "723847223fbee3db7918859bb384999905cba259070859ec77ebfa329b05065a", + "cd7913bf8e499b13ad83c84b2dcc5de216823ff59e45cc76af8f47570114476e", + "2cec318ccfb9046dd1b929e52e7d131cfbf0499fa0f17470944bd0a39d7392a7", + "98531b18c2ce0bfd02dbc7efc9463a4a891cb30c3dda244ebc17d34a52e6e2b9", + "66a73af7f957129069b86ec454ab2e8ac4399e2f6549d6e0e4367844abc8d546", + "6c30f7579f6b6734d6ce96b86e33d318513bafeee287870a960c5a7081244a0c", + "717d5dac15b3253aeec8e1079141760337bebe0101d0b4e4c43384416ca132ad", + "9eba7f7def1ad83bb3d7df151f880fa76c4b4ec3b531a4e0856a1e7437d3d060", + "0558088354e8bf625f19e28e6ec02231d61a31c26f215d2e1253baf0452064bb", + "6c25959fb0244719945408c5da48055f0d9ad30240ebc520c2d81b5df1b0f3d7", + "150163eb46086007fafbef5c2c71faf3f8b4690c338e2d74a966ff2650df63c3" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55d1", + "cleanJobs": false, + "received": 1743541713511, + "pool": 49, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff350350960d0004d155ec67047a5741090c1eecec7200000000000000000a636b706f6f6c112f736f6c6f2e636b706f6f6c2e6f72672fffffffff03dd276b12000000001976a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac483a60000000000016001451ed61d2f6aa260cc72cdf743e4e436a82c010270000000000000000266a24aa21a9ed6c1f16b33ae5c1c628b53c6011f38866955c8b59448e5aee14f9967c8cb7ab1c00000000", + "height": 890448, + "timestamp": 1743541713, + "reward": 315318821, + "scriptsig": "0350960d0004d155ec67047a5741090c1eecec7200000000000000000a636b706f6f6c112f736f6c6f2e636b706f6f6c2e6f72672f" + }, + "73": { + "jobId": "8711", + "extraNonce": "41fade6a", + "extraNonce2Size": 4, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff610350960d1e2f5669614254432f4d696e6564206279206d6f6e6f6e6175746963616c2f2cfabe6d6d0d586d106170cc5c7380e81f3e79c40726b2313bdb6263eedba507d9cdc53bca1000000000000000101187c609caa65f88", + "coinbase2": "ffffffff040388cb12000000001976a914fb37342f6275b13936799def06f2eb4c0f20151588ac00000000000000002b6a2952534b424c4f434b3a280a7381d0ccac30cd6dcfd0beae78f22cb58d6caa8a53c435370b120070fc920000000000000000146a124558534154011508000113021b1a1f1200130000000000000000266a24aa21a9ed10c31ffb387781fdab75b9b2e4994223622049c78f1f81d05a4a421ae178626000000000", + "merkleBranches": [ + "b4efa4f5b9d41f9fc63480038ba7586dac490d08fd738aaa691d49bcbee1dd54", + "97c694c3a659a43a7ed8f7e2ae4d06927a152b348f33e7a51c1b5dd242631e72", + "09350f4bc26ad644fadeec9bea500daadb35bf43f8f39d82a8adb708661a8f18", + "e5f3663e21ccc3f4565529a73b11811dd68abcc9ac701aa494b7b18782eefa23", + "bcdfb143b322e8677b8edb90417a1ec739a6d9eb8efc84e5ba6424e7f3adfc0f", + "b90794158874321306985105e45aa872a9646a5bf683a070d7ca6602450ad8e5", + "26e4fb36ec030a6510c9047120575dca2a8b8760674af4284f5c27e53f03f46b", + "e6a15e522b650f9cebfdd003c0d29f5ca571bf704d63b9aa627ce915acb229f7", + "392d3e593f80e9180a3bce84ebaa044d5406cad39897c78e58e66ca59e7499c8", + "ce8409542b60ed5ca9c567b89fa9a7c2e5e8e2bbf2b42b0ce8edb0836a7a2e82", + "0e8201e0367364ed40263747547d3a0c26926d2b94799b414c22a25c6fc04d43", + "33e95cd9da59d9e33e239b9b4e647a2da98f36ef6a137f40ba428782bb1c4021" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55d7", + "cleanJobs": false, + "received": 1743541719896, + "pool": 73, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff610350960d1e2f5669614254432f4d696e6564206279206d6f6e6f6e6175746963616c2f2cfabe6d6d0d586d106170cc5c7380e81f3e79c40726b2313bdb6263eedba507d9cdc53bca1000000000000000101187c609caa65f8841fade6a00000000ffffffff040388cb12000000001976a914fb37342f6275b13936799def06f2eb4c0f20151588ac00000000000000002b6a2952534b424c4f434b3a280a7381d0ccac30cd6dcfd0beae78f22cb58d6caa8a53c435370b120070fc920000000000000000146a124558534154011508000113021b1a1f1200130000000000000000266a24aa21a9ed10c31ffb387781fdab75b9b2e4994223622049c78f1f81d05a4a421ae178626000000000", + "height": 890448, + "timestamp": 1743541719, + "reward": 315328515, + "scriptsig": "0350960d1e2f5669614254432f4d696e6564206279206d6f6e6f6e6175746963616c2f2cfabe6d6d0d586d106170cc5c7380e81f3e79c40726b2313bdb6263eedba507d9cdc53bca1000000000000000101187c609caa65f8841fade6a00000000" + }, + "94": { + "jobId": "1186343", + "extraNonce": "0000776f", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff570350960d1a2f706f6f6c696e2e636f6d2f66702f3936369c01b704fe93ba97fabe6d6d89255a8f9c17d3a3dc753a3e2b2eb55a116c1d7280bcf4b4f76a0af1f2e12ce31000000000000000", + "coinbase2": "ffffffff038473cc120000000017a9141366dca425687186b9b54e27e4ed48163b5beb80870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e7", + "cleanJobs": false, + "received": 1743541735127, + "pool": 94, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff570350960d1a2f706f6f6c696e2e636f6d2f66702f3936369c01b704fe93ba97fabe6d6d89255a8f9c17d3a3dc753a3e2b2eb55a116c1d7280bcf4b4f76a0af1f2e12ce310000000000000000000776f0000000000000000ffffffff038473cc120000000017a9141366dca425687186b9b54e27e4ed48163b5beb80870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541735, + "reward": 315388804, + "scriptsig": "0350960d1a2f706f6f6c696e2e636f6d2f66702f3936369c01b704fe93ba97fabe6d6d89255a8f9c17d3a3dc753a3e2b2eb55a116c1d7280bcf4b4f76a0af1f2e12ce310000000000000000000776f0000000000000000" + }, + "102": { + "jobId": "33", + "extraNonce": "04264b21", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff570350960d04d655ec67537069646572506f6f6c2f7573383838382ffabe6d6d013135a66fcdf604440c12e28ffb6f448d1d7b633d16737217081646c41912270100000000000000b286b3fc", + "coinbase2": "ffffffff04b55dcb12000000001976a914717a4c9074577a05af94271c32b249d298a22d9888ac0000000000000000266a24aa21a9eded8df9e053ff66fe09268a9df4e369d60a48437a012a1b157e143bb967379cab00000000000000002f6a2d434f52450164db24a662e20bbdf72d1cc6e973dbb2d12897d596a6689031f48a857d344e1a42fdb272bb15d6210000000000000000126a10455853415401120f080304111f12001300000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "723847223fbee3db7918859bb384999905cba259070859ec77ebfa329b05065a", + "cd7913bf8e499b13ad83c84b2dcc5de216823ff59e45cc76af8f47570114476e", + "2cec318ccfb9046dd1b929e52e7d131cfbf0499fa0f17470944bd0a39d7392a7", + "98531b18c2ce0bfd02dbc7efc9463a4a891cb30c3dda244ebc17d34a52e6e2b9", + "66a73af7f957129069b86ec454ab2e8ac4399e2f6549d6e0e4367844abc8d546", + "6c30f7579f6b6734d6ce96b86e33d318513bafeee287870a960c5a7081244a0c", + "717d5dac15b3253aeec8e1079141760337bebe0101d0b4e4c43384416ca132ad", + "9eba7f7def1ad83bb3d7df151f880fa76c4b4ec3b531a4e0856a1e7437d3d060", + "5fb573157a34ed041274de444f9dd86e210189cf325bdbde44a92edded8f1b90", + "1e77c2e67bf442dd78a2e078fe9b7bb1bece599bf7e77e2086e5d0659afedf9e", + "e6c75e3d1859a1d8d6a10ac5fe990969202fa37d0715c7ca50c2159e3b3a463e" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55ce", + "cleanJobs": false, + "received": 1743541719031, + "pool": 102, + "coinbase": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff570350960d04d655ec67537069646572506f6f6c2f7573383838382ffabe6d6d013135a66fcdf604440c12e28ffb6f448d1d7b633d16737217081646c41912270100000000000000b286b3fc04264b210000000000000000ffffffff04b55dcb12000000001976a914717a4c9074577a05af94271c32b249d298a22d9888ac0000000000000000266a24aa21a9eded8df9e053ff66fe09268a9df4e369d60a48437a012a1b157e143bb967379cab00000000000000002f6a2d434f52450164db24a662e20bbdf72d1cc6e973dbb2d12897d596a6689031f48a857d344e1a42fdb272bb15d6210000000000000000126a10455853415401120f080304111f12001300000000", + "height": 890448, + "timestamp": 1743541710, + "reward": 315317685, + "scriptsig": "0350960d04d655ec67537069646572506f6f6c2f7573383838382ffabe6d6d013135a66fcdf604440c12e28ffb6f448d1d7b633d16737217081646c41912270100000000000000b286b3fc04264b210000000000000000" + }, + "105": { + "jobId": "4287955", + "extraNonce": "0000e9a5", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff500350960d1362696e616e63652f3832319c001606fe93bd58fabe6d6d2cbf0bfed0a1d41f829160053963a92e7a2c44942646e992955ce00fd53f62991000000000000000", + "coinbase2": "ffffffff05220200000000000017a914265ae1340f5d442d099ffc27b443ffdba4bc0346876271cc120000000017a9149e3e8a50d9acb3ac7649625432e2207c25e0faf8870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f5245012d058b58dcf4b0db11168c62d3109f6e02710b02221456a6c24c9891680d295eb6bc57c6fb68e8f100000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e7", + "cleanJobs": false, + "received": 1743541735177, + "pool": 105, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff500350960d1362696e616e63652f3832319c001606fe93bd58fabe6d6d2cbf0bfed0a1d41f829160053963a92e7a2c44942646e992955ce00fd53f629910000000000000000000e9a50000000000000000ffffffff05220200000000000017a914265ae1340f5d442d099ffc27b443ffdba4bc0346876271cc120000000017a9149e3e8a50d9acb3ac7649625432e2207c25e0faf8870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f5245012d058b58dcf4b0db11168c62d3109f6e02710b02221456a6c24c9891680d295eb6bc57c6fb68e8f100000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541735, + "reward": 315388804, + "scriptsig": "0350960d1362696e616e63652f3832319c001606fe93bd58fabe6d6d2cbf0bfed0a1d41f829160053963a92e7a2c44942646e992955ce00fd53f629910000000000000000000e9a50000000000000000" + }, + "111": { + "jobId": "7", + "extraNonce": "31a044e7", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff310350960d04e155ec672f466f756e6472792055534120506f6f6c202364726f70676f6c642f", + "coinbase2": "ffffffff0522020000000000002251200f9dab1a72f7c48da8a1df2f913bef649bfc0d77072dffd11329b8048293d7a37f28cc12000000002200207086320071974eef5e72eaa01dd9096e10c0383483855ea6b344259c244f73c20000000000000000266a24aa21a9eda9d49baa733153f684d3e885e731818571f650adfef974d99fe1e11b69af0bc600000000000000002f6a2d434f524501359b5fbc5b294e953dbec5cbb769e2186bb30e56e6d18fda214e5b9f350ffc7b6cf3058b9026e76500000000000000002b6a2952534b424c4f434b3aaadde8fc40282f7f5a2c02a16700e42ad9f6bc5aaa8a53c435370b120070fc9200000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "470ea829e1e3085254952441894afcb97582e5675fbb35c226edf79a226890d5", + "09a4875a0b37d78e9643154473bb974b2eba5c800e3cd58c99adfb196f383358", + "2cec318ccfb9046dd1b929e52e7d131cfbf0499fa0f17470944bd0a39d7392a7", + "98531b18c2ce0bfd02dbc7efc9463a4a891cb30c3dda244ebc17d34a52e6e2b9", + "66a73af7f957129069b86ec454ab2e8ac4399e2f6549d6e0e4367844abc8d546", + "2af55ecd2164a88f5df8c3de727633690dabb2de4b61827ac86adcd927cd3e24", + "8601c35a421ac857f22a1ea05b53f003771aaaaf1e65bea339bdc80a9986e671", + "230d09f9ee198e35e1b1be1de2f87acf1a1e73690d680b85ba96bd21790e8766", + "8f4cee6b0fc9bca8608134c4a93116cf4de4ab753863219201cd20ff06b18d1e", + "4de04f813d0c4fbd5b4fb79e490f76ba4da31391d25f0447f1e9eccc935c9fe4", + "c3de6f84d58eeb5277be653e241331dddd19d056ce00ff7d3d9ecdefadfa9067" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e1", + "cleanJobs": false, + "received": 1743541729815, + "pool": 111, + "coinbase": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff310350960d04e155ec672f466f756e6472792055534120506f6f6c202364726f70676f6c642f31a044e70000000000000000ffffffff0522020000000000002251200f9dab1a72f7c48da8a1df2f913bef649bfc0d77072dffd11329b8048293d7a37f28cc12000000002200207086320071974eef5e72eaa01dd9096e10c0383483855ea6b344259c244f73c20000000000000000266a24aa21a9eda9d49baa733153f684d3e885e731818571f650adfef974d99fe1e11b69af0bc600000000000000002f6a2d434f524501359b5fbc5b294e953dbec5cbb769e2186bb30e56e6d18fda214e5b9f350ffc7b6cf3058b9026e76500000000000000002b6a2952534b424c4f434b3aaadde8fc40282f7f5a2c02a16700e42ad9f6bc5aaa8a53c435370b120070fc9200000000", + "height": 890448, + "timestamp": 1743541729, + "reward": 315370145, + "scriptsig": "0350960d04e155ec672f466f756e6472792055534120506f6f6c202364726f70676f6c642f31a044e70000000000000000" + }, + "112": { + "jobId": "12", + "extraNonce": "050300c0", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff290350960d04db55ec672f53424943727970746f2e636f6d20506f6f6c2f", + "coinbase2": "ffffffff02ffc8cb1200000000160014cab30e9b367d646f326ace7fcaf3c9ce4afc37530000000000000000266a24aa21a9edd0dd8d14ec5a97c6fd3de15f02c86d889e932e0262807795fa7c127e5a8fa0be00000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "b41e3afa7672a36d6a462612f3bdc9ee8000388471b29ba1d187135b435f3efa", + "4236249ae2883af9d68c5570f893aa808a2a15d61ea654444cebfb9b3ba2c598", + "2cec318ccfb9046dd1b929e52e7d131cfbf0499fa0f17470944bd0a39d7392a7", + "98531b18c2ce0bfd02dbc7efc9463a4a891cb30c3dda244ebc17d34a52e6e2b9", + "66a73af7f957129069b86ec454ab2e8ac4399e2f6549d6e0e4367844abc8d546", + "4b5b7ee5fe7813f0e1ae5d1265215062d449d5c50b5edede2816274216e88a8d", + "6624f27663e2330c010fe68f5f397ebef70a1f6188ccb104e9eff97a9e48bb02", + "b94d8d0e4cc4b8b62bd4f4d70fc4497f85b05280b43e0b5dc399cc8778a1074a", + "a97d374c628f07cc5283b577558c3c0e3f2f3c8dac8df6ccdea7cf26b6776fa5", + "190f5f1bc8535d731fd095dd8e97ec3c33facdbce8614ca654017f3baf84a3fe", + "102b7769fe8b53ca163151eb461c767d331c465d95056f556e38a07298e6046a" + ], + "version": "20000004", + "bits": "1702796c", + "time": "67ec55db", + "cleanJobs": false, + "received": 1743541728640, + "pool": 112, + "coinbase": "02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff290350960d04db55ec672f53424943727970746f2e636f6d20506f6f6c2f050300c00000000000000000ffffffff02ffc8cb1200000000160014cab30e9b367d646f326ace7fcaf3c9ce4afc37530000000000000000266a24aa21a9edd0dd8d14ec5a97c6fd3de15f02c86d889e932e0262807795fa7c127e5a8fa0be00000000", + "height": 890448, + "timestamp": 1743541723, + "reward": 315345151, + "scriptsig": "0350960d04db55ec672f53424943727970746f2e636f6d20506f6f6c2f050300c00000000000000000" + }, + "141": { + "jobId": "1832214", + "extraNonce": "0000ac40", + "extraNonce2Size": 4, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff510350960d184d696e656420627920536563506f6f6c58007904fe939454fabe6d6d2e07daf9ae89d5bfcdb87dd64455e7357ca9fb3708a2cf08ca8f30a38142a68e1000000000000000", + "coinbase2": "ffffffff05220200000000000017a9148ee90177614ecde53314fd67c46162f315852a07875173cc120000000017a9146582f2551e2a47e1ae8b03fb666401ed7c4552ef870000000000000000266a24aa21a9ed0844cc9ee7cc307219c6002e18930cdde972a552bc8d1eabad7976208a0e1b8000000000000000002f6a2d434f524501a21cbd3caa4fe89bccd1d716c92ce4533e4d4733942c01262fa046fdb8ba0dfce3753405c74aed0e00000000000000002b6a2952534b424c4f434b3a0374e206447243d32da96205942c62a298fddbd7aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "71b686070fe7bdfaf6a8812ab487fd91d15e21c90fcf5d6bafca745e9b474a19", + "802911f2f657223b6cf06eec9b523b005b6bc2bec56b8fb35d777ef275398ba7", + "7a2626e535df0e88542c11e2c939de4d49e29a654da437bdbbf9d4b89ad8cea1", + "c49488289a1335c2bcf24b8661ce01ace0e6c35e0105a116fb55ccf981e46c59", + "8f8908b51423dc8ea13a97524f4159d629754f89c8ddfab140b8c695442215f3", + "48cc791e2e2fd0d16c9bf774967162a333ee2eeeedbace83f9ac5368bbc1dc97", + "8e25b97a71a9121cbec116aae71825cc1f8679687c44ef7dd94d2841244e16d9", + "e5328ff6cc72161b5c5e97152a4544f3900ac0a63abde9564919ffa30e28505d", + "3f12570807f882825eaa97b598308bd27e7f36d8ba79e039d81dcfe6cbf1fdd6", + "6afcf4b7a3fd41e8b6290459722bf83f0aff5a36b2b54e9f4210f9cb8bef51b9", + "1a9bdc30e04b9705106827938046b8485384b584254c2f93afdc50ed42a189b2" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e6", + "cleanJobs": false, + "received": 1743541735015, + "pool": 141, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff510350960d184d696e656420627920536563506f6f6c58007904fe939454fabe6d6d2e07daf9ae89d5bfcdb87dd64455e7357ca9fb3708a2cf08ca8f30a38142a68e10000000000000000000ac4000000000ffffffff05220200000000000017a9148ee90177614ecde53314fd67c46162f315852a07875173cc120000000017a9146582f2551e2a47e1ae8b03fb666401ed7c4552ef870000000000000000266a24aa21a9ed0844cc9ee7cc307219c6002e18930cdde972a552bc8d1eabad7976208a0e1b8000000000000000002f6a2d434f524501a21cbd3caa4fe89bccd1d716c92ce4533e4d4733942c01262fa046fdb8ba0dfce3753405c74aed0e00000000000000002b6a2952534b424c4f434b3a0374e206447243d32da96205942c62a298fddbd7aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541734, + "reward": 315389299, + "scriptsig": "0350960d184d696e656420627920536563506f6f6c58007904fe939454fabe6d6d2e07daf9ae89d5bfcdb87dd64455e7357ca9fb3708a2cf08ca8f30a38142a68e10000000000000000000ac4000000000" + }, + "142": { + "jobId": "67ec55c62cc0f502", + "extraNonce": "b10cf017", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1e0350960d163c204f4345414e2e58595a203e0f0f30304f43423400024087ffffffff140000000000000000166a144f4342313fd6fdce13000000290000002c029c30562b26000000000016001472fb714ecb210311655a3da22729ff8626bdea590000000000000000106a0e1a27", + "coinbase2": "f65ccf020000000017a9142b636a84e5b12177cd49c687b5a1ebd07fb83fbf8783c76e0200000000220020ac11a29a5721e9602e396acd7e5216c9196b7dbb14cf573921c46e6fea38ac09d6632e020000000017a91449b58fb476449dab3a2e175fe2c1f0d753a33e92878b8ad9010000000017a914cc888b5846746a5a7f449eea90082feaa09b9bf387833cbe01000000001600146983f7fe983e96dc5b43677fb14822a075596364b136ae0100000000220020dc406857cac1b9d3f53c6986acb78e7774c604281076d10d3fc8e873e18df6d0663e6e0100000000160014d192719c5be868068f023b9383b3cbecb6afbb1639205300000000001976a91412c00ad1271bd4c91e4f8ff11e738c285181399d88ac49844e000000000017a9141ef31e9bc9ccb532b8c01950727990cca190656a877aa148000000000016001404afd9f6e36ba7cadb62133c458a5318f41a33de731b42000000000016001415c0899a887e36f6620619b621855d40b41cbf838b5a3b0000000000220020e65791d3c340710f7aebf117d1f38e1c5383c1df0345a2082e8ebff945e9994646d83a00000000001600140345e587cb42c201c30e505ea9f6f5fb935876ac5df731000000000017a914278dadd16d1314122e4dde67ff9152a61c3a9f4787254f3000000000001600146d095474bec41ccc8ad40f94c74dd25b79b83579e85b7e020000000017a914413b5901fe4e591c95405fd446b5b002da575bf0870000000000000000266a24aa21a9ed2a3f54b40a557c2884545b770a050154a46b5dc132eec3604f01714f413b32a300000000", + "merkleBranches": [ + "2b797d78bf7de288eccd666e7b81bf04bc96beb0672b6ece12a8e66c8ab3e989", + "81890975bdb859a5c5527a40a7354d0d60b133fa4eaef69f1738ece447714e2c", + "a7fe518c62a02f13cc9e18d4622af75b5fcd4ebad10f129ea0e9eee165cae6b5", + "626773fea3f749684748ec54e167fceb58e3520cbdcf7926717ab7d3b481a2f1", + "de27b0f244aeed874d5b8e03730e7c386905016563058919a476a7efa0414921", + "52903b24bb6d22b7df633c6a426d014cab6c592069043d51ec4b9a910bb98c3e", + "0834ec8e29e9cea5ff2b05cea6f5ee6ce71088569a44fac069c94f777366e806", + "f792f333b3687ca868e80449265720091bcc29a8bd986b5e5d35a297986f9ea2", + "6ea6eca3a29cf603146043e1e5d6bb20e0460dbc72157bedfe585bf38c7e6c56", + "36fe42124e6a5e5250af65cc12e6d7b6370793e559b5fc76b7a46760a83396d1", + "f1c2b5b11af512e743b9c9f219192dc82b8826760b4678683ea16303e2b65508" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55c5", + "cleanJobs": false, + "received": 1743541714701, + "pool": 142, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1e0350960d163c204f4345414e2e58595a203e0f0f30304f43423400024087ffffffff140000000000000000166a144f4342313fd6fdce13000000290000002c029c30562b26000000000016001472fb714ecb210311655a3da22729ff8626bdea590000000000000000106a0e1a27b10cf0170000000000000000f65ccf020000000017a9142b636a84e5b12177cd49c687b5a1ebd07fb83fbf8783c76e0200000000220020ac11a29a5721e9602e396acd7e5216c9196b7dbb14cf573921c46e6fea38ac09d6632e020000000017a91449b58fb476449dab3a2e175fe2c1f0d753a33e92878b8ad9010000000017a914cc888b5846746a5a7f449eea90082feaa09b9bf387833cbe01000000001600146983f7fe983e96dc5b43677fb14822a075596364b136ae0100000000220020dc406857cac1b9d3f53c6986acb78e7774c604281076d10d3fc8e873e18df6d0663e6e0100000000160014d192719c5be868068f023b9383b3cbecb6afbb1639205300000000001976a91412c00ad1271bd4c91e4f8ff11e738c285181399d88ac49844e000000000017a9141ef31e9bc9ccb532b8c01950727990cca190656a877aa148000000000016001404afd9f6e36ba7cadb62133c458a5318f41a33de731b42000000000016001415c0899a887e36f6620619b621855d40b41cbf838b5a3b0000000000220020e65791d3c340710f7aebf117d1f38e1c5383c1df0345a2082e8ebff945e9994646d83a00000000001600140345e587cb42c201c30e505ea9f6f5fb935876ac5df731000000000017a914278dadd16d1314122e4dde67ff9152a61c3a9f4787254f3000000000001600146d095474bec41ccc8ad40f94c74dd25b79b83579e85b7e020000000017a914413b5901fe4e591c95405fd446b5b002da575bf0870000000000000000266a24aa21a9ed2a3f54b40a557c2884545b770a050154a46b5dc132eec3604f01714f413b32a300000000", + "height": 890448, + "timestamp": 1743541701, + "reward": 315238004, + "scriptsig": "0350960d163c204f4345414e2e58595a203e0f0f30304f43423400024087" + }, + "161": { + "jobId": "1611979", + "extraNonce": "000002dc", + "extraNonce2Size": 8, + "prevHash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "coinbase1": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4f0350960d122f62737175617265642fe5006405fe934bb9fabe6d6d2db144ad7b2eed39c89a2cde9f88f06d9082613911584463126673a700303e881000000000000000", + "coinbase2": "ffffffff05220200000000000017a9141bd79ae4d7811daea94bd25db93761b10fecccd7876271cc120000000017a9146547a37cae8db12fd4c8f191f69d4a52cfa886fa870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f524501307f36ff0aff7000ebd4eea1e8e9bbbfa0e1134cb203d7822f404faca98985eb083e8fd9e16ad64700000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "merkleBranches": [ + "15992cde4826516b7dda391bcec363f8da4f6f335199ec76550b535d667c6bcc", + "4703e3571e20a0fa02766ca895c2043bd1c16364b4163a5d7fe3b669fa47b371", + "1d3822d7192f4c8978ca54d5e3b460ab420907199ba2d751ca682b76b9d8e030", + "55b47a1a7ab09d05ea95e4c36b2ece4f441f1787b6548656a67c93850bad28ca", + "1a231983cfb2837a358b85d7bba94851eeedb3f1af915a67165c49ca36c4ea42", + "1ef6e6152101ed2948ef74ebd6d62959f6b21e5c8c404def4faf88976a999c12", + "d28d9eb88badf7d180885592f79da466d0db6dbfd50b440d1c85a2c9ff1b8f01", + "eddef6dd40e0ed35c83129b484f4848021d781cc05da764df8bac3bc82745d12", + "b62ac40bb764914198729c39526751adc6bb047d3f0990ca742c863028a201da", + "7ec1b0edb5aef0b4a71ebf222d22220eb2c38b9fb07603485c9503b65ff43440", + "b4c149bc9f2f48b6887800706e50c669c86af320759914bcd2a53f7f89b92eda", + "c1cde7654ebfad4609b999082eba464c5a20eb1434e46ccd6d81510a13aa853b" + ], + "version": "20000000", + "bits": "1702796c", + "time": "67ec55e6", + "cleanJobs": false, + "received": 1743541734876, + "pool": 161, + "coinbase": "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4f0350960d122f62737175617265642fe5006405fe934bb9fabe6d6d2db144ad7b2eed39c89a2cde9f88f06d9082613911584463126673a700303e881000000000000000000002dc0000000000000000ffffffff05220200000000000017a9141bd79ae4d7811daea94bd25db93761b10fecccd7876271cc120000000017a9146547a37cae8db12fd4c8f191f69d4a52cfa886fa870000000000000000266a24aa21a9ed93bbaa9811f4ac5527dcd50345b7b15a3d319778bf43ea027337d6fd660826fe00000000000000002f6a2d434f524501307f36ff0aff7000ebd4eea1e8e9bbbfa0e1134cb203d7822f404faca98985eb083e8fd9e16ad64700000000000000002b6a2952534b424c4f434b3a7ad7ddd490a0e384e30c34942e26100ab1e97b25aa8a53c435370b100070fc9300000000", + "height": 890448, + "timestamp": 1743541734, + "reward": 315388804, + "scriptsig": "0350960d122f62737175617265642fe5006405fe934bb9fabe6d6d2db144ad7b2eed39c89a2cde9f88f06d9082613911584463126673a700303e881000000000000000000002dc0000000000000000" + } + }, + "mempoolInfo": { + "loaded": true, + "size": 4173, + "bytes": 3427792, + "usage": 16974288, + "total_fee": 0.05445324, + "maxmempool": 300000000, + "mempoolminfee": 0.00001, + "minrelaytxfee": 0.00001, + "incrementalrelayfee": 0.00001, + "unbroadcastcount": 0, + "fullrbf": true + }, + "vBytesPerSecond": 1415, + "mempool-blocks": [ + { + "blockSize": 1779311, + "blockVSize": 997968.5, + "nTx": 2132, + "totalFees": 2902870, + "medianFee": 2.0479263387949875, + "feeRange": [ + 1.0721153846153846, + 1.9980563654033041, + 2.2195704057279237, + 3.009493670886076, + 3.4955223880597015, + 6.0246913580246915, + 218.1818181818182 + ] + }, + { + "blockSize": 1959636, + "blockVSize": 997903.5, + "nTx": 497, + "totalFees": 1093076, + "medianFee": 1.102049424602265, + "feeRange": [ + 1.0401794819498267, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.0761096766260911, + 1.1021605957228275 + ] + }, + { + "blockSize": 1477260, + "blockVSize": 997997.25, + "nTx": 720, + "totalFees": 1016195, + "medianFee": 1.007409072434199, + "feeRange": [ + 1, + 1.0019120458891013, + 1.0040863981319323, + 1.0081019768823594, + 1.018450184501845, + 1.0203327171903882, + 1.0485018498190837 + ] + }, + { + "blockSize": 1021308, + "blockVSize": 431071.5, + "nTx": 823, + "totalFees": 432342, + "medianFee": 0, + "feeRange": [ + 1, + 1, + 1, + 1.0028011204481793, + 1.0042075736325387, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ], + "transactions": [ + { + "txid": "bccfbff8d129df7dcfb65b7587186a807ab2c7e4b8494188ac27733705d9e482", + "fee": 564, + "vsize": 140.25, + "value": 160404, + "rate": 4.021390374331551, + "time": 1743541739 + }, + { + "txid": "94c81b3fc40369520fd7607ed54f18416057aab46bc6da328c0588e5967a2ebd", + "fee": 1044, + "vsize": 315.75, + "value": 64814, + "rate": 3.3064133016627077, + "time": 1743541739 + }, + { + "txid": "a16276de4ce8b2eba0013428af73255060ad04e685bee98731504bf973d49bf7", + "fee": 426, + "vsize": 141.25, + "value": 349522, + "rate": 3.015929203539823, + "time": 1743541739 + }, + { + "txid": "bb25deab784cb213dc4cba234f5a41a6c8950c432a05b5858053b39ceda6d1a3", + "fee": 356, + "vsize": 152.25, + "value": 1562308, + "rate": 2.3382594417077174, + "time": 1743541738 + }, + { + "txid": "17a9e5194345d8da287d49c0bf595474e08fc81434646925d6640964929aa7f9", + "fee": 11400, + "vsize": 189.5, + "value": 3352669, + "rate": 60.15831134564644, + "time": 1743541738 + }, + { + "txid": "ced722a2f9007182b8268240af19fee486e8af07da83efccea6e2374aa484d07", + "fee": 534, + "vsize": 177, + "value": 302121849, + "rate": 3.016949152542373, + "time": 1743541736 + } + ], + "loadingIndicators": {}, + "fees": { + "fastestFee": 3, + "halfHourFee": 3, + "hourFee": 3, + "economyFee": 2, + "minimumFee": 1 + }, + "rbfSummary": [ + { + "txid": "51f468b28c4ee790bdfa3152a3add656f29e908828b55fb295cf55dc6a33a855", + "mined": false, + "fullRbf": false, + "oldFee": 19437, + "oldVsize": 166.5, + "newFee": 19770, + "newVsize": 166.5 + }, + { + "txid": "8fb448ef9a26ca3cee8341e3627adf57ae9374c37b83082ad5d90491955cc38c", + "mined": false, + "fullRbf": false, + "oldFee": 19270, + "oldVsize": 166.25, + "newFee": 19603, + "newVsize": 166.5 + }, + { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "mined": false, + "fullRbf": false, + "oldFee": 606, + "oldVsize": 233, + "newFee": 960, + "newVsize": 224 + }, + { + "txid": "a2b7c8a1e8d0f17108c5089198ccbf6c50341c99abb91959a25a41f9bb44fa60", + "mined": false, + "fullRbf": false, + "oldFee": 504, + "oldVsize": 225, + "newFee": 958, + "newVsize": 226 + }, + { + "txid": "798fb7eb84e69c58a596478436f48d3a620a825624ff88d5f15a0b1e17fa8fdf", + "mined": false, + "fullRbf": false, + "oldFee": 1680, + "oldVsize": 381.25, + "newFee": 2240, + "newVsize": 381.5 + }, + { + "txid": "86dd928e524e12fdfbb6d2ba51e1a0e4d8557d05552184bb20c0427c3e0d19f8", + "mined": false, + "fullRbf": false, + "oldFee": 1476, + "oldVsize": 328.5, + "newFee": 1968, + "newVsize": 328.5 + } + ], + "backend": "esplora", + "blocks": [ + { + "id": "0000000000000000000079f5b74b6533abb0b1ece06570d8d157b5bebd1460b4", + "height": 890440, + "version": 559235072, + "timestamp": 1743535677, + "bits": 386038124, + "nonce": 2920325684, + "difficulty": 113757508810854, + "merkle_root": "c793d5fdbfb1ebe99e14a13a6d65370057d311774d33c71da166663b18722474", + "tx_count": 3823, + "size": 1578209, + "weight": 3993461, + "previousblockhash": "000000000000000000020fb2e24425793e17e60e188205dc1694d221790348b2", + "mediantime": 1743532406, + "stale": false, + "extras": { + "reward": 319838750, + "coinbaseRaw": "0348960d082f5669614254432f2cfabe6d6d294719da11c017243828bf32c405341db7f19387fee92c25413c45e114907f9810000000000000001058bf9601429f9fa7a6c160d10d00000000000000", + "orphans": [], + "medianFee": 4, + "feeRange": [ + 3, + 3, + 3.0191082802547773, + 3.980952380952381, + 5, + 10, + 427.748502994012 + ], + "totalFees": 7338750, + "avgFee": 1920, + "avgFeeRate": 7, + "utxoSetChange": 4093, + "avgTxSize": 412.71000000000004, + "totalInputs": 7430, + "totalOutputs": 11523, + "totalOutputAmt": 547553568373, + "segwitTotalTxs": 3432, + "segwitTotalSize": 1467920, + "segwitTotalWeight": 3552413, + "feePercentiles": null, + "virtualSize": 998365.25, + "coinbaseAddress": "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4", + "coinbaseAddresses": [ + "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4" + ], + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 fb37342f6275b13936799def06f2eb4c0f201515 OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "\u0003H–\r\b/ViaBTC/,ú¾mm)G\u0019Ú\u0011À\u0017$8(¿2Ä\u00054\u001d·ñ“‡þé,%Aìg/Foundry USA Pool #dropgold/\u0001S\nEaç\u0002\u0000\u0000\u0000\u0000\u0000", + "header": "00a03220b46014bdbeb557d1d87065e0ecb1b0ab33654bb7f579000000000000000000003ed60f06cec16df4399b5dafa7077036c2eb58cc6a16e6cdca559b9e2f7e4525bb3eec676c790217b7b3c9cb", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 111, + "name": "Foundry USA", + "slug": "foundryusa", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2792968, + "expectedWeight": 3991959, + "similarity": 0.9951416839808291 + } + }, + { + "id": "000000000000000000014845978a876b3d8bf5d489b9d87e88873952b06ddfce", + "height": 890442, + "version": 557981696, + "timestamp": 1743536834, + "bits": 386038124, + "nonce": 470697326, + "difficulty": 113757508810854, + "merkle_root": "5e92e681c1db2797a5b3e5016729059f8b60a256cafb51d835dac2b3964c0db4", + "tx_count": 3566, + "size": 1628328, + "weight": 3993552, + "previousblockhash": "00000000000000000000ef5a27459785ea4c91e05f64adfad306af6dfc0cd19c", + "mediantime": 1743532867, + "stale": false, + "extras": { + "reward": 318057766, + "coinbaseRaw": "034a960d194d696e656420627920416e74506f6f6c204d000201e15e2989fabe6d6dd599e9dfa40be51f1517c8f512c5c3d51c7656182f1df335d34b98ee02c527db080000000000000000004f92b702000000000000", + "orphans": [], + "medianFee": 3.00860164711668, + "feeRange": [ + 1.5174418604651163, + 2.0140845070422535, + 2.492354740061162, + 3, + 4.020942408376963, + 7, + 200 + ], + "totalFees": 5557766, + "avgFee": 1558, + "avgFeeRate": 5, + "utxoSetChange": 1971, + "avgTxSize": 456.48, + "totalInputs": 7938, + "totalOutputs": 9909, + "totalOutputAmt": 900044492230, + "segwitTotalTxs": 3214, + "segwitTotalSize": 1526463, + "segwitTotalWeight": 3586200, + "feePercentiles": null, + "virtualSize": 998388, + "coinbaseAddress": "37jKPSmbEGwgfacCr2nayn1wTaqMAbA94Z", + "coinbaseAddresses": [ + "37jKPSmbEGwgfacCr2nayn1wTaqMAbA94Z", + "39C7fxSzEACPjM78Z7xdPxhf7mKxJwvfMJ" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 42402a28dd61f2718a4b27ae72a4791d5bbdade7 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003J–\r\u0019Mined by AntPool M\u0000\u0002\u0001á^)‰ú¾mmՙéߤ\u000bå\u001f\u0015\u0017Èõ\u0012ÅÃÕ\u001cvV\u0018/\u001dó5ÓK˜î\u0002Å'Û\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000O’·\u0002\u0000\u0000\u0000\u0000\u0000\u0000", + "header": "002042219cd10cfc6daf06d3faad645fe0914cea859745275aef00000000000000000000b40d4c96b3c2da35d851fbca56a2608b9f05296701e5b3a59727dbc181e6925ec242ec676c7902176e450e1c", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 44, + "name": "AntPool", + "slug": "antpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 5764747, + "expectedWeight": 3991786, + "similarity": 0.9029319155137951 + } + }, + { + "id": "000000000000000000026e08b270834273511b353bed30d54706211adc96f5f6", + "height": 890443, + "version": 706666496, + "timestamp": 1743537197, + "bits": 386038124, + "nonce": 321696065, + "difficulty": 113757508810854, + "merkle_root": "3d7574f7eca741fa94b4690868a242e5b286f8a0417ad0275d4ab05893e96350", + "tx_count": 2155, + "size": 1700002, + "weight": 3993715, + "previousblockhash": "000000000000000000014845978a876b3d8bf5d489b9d87e88873952b06ddfce", + "mediantime": 1743533789, + "stale": false, + "extras": { + "reward": 315112344, + "coinbaseRaw": "034b960d21202020204d696e656420627920536563706f6f6c2020202070000b05e388958c01fabe6d6db7ae4bfa7b1294e16e800b4563f1f5ddeb5c0740319eba45600f3f05d2d7272910000000000000000000c2cb7e020000", + "orphans": [], + "medianFee": 1.4360674424569184, + "feeRange": [ + 1, + 1.0135135135135136, + 1.09717868338558, + 2.142857142857143, + 3.009584664536741, + 4.831858407079646, + 196.07843137254903 + ], + "totalFees": 2612344, + "avgFee": 1212, + "avgFeeRate": 2, + "utxoSetChange": -2880, + "avgTxSize": 788.64, + "totalInputs": 9773, + "totalOutputs": 6893, + "totalOutputAmt": 264603969671, + "segwitTotalTxs": 1933, + "segwitTotalSize": 1556223, + "segwitTotalWeight": 3418707, + "feePercentiles": null, + "virtualSize": 998428.75, + "coinbaseAddress": "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "coinbaseAddresses": [ + "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "3Awm3FNpmwrbvAFVThRUFqgpbVuqWisni9" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 8ee90177614ecde53314fd67c46162f315852a07 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003K–\r! Mined by Secpool p\u0000\u000b\u0005㈕Œ\u0001ú¾mm·®Kú{\u0012”án€\u000bEcñõÝë\\\u0007@1žºE`\u000f?\u0005Ò×')\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÂË~\u0002\u0000\u0000", + "header": "00e01e2acedf6db0523987887ed8b989d4f58b3d6b878a974548010000000000000000005063e99358b04a5d27d07a41a0f886b2e542a2680869b494fa41a7ecf774753d2d44ec676c79021741b12c13", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 141, + "name": "SECPOOL", + "slug": "secpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2623934, + "expectedWeight": 3991917, + "similarity": 0.9951244468050102 + } + }, + { + "id": "00000000000000000001b36ec470ae4ec39f5d975f665d6f40e9d35bfa65290d", + "height": 890444, + "version": 671080448, + "timestamp": 1743539347, + "bits": 386038124, + "nonce": 994357124, + "difficulty": 113757508810854, + "merkle_root": "c891d4bf68e22916274b667eb3287d50da2ddd63f8dad892da045cc2ad4a7b21", + "tx_count": 3797, + "size": 1500309, + "weight": 3993525, + "previousblockhash": "000000000000000000026e08b270834273511b353bed30d54706211adc96f5f6", + "mediantime": 1743533986, + "stale": false, + "extras": { + "reward": 318708524, + "coinbaseRaw": "034c960d082f5669614254432f2cfabe6d6d45b7fd7ab53a0914da7dcc9d21fe44f0936f5354169a56df9d5139f07afbc2b41000000000000000106fc0eb03f0ac2e851d18d8d9f85ad70000000000", + "orphans": [], + "medianFee": 4.064775540157046, + "feeRange": [ + 3.014354066985646, + 3.18368700265252, + 3.602836879432624, + 4.231825525040388, + 5.581730769230769, + 10, + 697.7151162790698 + ], + "totalFees": 6208524, + "avgFee": 1635, + "avgFeeRate": 6, + "utxoSetChange": 5755, + "avgTxSize": 395.02, + "totalInputs": 6681, + "totalOutputs": 12436, + "totalOutputAmt": 835839828101, + "segwitTotalTxs": 3351, + "segwitTotalSize": 1354446, + "segwitTotalWeight": 3410181, + "feePercentiles": null, + "virtualSize": 998381.25, + "coinbaseAddress": "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4", + "coinbaseAddresses": [ + "1PuJjnF476W3zXfVYmJfGnouzFDAXakkL4" + ], + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 fb37342f6275b13936799def06f2eb4c0f201515 OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "\u0003L–\r\b/ViaBTC/,ú¾mmE·ýzµ:\t\u0014Ú}̝!þDð“oST\u0016šVߝQ9ðzû´\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010oÀë\u0003ð¬.…\u001d\u0018ØÙøZ×\u0000\u0000\u0000\u0000\u0000", + "header": "00e0ff27f6f596dc1a210647d530ed3b351b5173428370b2086e02000000000000000000217b4aadc25c04da92d8daf863dd2dda507d28b37e664b271629e268bfd491c8934cec676c79021784af443b", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 73, + "name": "ViaBTC", + "slug": "viabtc", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 6253024, + "expectedWeight": 3991868, + "similarity": 0.9862862477811569 + } + }, + { + "id": "00000000000000000001402065f940b9475159bdc962c92a66d3c6652ffa338a", + "height": 890445, + "version": 601202688, + "timestamp": 1743539574, + "bits": 386038124, + "nonce": 1647397133, + "difficulty": 113757508810854, + "merkle_root": "61d8294afa8f6bafa4d979a77d187dee5f75a6392f957ea647d96eefbbbc5e9b", + "tx_count": 3579, + "size": 1659862, + "weight": 3993406, + "previousblockhash": "00000000000000000001b36ec470ae4ec39f5d975f665d6f40e9d35bfa65290d", + "mediantime": 1743535677, + "stale": false, + "extras": { + "reward": 315617086, + "coinbaseRaw": "034d960d04764dec672f466f756e6472792055534120506f6f6c202364726f70676f6c642f4fac7c451540000000000000", + "orphans": [], + "medianFee": 2.5565329189526835, + "feeRange": [ + 1.521613832853026, + 2, + 2.2411347517730498, + 3, + 3, + 3.954954954954955, + 162.78343949044586 + ], + "totalFees": 3117086, + "avgFee": 871, + "avgFeeRate": 3, + "utxoSetChange": 1881, + "avgTxSize": 463.65000000000003, + "totalInputs": 7893, + "totalOutputs": 9774, + "totalOutputAmt": 324878597485, + "segwitTotalTxs": 3189, + "segwitTotalSize": 1538741, + "segwitTotalWeight": 3509030, + "feePercentiles": null, + "virtualSize": 998351.5, + "coinbaseAddress": "bc1pp7w6kxnj7lzgm29pmuhezwl0vjdlcrthqukll5gn9xuqfq5n673smy4m63", + "coinbaseAddresses": [ + "bc1pp7w6kxnj7lzgm29pmuhezwl0vjdlcrthqukll5gn9xuqfq5n673smy4m63", + "bc1qwzrryqr3ja8w7hnja2spmkgfdcgvqwp5swz4af4ngsjecfz0w0pqud7k38" + ], + "coinbaseSignature": "OP_PUSHNUM_1 OP_PUSHBYTES_32 0f9dab1a72f7c48da8a1df2f913bef649bfc0d77072dffd11329b8048293d7a3", + "coinbaseSignatureAscii": "\u0003M–\r\u0004vMìg/Foundry USA Pool #dropgold/O¬|E\u0015@\u0000\u0000\u0000\u0000\u0000\u0000", + "header": "00a0d5230d2965fa5bd3e9406f5d665f975d9fc34eae70c46eb3010000000000000000009b5ebcbbef6ed947a67e952f39a6755fee7d187da779d9a4af6b8ffa4a29d861764dec676c7902170d493162", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 111, + "name": "Foundry USA", + "slug": "foundryusa", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 3145370, + "expectedWeight": 3991903, + "similarity": 0.9903353189076812 + } + }, + { + "id": "00000000000000000001fe3d26b02146d0fc2192db06cbc12478d4b347f5306b", + "height": 890446, + "version": 537722880, + "timestamp": 1743541107, + "bits": 386038124, + "nonce": 826569764, + "difficulty": 113757508810854, + "merkle_root": "d9b320d7cb5aace80ca20b934b13b4a272121fbdd59f3aaba690e0326ca2c144", + "tx_count": 3998, + "size": 1541360, + "weight": 3993545, + "previousblockhash": "00000000000000000001402065f940b9475159bdc962c92a66d3c6652ffa338a", + "mediantime": 1743535803, + "stale": false, + "extras": { + "reward": 317976882, + "coinbaseRaw": "034e960d20202020204d696e656420627920536563706f6f6c2020202070001b04fad5fdfefabe6d6d59dd8ebce6e5aab8fb943bbdcede474b6f2d00a395a717970104a6958c17f1ca100000000000000000008089c9350200", + "orphans": [], + "medianFee": 3.3750830641948864, + "feeRange": [ + 2.397163120567376, + 3, + 3, + 3.463647199046484, + 4.49438202247191, + 7.213930348258707, + 476.1904761904762 + ], + "totalFees": 5476882, + "avgFee": 1370, + "avgFeeRate": 5, + "utxoSetChange": 4951, + "avgTxSize": 385.41, + "totalInputs": 7054, + "totalOutputs": 12005, + "totalOutputAmt": 983289729453, + "segwitTotalTxs": 3538, + "segwitTotalSize": 1396505, + "segwitTotalWeight": 3414233, + "feePercentiles": null, + "virtualSize": 998386.25, + "coinbaseAddress": "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "coinbaseAddresses": [ + "3Eif1JfqeMERRsQHtvGEacNN9hhuvnsfe9", + "3Awm3FNpmwrbvAFVThRUFqgpbVuqWisni9" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 8ee90177614ecde53314fd67c46162f315852a07 OP_EQUAL", + "coinbaseSignatureAscii": "\u0003N–\r Mined by Secpool p\u0000\u001b\u0004úÕýþú¾mmYݎ¼æåª¸û”;½ÎÞGKo-\u0000£•§\u0017—\u0001\u0004¦•Œ\u0017ñÊ\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000€‰É5\u0002\u0000", + "header": "00000d208a33fa2f65c6d3662ac962c9bd595147b940f96520400100000000000000000044c1a26c32e090a6ab3a9fd5bd1f1272a2b4134b930ba20ce8ac5acbd720b3d97353ec676c79021724744431", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 141, + "name": "SECPOOL", + "slug": "secpool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 5601814, + "expectedWeight": 3991928, + "similarity": 0.9537877497871488 + } + }, + { + "id": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "height": 890447, + "version": 568860672, + "timestamp": 1743541240, + "bits": 386038124, + "nonce": 4008077709, + "difficulty": 113757508810854, + "merkle_root": "8c3b098e4e50b67075a4fc52bf4cd603aaa450c240c18a865c9ddc0f27104f5f", + "tx_count": 1919, + "size": 1747789, + "weight": 3993172, + "previousblockhash": "00000000000000000001fe3d26b02146d0fc2192db06cbc12478d4b347f5306b", + "mediantime": 1743536834, + "stale": false, + "extras": { + "reward": 314435106, + "coinbaseRaw": "034f960d0f2f736c7573682f65000002fba05ef1fabe6d6df8d29032ea6f9ab1debd223651f30887df779c6195869e70a7b787b3a15f4b1710000000000000000000ee5f0c00b20200000000", + "orphans": [], + "medianFee": 1.4653828213500366, + "feeRange": [ + 1.0845070422535212, + 1.2, + 1.51, + 2.0141129032258065, + 2.3893805309734515, + 4.025477707006369, + 300.0065359477124 + ], + "totalFees": 1935106, + "avgFee": 1008, + "avgFeeRate": 1, + "utxoSetChange": -4244, + "avgTxSize": 910.58, + "totalInputs": 9909, + "totalOutputs": 5665, + "totalOutputAmt": 210763861504, + "segwitTotalTxs": 1720, + "segwitTotalSize": 1629450, + "segwitTotalWeight": 3519924, + "feePercentiles": null, + "virtualSize": 998293, + "coinbaseAddress": "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11", + "coinbaseAddresses": [ + "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 1f0cbbec8bc4c945e4e16249b11eee911eded55f OP_EQUAL", + "coinbaseSignatureAscii": "\u0003O–\r\u000f/slush/e\u0000\u0000\u0002û ^ñú¾mmøÒ2êoš±Þ½\"6Qó\b‡ßwœa•†žp§·‡³¡_K\u0017\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000î_\f\u0000²\u0002\u0000\u0000\u0000\u0000", + "header": "0020e8216b30f547b3d47824c1cb06db9221fcd04621b0263dfe010000000000000000005f4f10270fdc9d5c868ac140c250a4aa03d64cbf52fca47570b6504e8e093b8cf853ec676c7902178d69e6ee", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 43, + "name": "Braiins Pool", + "slug": "braiinspool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 2059571, + "expectedWeight": 3991720, + "similarity": 0.9149852183486826 + } + } + ], + "conversions": { + "time": 1743541504, + "USD": 85181, + "EUR": 78939, + "GBP": 65914, + "CAD": 121813, + "CHF": 75399, + "AUD": 135492, + "JPY": 12753000 + }, + "backendInfo": { + "hostname": "node205.tk7.mempool.space", + "version": "3.1.0-dev", + "gitCommit": "3c08b5c72", + "lightning": false, + "backend": "esplora" + }, + "da": { + "progressPercent": 68.99801587301587, + "difficultyChange": 2.7058667283164084, + "estimatedRetargetDate": 1743907120500, + "remainingBlocks": 625, + "remainingTime": 365382500, + "previousRetarget": 1.433804484570416, + "previousTime": 1742728542, + "nextRetargetHeight": 891072, + "timeAvg": 584612, + "adjustedTimeAvg": 584612, + "timeOffset": 0, + "expectedBlocks": 1355.3266666666666 + } +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx01_ws_tx_replaced.json b/frontend/cypress/fixtures/details_rbf/tx01_ws_tx_replaced.json new file mode 100644 index 000000000..7af723546 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx01_ws_tx_replaced.json @@ -0,0 +1,5 @@ +{ + "txReplaced": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698" + } +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_api_cpfp.json b/frontend/cypress/fixtures/details_rbf/tx02_api_cpfp.json new file mode 100644 index 000000000..478eecfbc --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_api_cpfp.json @@ -0,0 +1,9 @@ +{ + "ancestors": [], + "bestDescendant": null, + "descendants": [], + "effectiveFeePerVsize": 4.285714285714286, + "sigops": 4, + "fee": 960, + "adjustedVsize": 224 +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_api_rbf.json b/frontend/cypress/fixtures/details_rbf/tx02_api_rbf.json new file mode 100644 index 000000000..96bd1efdd --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_api_rbf.json @@ -0,0 +1,36 @@ +{ + "replacements": { + "tx": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "fee": 960, + "vsize": 224, + "value": 49040, + "rate": 4.285714285714286, + "time": 1743541726, + "rbf": true, + "fullRbf": false + }, + "time": 1743541726, + "fullRbf": false, + "replaces": [ + { + "tx": { + "txid": "242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29", + "fee": 606, + "vsize": 233, + "value": 49394, + "rate": 2.6008583690987126, + "time": 1743541407, + "rbf": true + }, + "time": 1743541407, + "interval": 319, + "fullRbf": false, + "replaces": [] + } + ] + }, + "replaces": [ + "242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29" + ] +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_api_tx.json b/frontend/cypress/fixtures/details_rbf/tx02_api_tx.json new file mode 100644 index 000000000..cbcb4fe8c --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_api_tx.json @@ -0,0 +1,38 @@ +{ + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "version": 2, + "locktime": 0, + "vin": [ + { + "txid": "fb16c141d22a3a7af5e44e7478a8663866c35d554cd85107ec8a99b97e5a72e9", + "vout": 0, + "prevout": { + "scriptpubkey": "76a914099f831c49289c7b9cc07a9a632867ecd51a105a88ac", + "scriptpubkey_asm": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 099f831c49289c7b9cc07a9a632867ecd51a105a OP_EQUALVERIFY OP_CHECKSIG", + "scriptpubkey_type": "p2pkh", + "scriptpubkey_address": "1stAprEZapjCYGUACUcXohQqSHF9MU5Kj", + "value": 50000 + }, + "scriptsig": "483045022100ab59cf33b33eab1f76286a0fa6962c12171f2133931fec3616f96883551e6c9d02205cacbae788359f2a32ff629e732be0d95843440a3d1c222a63095f83fb69f438014104ea83ffe426ee6b6827029c72fbdcb0a1602829c1fe384637a7d178aa62a6a1e3d7f29250e001ee708a93ca9771f50ee638aaaaef8941c8a7e2bad5494b23e0df", + "scriptsig_asm": "OP_PUSHBYTES_72 3045022100ab59cf33b33eab1f76286a0fa6962c12171f2133931fec3616f96883551e6c9d02205cacbae788359f2a32ff629e732be0d95843440a3d1c222a63095f83fb69f43801 OP_PUSHBYTES_65 04ea83ffe426ee6b6827029c72fbdcb0a1602829c1fe384637a7d178aa62a6a1e3d7f29250e001ee708a93ca9771f50ee638aaaaef8941c8a7e2bad5494b23e0df", + "is_coinbase": false, + "sequence": 4294967293 + } + ], + "vout": [ + { + "scriptpubkey": "76a914099f831c49289c7b9cc07a9a632867ecd51a105a88ac", + "scriptpubkey_asm": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 099f831c49289c7b9cc07a9a632867ecd51a105a OP_EQUALVERIFY OP_CHECKSIG", + "scriptpubkey_type": "p2pkh", + "scriptpubkey_address": "1stAprEZapjCYGUACUcXohQqSHF9MU5Kj", + "value": 49040 + } + ], + "size": 224, + "weight": 896, + "sigops": 4, + "fee": 960, + "status": { + "confirmed": false + } +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_api_tx_times.json b/frontend/cypress/fixtures/details_rbf/tx02_api_tx_times.json new file mode 100644 index 000000000..365c3885e --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_api_tx_times.json @@ -0,0 +1,3 @@ +[ + 1743541726 +] \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_ws_block.json b/frontend/cypress/fixtures/details_rbf/tx02_ws_block.json new file mode 100644 index 000000000..9fc358795 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_ws_block.json @@ -0,0 +1,116 @@ +{ + "block": { + "id": "000000000000000000019bfe551da67e0d93dda4b355d16f1fdb4031ba7e5d61", + "height": 890448, + "version": 626941952, + "timestamp": 1743541850, + "bits": 386038124, + "nonce": 1177284424, + "difficulty": 113757508810854, + "merkle_root": "563d862ef4ec95ea97735ca5561e347ca6e216cb56bd451e8bedb1014078d6c3", + "tx_count": 2229, + "size": 1763153, + "weight": 3993275, + "previousblockhash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "mediantime": 1743537197, + "stale": false, + "extras": { + "reward": 315498786, + "coinbaseRaw": "0350960d0f2f736c7573682fe500c702ff43d142fabe6d6def42d9effd800b9839c832dcfdc6899e137547f15c8a598dbe3a1363f999a0a310000000000000000000e9a2050064dc00000000", + "orphans": [], + "medianFee": 2.144206217858874, + "feeRange": [ + 1.0845921450151057, + 2, + 2.2448979591836733, + 3, + 3.5985915492957745, + 6, + 217.0212765957447 + ], + "totalFees": 2998786, + "avgFee": 1345, + "avgFeeRate": 3, + "utxoSetChange": -3073, + "avgTxSize": 790.84, + "totalInputs": 9558, + "totalOutputs": 6485, + "totalOutputAmt": 442206797883, + "segwitTotalTxs": 1986, + "segwitTotalSize": 1676431, + "segwitTotalWeight": 3646495, + "feePercentiles": null, + "virtualSize": 998318.75, + "coinbaseAddress": "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11", + "coinbaseAddresses": [ + "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 1f0cbbec8bc4c945e4e16249b11eee911eded55f OP_EQUAL", + "coinbaseSignatureAscii": "\u0003P–\r\u000f/slush/å\u0000Ç\u0002ÿCÑBú¾mmïBÙïý€\u000b˜9È2ÜýƉž\u0013uGñ\\ŠY¾:\u0013cù™ £\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000é¢\u0005\u0000dÜ\u0000\u0000\u0000\u0000", + "header": "00605e25abe2e310c10e724cfb641859658fee6570ec6062cc0400000000000000000000c3d6784001b1ed8b1e45bd56cb16e2a67c341e56a55c7397ea95ecf42e863d565a56ec676c79021748ef2b46", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 43, + "name": "Braiins Pool", + "slug": "braiinspool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 3287140, + "expectedWeight": 3991809, + "similarity": 0.9079894021278392 + } + }, + "mempool-blocks": [ + { + "blockSize": 1979907, + "blockVSize": 997974.75, + "nTx": 461, + "totalFees": 1429178, + "medianFee": 1.1020797417745662, + "feeRange": [ + 1.0666666666666667, + 1.0746847720659554, + 1.102059530141031, + 3, + 3.4233409610983982, + 5.017605633802817, + 148.4084084084084 + ] + }, + { + "blockSize": 1363691, + "blockVSize": 997986.5, + "nTx": 1080, + "totalFees": 1023741, + "medianFee": 1.014827018121911, + "feeRange": [ + 1, + 1.0036011703803736, + 1.0054683365672958, + 1.0186757215619695, + 1.0548148148148149, + 1.0548148148148149, + 1.068146618482189 + ] + }, + { + "blockSize": 1337253, + "blockVSize": 563516.25, + "nTx": 901, + "totalFees": 564834, + "medianFee": 1.0028011204481793, + "feeRange": [ + 1, + 1, + 1, + 1.0025062656641603, + 1.004231311706629, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ], + "txConfirmed": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698" +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_ws_block_confirmation.json b/frontend/cypress/fixtures/details_rbf/tx02_ws_block_confirmation.json new file mode 100644 index 000000000..9fc358795 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_ws_block_confirmation.json @@ -0,0 +1,116 @@ +{ + "block": { + "id": "000000000000000000019bfe551da67e0d93dda4b355d16f1fdb4031ba7e5d61", + "height": 890448, + "version": 626941952, + "timestamp": 1743541850, + "bits": 386038124, + "nonce": 1177284424, + "difficulty": 113757508810854, + "merkle_root": "563d862ef4ec95ea97735ca5561e347ca6e216cb56bd451e8bedb1014078d6c3", + "tx_count": 2229, + "size": 1763153, + "weight": 3993275, + "previousblockhash": "0000000000000000000004cc6260ec7065ee8f65591864fb4c720ec110e3e2ab", + "mediantime": 1743537197, + "stale": false, + "extras": { + "reward": 315498786, + "coinbaseRaw": "0350960d0f2f736c7573682fe500c702ff43d142fabe6d6def42d9effd800b9839c832dcfdc6899e137547f15c8a598dbe3a1363f999a0a310000000000000000000e9a2050064dc00000000", + "orphans": [], + "medianFee": 2.144206217858874, + "feeRange": [ + 1.0845921450151057, + 2, + 2.2448979591836733, + 3, + 3.5985915492957745, + 6, + 217.0212765957447 + ], + "totalFees": 2998786, + "avgFee": 1345, + "avgFeeRate": 3, + "utxoSetChange": -3073, + "avgTxSize": 790.84, + "totalInputs": 9558, + "totalOutputs": 6485, + "totalOutputAmt": 442206797883, + "segwitTotalTxs": 1986, + "segwitTotalSize": 1676431, + "segwitTotalWeight": 3646495, + "feePercentiles": null, + "virtualSize": 998318.75, + "coinbaseAddress": "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11", + "coinbaseAddresses": [ + "34XC8GbijKCCvppNvhw4Ra8QZdWsg8tC11" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 1f0cbbec8bc4c945e4e16249b11eee911eded55f OP_EQUAL", + "coinbaseSignatureAscii": "\u0003P–\r\u000f/slush/å\u0000Ç\u0002ÿCÑBú¾mmïBÙïý€\u000b˜9È2ÜýƉž\u0013uGñ\\ŠY¾:\u0013cù™ £\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000é¢\u0005\u0000dÜ\u0000\u0000\u0000\u0000", + "header": "00605e25abe2e310c10e724cfb641859658fee6570ec6062cc0400000000000000000000c3d6784001b1ed8b1e45bd56cb16e2a67c341e56a55c7397ea95ecf42e863d565a56ec676c79021748ef2b46", + "utxoSetSize": null, + "totalInputAmt": null, + "pool": { + "id": 43, + "name": "Braiins Pool", + "slug": "braiinspool", + "minerNames": null + }, + "matchRate": 100, + "expectedFees": 3287140, + "expectedWeight": 3991809, + "similarity": 0.9079894021278392 + } + }, + "mempool-blocks": [ + { + "blockSize": 1979907, + "blockVSize": 997974.75, + "nTx": 461, + "totalFees": 1429178, + "medianFee": 1.1020797417745662, + "feeRange": [ + 1.0666666666666667, + 1.0746847720659554, + 1.102059530141031, + 3, + 3.4233409610983982, + 5.017605633802817, + 148.4084084084084 + ] + }, + { + "blockSize": 1363691, + "blockVSize": 997986.5, + "nTx": 1080, + "totalFees": 1023741, + "medianFee": 1.014827018121911, + "feeRange": [ + 1, + 1.0036011703803736, + 1.0054683365672958, + 1.0186757215619695, + 1.0548148148148149, + 1.0548148148148149, + 1.068146618482189 + ] + }, + { + "blockSize": 1337253, + "blockVSize": 563516.25, + "nTx": 901, + "totalFees": 564834, + "medianFee": 1.0028011204481793, + "feeRange": [ + 1, + 1, + 1, + 1.0025062656641603, + 1.004231311706629, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ], + "txConfirmed": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698" +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_ws_mempool_blocks_01.json b/frontend/cypress/fixtures/details_rbf/tx02_ws_mempool_blocks_01.json new file mode 100644 index 000000000..4c83cf797 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_ws_mempool_blocks_01.json @@ -0,0 +1,75 @@ +{ + "mempool-blocks": [ + { + "blockSize": 1779823, + "blockVSize": 997995.25, + "nTx": 2133, + "totalFees": 2922926, + "medianFee": 2.0479263387949875, + "feeRange": [ + 1.0825892857142858, + 2, + 2.2439024390243905, + 3.010452961672474, + 3.554973821989529, + 6.032085561497326, + 218.1818181818182 + ] + }, + { + "blockSize": 1957833, + "blockVSize": 997953, + "nTx": 500, + "totalFees": 1093270, + "medianFee": 1.102049424602265, + "feeRange": [ + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.0548148148148149, + 1.067677314564158, + 1.0766488413547237, + 1.1021605957228275 + ] + }, + { + "blockSize": 1477864, + "blockVSize": 997999, + "nTx": 730, + "totalFees": 1016458, + "medianFee": 1.0075971559364956, + "feeRange": [ + 1, + 1.0019552465783186, + 1.004255319148936, + 1.0081019768823594, + 1.018450184501845, + 1.0203327171903882, + 1.0548148148148149 + ] + }, + { + "blockSize": 1030954, + "blockVSize": 436613.5, + "nTx": 838, + "totalFees": 437891, + "medianFee": 0, + "feeRange": [ + 1, + 1, + 1, + 1.0026525198938991, + 1.004231311706629, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ], + "txPosition": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "position": { + "block": 0, + "vsize": 111102 + } + } +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_ws_next_block.json b/frontend/cypress/fixtures/details_rbf/tx02_ws_next_block.json new file mode 100644 index 000000000..4245d4611 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_ws_next_block.json @@ -0,0 +1,75 @@ +{ + "mempool-blocks": [ + { + "blockSize": 1719945, + "blockVSize": 997952.25, + "nTx": 2558, + "totalFees": 3287140, + "medianFee": 2.4046448299072485, + "feeRange": [ + 1.073446327683616, + 2, + 2.2567567567567566, + 3.0106761565836297, + 3.6169014084507043, + 6.015037593984962, + 218.1818181818182 + ] + }, + { + "blockSize": 2022898, + "blockVSize": 997983.25, + "nTx": 131, + "totalFees": 1098129, + "medianFee": 1.1020797417745662, + "feeRange": [ + 1.0625, + 1.0691217722793642, + 1.073436083408885, + 1.0761096766260911, + 1.080091533180778, + 1.102110739151618, + 1.1021909190121146 + ] + }, + { + "blockSize": 1363844, + "blockVSize": 997998.5, + "nTx": 1073, + "totalFees": 1023651, + "medianFee": 1.014827018121911, + "feeRange": [ + 1, + 1.003584229390681, + 1.0054683365672958, + 1.0186757215619695, + 1.0548148148148149, + 1.0548148148148149, + 1.068146618482189 + ] + }, + { + "blockSize": 1335390, + "blockVSize": 562453.5, + "nTx": 902, + "totalFees": 563772, + "medianFee": 1.0028011204481793, + "feeRange": [ + 1, + 1, + 1, + 1.0025402201524132, + 1.004231311706629, + 1.0053475935828877, + 1.0068649885583525 + ] + } + ], + "txPosition": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "position": { + "block": 0, + "vsize": 128920 + } + } +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/details_rbf/tx02_ws_tx_position.json b/frontend/cypress/fixtures/details_rbf/tx02_ws_tx_position.json new file mode 100644 index 000000000..c4a2db35a --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/tx02_ws_tx_position.json @@ -0,0 +1,9 @@ +{ + "txPosition": { + "txid": "b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698", + "position": { + "block": 0, + "vsize": 110880 + } + } +} \ No newline at end of file From b6ad17b995d3b3de6df42e802dc0a5fcb99307b9 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:19:32 +0900 Subject: [PATCH 140/534] Add accelerator fixture --- .../cypress/fixtures/details_rbf/api_accelerator_version.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 frontend/cypress/fixtures/details_rbf/api_accelerator_version.json diff --git a/frontend/cypress/fixtures/details_rbf/api_accelerator_version.json b/frontend/cypress/fixtures/details_rbf/api_accelerator_version.json new file mode 100644 index 000000000..a01c899b8 --- /dev/null +++ b/frontend/cypress/fixtures/details_rbf/api_accelerator_version.json @@ -0,0 +1,3 @@ +{ + "gitCommit": "62f80296" +} \ No newline at end of file From a0e41b31e02a46203426211332b8e3acd84b0241 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:24:59 +0900 Subject: [PATCH 141/534] Add a RBF tx tracker test --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 113 +++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index a011073bd..4e7535858 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -528,6 +528,119 @@ describe('Mainnet', () => { cy.get('.alert-mempool').should('be.visible'); }); + it('shows RBF transactions properly (mobile - tracker)', () => { + cy.mockMempoolSocketV2(); + cy.viewport('iphone-xr'); + + // API Mocks + cy.intercept('/api/v1/mining/pools/1w', { + fixture: 'details_rbf/api_mining_pools_1w.json' + }).as('api_mining_1w'); + + cy.intercept('/api/tx/242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29', { + statusCode: 404, + body: 'Transaction not found' + }).as('api_tx01_404'); + + cy.intercept('/api/v1/tx/242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29/cached', { + fixture: 'details_rbf/tx01_api_cached.json' + }).as('api_tx01_cached'); + + cy.intercept('/api/v1/tx/242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29/rbf', { + fixture: 'details_rbf/tx01_api_rbf.json' + }).as('api_tx01_rbf'); + + cy.visit('/tx/242f3fff9ca7d5aea7a7a57d886f3fa7329e24fac948598a991b3a3dd631cd29?mode=tracker'); + cy.wait('@api_tx01_rbf'); + + // Start sending mocked WS messages + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx01_ws_stratum_jobs.json' + } + } + }); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx01_ws_blocks_01.json' + } + } + }); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx01_ws_tx_replaced.json' + } + } + }); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx01_ws_mempool_blocks_01.json' + } + } + }); + + cy.get('.alert-replaced').should('be.visible'); + cy.get('.explainer').should('be.visible'); + cy.get('svg[data-icon=timeline]').should('be.visible'); + + // Second TX setup + cy.intercept('/api/tx/b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698', { + fixture: 'details_rbf/tx02_api_tx.json' + }).as('tx02_api'); + + cy.intercept('/api/v1/transaction-times?txId%5B%5D=b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698', { + fixture: 'details_rbf/tx02_api_tx_times.json' + }).as('tx02_api_tx_times'); + + cy.intercept('/api/v1/tx/b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698/rbf', { + fixture: 'details_rbf/tx02_api_rbf.json' + }).as('tx02_api_rbf'); + + cy.intercept('/api/v1/cpfp/b6a53d8a8025c0c5b194345925a99741b645cae0b1f180f0613273029f2bf698', { + fixture: 'details_rbf/tx02_api_cpfp.json' + }).as('tx02_api_cpfp'); + + // Go to the replacement tx + cy.get('.alert-replaced a').click(); + + cy.wait('@tx02_api_cpfp'); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx02_ws_tx_position.json' + } + } + }); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx02_ws_mempool_blocks_01.json' + } + } + }); + + cy.get('svg[data-icon=hourglass-half]').should('be.visible'); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'details_rbf/tx02_ws_block.json' + } + } + }); + cy.get('app-confirmations'); + cy.get('svg[data-icon=circle-check]').should('be.visible'); + }); + it('shows RBF transactions properly (desktop)', () => { cy.intercept('/api/v1/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f/cached', { fixture: 'mainnet_tx_cached.json' From 1d2d9c0be6518071167a6b5ea3238109a95a7974 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:25:14 +0900 Subject: [PATCH 142/534] Add an address poisoning attack test --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 4e7535858..6a10d2215 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -216,6 +216,31 @@ describe('Mainnet', () => { cy.get('[data-cy="tx-1"] .table-tx-vout .highlight').its('length').should('equal', 2); cy.get('[data-cy="tx-1"] .table-tx-vout .highlight').invoke('text').should('contain', `${address}`); }); + + it('highlights potential address poisoning attacks', () => { + const txid = '152a5dea805f95d6f83e50a9fd082630f542a52a076ebabdb295723eaf53fa30'; + const prefix = '1DonatePLease'; + const infix1 = 'SenderAddressXVXCmAY'; + const infix2 = '5btcToSenderXXWBoKhB'; + + cy.visit(`/tx/${txid}`); + cy.waitForSkeletonGone(); + cy.get('.alert-mempool').should('exist'); + cy.get('.poison-alert').its('length').should('equal', 2); + + cy.get('.prefix') + .should('have.length', 2) + .each(($el) => { + cy.wrap($el).should('have.text', prefix); + }); + + cy.get('.infix') + .should('have.length', 2) + .then(($infixes) => { + cy.wrap($infixes[0]).should('have.text', infix1); + cy.wrap($infixes[1]).should('have.text', infix2); + }); + }); }); describe('blocks navigation', () => { From 35d7b1c71d4a3418e40eefa03478dac7e9f26fe5 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 11:25:40 +0900 Subject: [PATCH 143/534] Import the missing ws function --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 6a10d2215..aae76f829 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -1,4 +1,5 @@ import { emitMempoolInfo, dropWebSocket } from '../../support/websocket'; +import { emitMempoolInfo, dropWebSocket, receiveWebSocketMessageFromServer } from '../../support/websocket'; const baseModule = Cypress.env('BASE_MODULE'); From 7712034c847f72f82903051a065a285be5db070d Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 12:19:00 +0900 Subject: [PATCH 144/534] Add another test for address poisioning --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 81 +++++++++++++++----- 1 file changed, 60 insertions(+), 21 deletions(-) diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index aae76f829..0d3b0a72b 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -1,4 +1,3 @@ -import { emitMempoolInfo, dropWebSocket } from '../../support/websocket'; import { emitMempoolInfo, dropWebSocket, receiveWebSocketMessageFromServer } from '../../support/websocket'; const baseModule = Cypress.env('BASE_MODULE'); @@ -218,30 +217,68 @@ describe('Mainnet', () => { cy.get('[data-cy="tx-1"] .table-tx-vout .highlight').invoke('text').should('contain', `${address}`); }); - it('highlights potential address poisoning attacks', () => { - const txid = '152a5dea805f95d6f83e50a9fd082630f542a52a076ebabdb295723eaf53fa30'; - const prefix = '1DonatePLease'; - const infix1 = 'SenderAddressXVXCmAY'; - const infix2 = '5btcToSenderXXWBoKhB'; + describe('address poisoning', () => { + it('highlights potential address poisoning attacks on outputs, prefix and infix', () => { + const txid = '152a5dea805f95d6f83e50a9fd082630f542a52a076ebabdb295723eaf53fa30'; + const prefix = '1DonatePLease'; + const infix1 = 'SenderAddressXVXCmAY'; + const infix2 = '5btcToSenderXXWBoKhB'; - cy.visit(`/tx/${txid}`); - cy.waitForSkeletonGone(); - cy.get('.alert-mempool').should('exist'); - cy.get('.poison-alert').its('length').should('equal', 2); + cy.visit(`/tx/${txid}`); + cy.waitForSkeletonGone(); + cy.get('.alert-mempool').should('exist'); + cy.get('.poison-alert').its('length').should('equal', 2); - cy.get('.prefix') - .should('have.length', 2) - .each(($el) => { - cy.wrap($el).should('have.text', prefix); - }); + cy.get('.prefix') + .should('have.length', 2) + .each(($el) => { + cy.wrap($el).should('have.text', prefix); + }); - cy.get('.infix') - .should('have.length', 2) - .then(($infixes) => { - cy.wrap($infixes[0]).should('have.text', infix1); - cy.wrap($infixes[1]).should('have.text', infix2); - }); + cy.get('.infix') + .should('have.length', 2) + .then(($infixes) => { + cy.wrap($infixes[0]).should('have.text', infix1); + cy.wrap($infixes[1]).should('have.text', infix2); + }); + }); + + it('highlights potential address poisoning attacks on inputs and outputs, prefix, infix and postfix', () => { + const txid = '44544516084ea916ff1eb69c675c693e252addbbaf77102ffff86e3979ac6132'; + const prefix = 'bc1qge8'; + const infix1 = '6gqjnk8aqs3nvv7ejrvcd4zq6qur3'; + const infix2 = 'xyxjex6zzzx5g8hh65vsel4e548p2'; + const postfix1 = '6p6e3r'; + const postfix2 = '6p6e3r'; + + cy.visit(`/tx/${txid}`); + cy.waitForSkeletonGone(); + cy.get('.alert-mempool').should('exist'); + cy.get('.poison-alert').its('length').should('equal', 2); + + cy.get('.prefix') + .should('have.length', 2) + .each(($el) => { + cy.wrap($el).should('have.text', prefix); + }); + + cy.get('.infix') + .should('have.length', 2) + .then(($infixes) => { + cy.wrap($infixes[0]).should('have.text', infix1); + cy.wrap($infixes[1]).should('have.text', infix2); + }); + + cy.get('.postfix') + .should('have.length', 2) + .then(($postfixes) => { + cy.wrap($postfixes[0]).should('include.text', postfix1); + cy.wrap($postfixes[1]).should('include.text', postfix2); + }); + + }); }); + }); describe('blocks navigation', () => { @@ -423,6 +460,7 @@ describe('Mainnet', () => { cy.get('#dropdownFees').should('be.visible'); cy.get('.btn-group').should('be.visible'); }); + it('check buttons - tablet', () => { cy.viewport('ipad-2'); cy.visit('/graphs'); @@ -431,6 +469,7 @@ describe('Mainnet', () => { cy.get('#dropdownFees').should('be.visible'); cy.get('.btn-group').should('be.visible'); }); + it('check buttons - desktop', () => { cy.viewport('macbook-16'); cy.visit('/graphs'); From 42d4cb3cc5015c195e9ebb277481261f3cc1ed91 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 13:29:39 +0900 Subject: [PATCH 145/534] Run CI workflow after merging too --- .github/workflows/ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c603c42a..864151951 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,10 +3,13 @@ name: CI Pipeline for the Backend and Frontend on: pull_request: types: [opened, review_requested, synchronize] + push: + branches: + - master jobs: backend: - if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" + if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: node: ["20", "21"] @@ -157,7 +160,7 @@ jobs: frontend: needs: cache - if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" + if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: node: ["20", "21"] @@ -245,7 +248,7 @@ jobs: VERBOSE: 1 e2e: - if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" + if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" runs-on: ubuntu-latest needs: frontend strategy: @@ -375,9 +378,8 @@ jobs: CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} - validate_docker_json: - if: "!contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')" + if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" runs-on: ubuntu-latest name: Validate generated backend Docker JSON From f0224b0bf02ca536d2fba2f90fe45d225c290bf7 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 13:42:25 +0900 Subject: [PATCH 146/534] Bump node version to v22 --- .github/workflows/ci.yml | 4 ++-- .github/workflows/e2e_parameterized.yml | 2 +- .nvmrc | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 864151951..842fe56f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: - node: ["20", "21"] + node: ["22"] flavor: ["dev", "prod"] fail-fast: false runs-on: ubuntu-latest @@ -266,7 +266,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 20 + node-version: 22 cache: "npm" cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json diff --git a/.github/workflows/e2e_parameterized.yml b/.github/workflows/e2e_parameterized.yml index da1814b84..a53677a80 100644 --- a/.github/workflows/e2e_parameterized.yml +++ b/.github/workflows/e2e_parameterized.yml @@ -151,7 +151,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 20 + node-version: 22 cache: "npm" cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json diff --git a/.nvmrc b/.nvmrc index a9b234d51..53d1c14db 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.8.0 +v22 From f41c9a0e57707cbc95f6eada02568e235f435979 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 15:45:21 +0900 Subject: [PATCH 147/534] Update missing node matrix --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 842fe56f0..68ffa840a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -163,7 +163,7 @@ jobs: if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: - node: ["20", "21"] + node: ["22"] flavor: ["dev", "prod"] fail-fast: false runs-on: ubuntu-latest From c491560ad9dc6d587930cbe1b2029feee3ecd397 Mon Sep 17 00:00:00 2001 From: orangesurf Date: Tue, 17 Dec 2024 09:54:46 +0100 Subject: [PATCH 148/534] check in new resources --- frontend/custom-river-config.json | 51 ++++++++++++++++++ frontend/src/index.mempool.river.html | 45 ++++++++++++++++ .../river/android-chrome-192x192.png | Bin 0 -> 5790 bytes .../river/android-chrome-512x512.png | Bin 0 -> 17497 bytes .../src/resources/river/apple-touch-icon.png | Bin 0 -> 5437 bytes .../src/resources/river/favicon-16x16.png | Bin 0 -> 378 bytes .../src/resources/river/favicon-32x32.png | Bin 0 -> 772 bytes frontend/src/resources/river/favicon.ico | Bin 0 -> 1390 bytes .../src/resources/river/river-preview.png | Bin 0 -> 16478 bytes frontend/src/resources/river/site.webmanifest | 1 + frontend/src/resources/riverlogo.svg | 4 ++ production/mempool-build-all | 2 +- production/mempool-start-all | 2 +- production/unfurler-config.river.json | 17 ++++++ unfurler/src/routes.ts | 22 ++++++++ 15 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 frontend/custom-river-config.json create mode 100644 frontend/src/index.mempool.river.html create mode 100644 frontend/src/resources/river/android-chrome-192x192.png create mode 100644 frontend/src/resources/river/android-chrome-512x512.png create mode 100644 frontend/src/resources/river/apple-touch-icon.png create mode 100644 frontend/src/resources/river/favicon-16x16.png create mode 100644 frontend/src/resources/river/favicon-32x32.png create mode 100644 frontend/src/resources/river/favicon.ico create mode 100644 frontend/src/resources/river/river-preview.png create mode 100644 frontend/src/resources/river/site.webmanifest create mode 100644 frontend/src/resources/riverlogo.svg create mode 100644 production/unfurler-config.river.json diff --git a/frontend/custom-river-config.json b/frontend/custom-river-config.json new file mode 100644 index 000000000..aca537adf --- /dev/null +++ b/frontend/custom-river-config.json @@ -0,0 +1,51 @@ +{ + "theme": "wiz", + "enterprise": "river", + "branding": { + "name": "river", + "title": "river", + "site_id": 22, + "header_img": "/resources/riverlogo.svg", + "footer_img": "/resources/riverlogo.svg" + }, + "dashboard": { + "widgets": [ + { + "component": "fees", + "mobileOrder": 4 + }, + { + "component": "walletBalance", + "mobileOrder": 1, + "props": { + "wallet": "RIVER" + } + }, + { + "component": "twitter", + "mobileOrder": 5, + "props": { + "handle": "River" + } + }, + { + "component": "wallet", + "mobileOrder": 2, + "props": { + "wallet": "RIVER", + "period": "all" + } + }, + { + "component": "blocks" + }, + { + "component": "walletTransactions", + "mobileOrder": 3, + "props": { + "wallet": "RIVER" + } + } + ] + } +} \ No newline at end of file diff --git a/frontend/src/index.mempool.river.html b/frontend/src/index.mempool.river.html new file mode 100644 index 000000000..536912146 --- /dev/null +++ b/frontend/src/index.mempool.river.html @@ -0,0 +1,45 @@ + + + + + + River | Invest in Bitcoin with confidence + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/resources/river/android-chrome-192x192.png b/frontend/src/resources/river/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d93e04f571b3f1720dfc96555b43f01711137ad3 GIT binary patch literal 5790 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 L8=NcDv5WXW%8(@c literal 0 HcmV?d00001 diff --git a/frontend/src/resources/river/apple-touch-icon.png b/frontend/src/resources/river/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d000039860066acff73798ad0cc094e2b47f1c GIT binary patch literal 5437 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/river/favicon-16x16.png b/frontend/src/resources/river/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..9820793f1b3c01cce28c518686fcbaf94dfca3fa GIT binary patch literal 378 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 LU}xd4CzAg^Se^e} literal 0 HcmV?d00001 diff --git a/frontend/src/resources/river/site.webmanifest b/frontend/src/resources/river/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/frontend/src/resources/river/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/frontend/src/resources/riverlogo.svg b/frontend/src/resources/riverlogo.svg new file mode 100644 index 000000000..3a6e28ce8 --- /dev/null +++ b/frontend/src/resources/riverlogo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/production/mempool-build-all b/production/mempool-build-all index 10ad179ea..3b42c08d9 100755 --- a/production/mempool-build-all +++ b/production/mempool-build-all @@ -131,7 +131,7 @@ export NVM_DIR="${HOME}/.nvm" source "${NVM_DIR}/nvm.sh" # what to look for -frontends=(mainnet liquid onbtc bitb meta) +frontends=(mainnet liquid onbtc bitb meta river) backends=(mainnet testnet testnet4 signet liquid liquidtestnet onbtc bitb) frontend_repos=() backend_repos=() diff --git a/production/mempool-start-all b/production/mempool-start-all index 9d4c6ee58..0cd43431c 100755 --- a/production/mempool-start-all +++ b/production/mempool-start-all @@ -16,7 +16,7 @@ screen -dmS x startx sleep 3 # start unfurlers for each frontend -for site in mainnet liquid onbtc bitb meta;do +for site in mainnet liquid onbtc bitb meta river;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/unfurler-config.river.json b/production/unfurler-config.river.json new file mode 100644 index 000000000..219464437 --- /dev/null +++ b/production/unfurler-config.river.json @@ -0,0 +1,17 @@ +{ + "SERVER": { + "HOST": "https://river.tk7.mempool.space", + "HTTP_PORT": 8007 + }, + "MEMPOOL": { + "HTTP_HOST": "http://127.0.0.1", + "HTTP_PORT": 7, + "NETWORK": "river" + }, + "PUPPETEER": { + "CLUSTER_SIZE": 8, + "EXEC_PATH": "/usr/local/bin/chrome", + "MAX_PAGE_AGE": 86400, + "RENDER_TIMEOUT": 3000 + } +} diff --git a/unfurler/src/routes.ts b/unfurler/src/routes.ts index dcea29cde..9bf8faa2b 100644 --- a/unfurler/src/routes.ts +++ b/unfurler/src/routes.ts @@ -333,6 +333,28 @@ export const networks = { routes: routes.lightning.routes, } } + }, + river: { + networkName: 'River', + title: 'River | Invest in Bitcoin with confidence', + description: 'Easily buy Bitcoin in minutes. Zero fees on recurring buys. Invest in Bitcoin with confidence with world-class security.', + fallbackImg: '/resources/river/river-preview.jpg', + routes: { // only dynamic routes supported + block: routes.block, + address: routes.address, + wallet: routes.wallet, + tx: routes.tx, + mining: { + title: "Mining", + routes: { + pool: routes.mining.routes.pool, + } + }, + lightning: { + title: "Lightning", + routes: routes.lightning.routes, + } + } } }; From 7d79ea82a550ea35d292db512bac0e09213bc324 Mon Sep 17 00:00:00 2001 From: orangesurf Date: Tue, 17 Dec 2024 10:08:05 +0100 Subject: [PATCH 149/534] add frontend config --- production/mempool-frontend-config.river.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 production/mempool-frontend-config.river.json diff --git a/production/mempool-frontend-config.river.json b/production/mempool-frontend-config.river.json new file mode 100644 index 000000000..e6758f392 --- /dev/null +++ b/production/mempool-frontend-config.river.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-river-config.json" +} From 97eb0dfe978fad2bc5aea0c079edd93e5e1c9755 Mon Sep 17 00:00:00 2001 From: orangesurf Date: Tue, 17 Dec 2024 15:20:19 +0100 Subject: [PATCH 150/534] Update urls --- frontend/src/index.mempool.river.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/index.mempool.river.html b/frontend/src/index.mempool.river.html index 536912146..f6b6c2e1b 100644 --- a/frontend/src/index.mempool.river.html +++ b/frontend/src/index.mempool.river.html @@ -20,14 +20,14 @@ - + - + From 05e407ff0f185d475cda545fa3c32af1de0f1d54 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 2 Apr 2025 19:26:46 +0900 Subject: [PATCH 151/534] Add a test for the RBF page updates --- frontend/cypress/e2e/mainnet/mainnet.spec.ts | 37 ++++++++++ .../cypress/fixtures/rbf_page/rbf_01.json | 37 ++++++++++ .../cypress/fixtures/rbf_page/rbf_02.json | 68 +++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 frontend/cypress/fixtures/rbf_page/rbf_01.json create mode 100644 frontend/cypress/fixtures/rbf_page/rbf_02.json diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 0d3b0a72b..a664f333c 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -561,6 +561,43 @@ describe('Mainnet', () => { }); describe('RBF transactions', () => { + it('RBF page gets updated over websockets', () => { + cy.intercept('/api/v1/replacements', { + statusCode: 200, + body: [] + }); + + cy.intercept('/api/v1/fullrbf/replacements', { + statusCode: 200, + body: [] + }); + + cy.mockMempoolSocketV2(); + + cy.visit('/rbf'); + cy.get('.no-replacements'); + cy.get('.tree').should('have.length', 0); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'rbf_page/rbf_01.json' + } + } + }); + + cy.get('.tree').should('have.length', 1); + + receiveWebSocketMessageFromServer({ + params: { + file: { + path: 'rbf_page/rbf_02.json' + } + } + }); + cy.get('.tree').should('have.length', 2); + }); + it('shows RBF transactions properly (mobile - details)', () => { cy.intercept('/api/v1/tx/21518a98d1aa9df524865d2f88c578499f524eb1d0c4d3e70312ab863508692f/cached', { fixture: 'mainnet_tx_cached.json' diff --git a/frontend/cypress/fixtures/rbf_page/rbf_01.json b/frontend/cypress/fixtures/rbf_page/rbf_01.json new file mode 100644 index 000000000..2c79f142a --- /dev/null +++ b/frontend/cypress/fixtures/rbf_page/rbf_01.json @@ -0,0 +1,37 @@ +{ + "rbfLatest": [ + { + "tx": { + "txid": "f4bae4f626036250fd00d68490e572f65f66417452003a0f4c4d76f17a9fde68", + "fee": 1185, + "vsize": 223, + "value": 41729, + "rate": 5.313901345291479, + "time": 1743587177, + "rbf": true, + "fullRbf": false, + "mined": true + }, + "time": 1743587177, + "fullRbf": true, + "replaces": [ + { + "tx": { + "txid": "12945412dfc455e0ed6049dc2ee8737756c8d9e2d9a2eb26f366cd5019a0369f", + "fee": 504, + "vsize": 222, + "value": 42410, + "rate": 2.27027027027027, + "time": 1743586081, + "rbf": true + }, + "time": 1743586081, + "interval": 1096, + "fullRbf": false, + "replaces": [] + } + ], + "mined": true + } + ] +} \ No newline at end of file diff --git a/frontend/cypress/fixtures/rbf_page/rbf_02.json b/frontend/cypress/fixtures/rbf_page/rbf_02.json new file mode 100644 index 000000000..3b5011002 --- /dev/null +++ b/frontend/cypress/fixtures/rbf_page/rbf_02.json @@ -0,0 +1,68 @@ +{ + "rbfLatest": [ + { + "tx": { + "txid": "d313b479acfbae719afb488a078e0fe0e052a67b9f65f73f7c75d3d95fd36acc", + "fee": 672, + "vsize": 167.25, + "value": 29996328, + "rate": 4.017937219730942, + "time": 1743587365, + "rbf": true, + "fullRbf": false + }, + "time": 1743587365, + "fullRbf": false, + "replaces": [ + { + "tx": { + "txid": "eb5aa786cabda307cc9642cfb9c41a3b405ac20a391eefbe54be7930bea61865", + "fee": 336, + "vsize": 167.5, + "value": 29996664, + "rate": 2.005970149253731, + "time": 1743586424, + "rbf": true + }, + "time": 1743586424, + "interval": 941, + "fullRbf": false, + "replaces": [] + } + ] + }, + { + "tx": { + "txid": "f4bae4f626036250fd00d68490e572f65f66417452003a0f4c4d76f17a9fde68", + "fee": 1185, + "vsize": 223, + "value": 41729, + "rate": 5.313901345291479, + "time": 1743587177, + "rbf": true, + "fullRbf": false, + "mined": true + }, + "time": 1743587177, + "fullRbf": true, + "replaces": [ + { + "tx": { + "txid": "12945412dfc455e0ed6049dc2ee8737756c8d9e2d9a2eb26f366cd5019a0369f", + "fee": 504, + "vsize": 222, + "value": 42410, + "rate": 2.27027027027027, + "time": 1743586081, + "rbf": true + }, + "time": 1743586081, + "interval": 1096, + "fullRbf": false, + "replaces": [] + } + ], + "mined": true + } + ] +} \ No newline at end of file From 1790c83babd9b3d4d643dc5d4bd3274767b77c71 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 2 Apr 2025 20:08:09 +0900 Subject: [PATCH 152/534] ops: Bump NodeJS to v22 for install and start scripts --- production/README.md | 4 ++-- production/install | 6 +++--- production/mempool-start-all | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/production/README.md b/production/README.md index 2805cde81..bf281fb1b 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 v20.17.0 and npm v9 from source using `nvm`: +Build Node.js v22.14.0 and npm v9 from source using `nvm`: ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | zsh source $HOME/.zshrc -nvm install v20.17.0 --shared-zlib +nvm install v22.14.0 --shared-zlib nvm alias default node ``` diff --git a/production/install b/production/install index f3bebb4e7..95b38369b 100755 --- a/production/install +++ b/production/install @@ -1116,8 +1116,8 @@ echo "[*] Installing nvm.sh from GitHub" osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh' echo "[*] Building NodeJS via nvm.sh" -osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v20.12.0 --shared-zlib' -osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm alias default 20.12.0' +osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v22.14.0 --shared-zlib' +osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm alias default 22.14.0' #################### # Tor installation # @@ -1565,7 +1565,7 @@ EOF osSudo "${UNFURL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh' echo "[*] Building NodeJS via nvm.sh" - osSudo "${UNFURL_USER}" zsh -c 'source ~/.zshrc ; nvm install v20.12.0 --shared-zlib' + osSudo "${UNFURL_USER}" zsh -c 'source ~/.zshrc ; nvm install v22.14.0 --shared-zlib' ;; esac diff --git a/production/mempool-start-all b/production/mempool-start-all index 9d4c6ee58..f6c3c76c2 100755 --- a/production/mempool-start-all +++ b/production/mempool-start-all @@ -1,7 +1,7 @@ #!/usr/bin/env zsh export NVM_DIR="$HOME/.nvm" source "$NVM_DIR/nvm.sh" -nvm use v20.12.0 +nvm use v22.14.0 # start all mempool backends that exist for site in mainnet mainnet-lightning testnet testnet-lightning testnet4 signet signet-lightning liquid liquidtestnet;do From 5d7a2d9bc2b70215067fbd8ae25eb70c7ed52d7f Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 2 Apr 2025 15:23:15 +0200 Subject: [PATCH 153/534] Animate taptree toggle --- .../taproot-address-scripts.component.html | 25 +++++--- .../taproot-address-scripts.component.ts | 63 ++++++++++++++++--- 2 files changed, 68 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html index 741f2e1d7..e28c1935f 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.html @@ -1,15 +1,20 @@ -
    +
    +
    +
    + + + + +
    -
    -
    - - - - -
    + +{{ x }} levels remaining +1 level remaining diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 9d2c99ea5..10422c7dc 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -1,4 +1,4 @@ -import { Component, ChangeDetectionStrategy, Input, OnChanges, NgZone, SimpleChanges } from '@angular/core'; +import { Component, ChangeDetectionStrategy, Input, OnChanges, NgZone, SimpleChanges, ChangeDetectorRef } from '@angular/core'; import { Router } from '@angular/router'; import { Location } from '@angular/common'; import { AddressTypeInfo } from '@app/shared/address-utils'; @@ -35,10 +35,12 @@ export class TaprootAddressScriptsComponent implements OnChanges { @Input() address: AddressTypeInfo; tree: TaprootTree; + croppedTree: TaprootTree; + croppedTreeDepth: number = 7; depth: number = 0; + depthShown: number; height: number; fullTreeShown: boolean; - maxHeight: number = 400; chartOptions: EChartsOption = {}; chartInitOptions = { @@ -50,6 +52,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { constructor( public stateService: StateService, private asmStylerPipe: AsmStylerPipe, + private cd: ChangeDetectorRef, private location: Location, private relativeUrlPipe: RelativeUrlPipe, private router: Router, @@ -60,18 +63,57 @@ export class TaprootAddressScriptsComponent implements OnChanges { if (changes.address?.currentValue.scripts) { this.buildTree(); this.prepareTree(this.tree, 0); - this.prepareChartOptions(); + this.cropTree(); + this.toggleTree(this.fullTreeShown, false); } } buildTree(): void { if (this.address?.scripts.size) { - this.tree = { name: '' }; for (const script of this.address.scripts.values()) { let { leafVersion, merklePath } = this.parseControlBlock(script.scriptPath); this.tree = this.addPathToTree(this.tree, script, leafVersion, merklePath); } - this.height = (this.depth + 1) * 40; + } + } + + cropTree(): void { + const cropNode = (node: TaprootTree, currentDepth: number) => { + if (!node) { + return; + } + if (currentDepth === this.croppedTreeDepth && node.children) { + delete node.children; + return; + } + if (node.children) { + cropNode(node.children[0], currentDepth + 1); + cropNode(node.children[1], currentDepth + 1); + } + }; + this.croppedTree = JSON.parse(JSON.stringify(this.tree)); + cropNode(this.croppedTree, 0); + } + + toggleTree(show: boolean, delay = true): void { + this.fullTreeShown = show; + this.depthShown = show ? this.depth : Math.min(this.depth, this.croppedTreeDepth); + if (show) { + this.height = (this.depthShown + 1) * 40; + setTimeout(() => { + this.prepareChartOptions(this.tree); + this.cd.markForCheck(); + }, 115); + } else { + this.prepareChartOptions(this.croppedTree); + if (!delay) { + this.height = (this.depthShown + 1) * 40; + } else { + setTimeout(() => { + this.height = (this.depthShown + 1) * 40; + this.cd.markForCheck(); + }, 200); + } } } @@ -236,8 +278,8 @@ export class TaprootAddressScriptsComponent implements OnChanges { } } - prepareChartOptions() { - if (!this.tree) { + prepareChartOptions(tree: TaprootTree) { + if (!tree) { return; } @@ -306,11 +348,12 @@ export class TaprootAddressScriptsComponent implements OnChanges { }, series: [{ type: 'tree', - data: [this.tree as any], + data: [tree as any], top: '20', bottom: '20', right: 0, left: 0, + height: Math.max(140, (this.depthShown) * 40), lineStyle: { curveness: 0.9, width: 2, @@ -326,8 +369,8 @@ export class TaprootAddressScriptsComponent implements OnChanges { }, orient: 'TB', expandAndCollapse: false, - animationDurationUpdate: 0, - animationDuration: 0, + animationDuration: 250, + animationDurationUpdate: 250, }], }; } From cd26779245900f23301dfb84af5bddb68cfaaa66 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 3 Apr 2025 07:48:04 +0000 Subject: [PATCH 154/534] Fix false positive address poisoning warnings on wallet page --- .../transactions-list/transactions-list.component.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 6f01a6e59..e52d1ba82 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -194,7 +194,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { } this.transactionsLength = this.transactions.length; - + if (!this.txPreview) { this.cacheService.setTxCache(this.transactions); } @@ -316,10 +316,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { // Check for address poisoning similarity matches this.similarityMatches.set(tx.txid, new Map()); - const comparableVouts = [ - ...tx.vout.slice(0, 20), - ...this.addresses.map(addr => ({ scriptpubkey_address: addr, scriptpubkey_type: detectAddressType(addr, this.stateService.network) })) - ].filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type)); + const comparableVouts = tx.vout.slice(0, 20).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type)); const comparableVins = tx.vin.slice(0, 20).map(v => v.prevout).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v?.scriptpubkey_type)); for (const vout of comparableVouts) { const address = vout.scriptpubkey_address; From 1baae6474be831ab783cbf82699120bf84927700 Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 3 Apr 2025 19:19:55 +0900 Subject: [PATCH 155/534] ops: Bump elements to v23.2.7 --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index 95b38369b..aadb8005e 100755 --- a/production/install +++ b/production/install @@ -378,7 +378,7 @@ ELEMENTS_REPO_URL=https://github.com/ElementsProject/elements ELEMENTS_REPO_NAME=elements ELEMENTS_REPO_BRANCH=master #ELEMENTS_LATEST_RELEASE=$(curl -s https://api.github.com/repos/ElementsProject/elements/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -ELEMENTS_LATEST_RELEASE=elements-23.2.6 +ELEMENTS_LATEST_RELEASE=elements-23.2.7 echo -n '.' BITCOIN_ELECTRS_REPO_URL=https://github.com/mempool/electrs From 19618447322340742764410c3d9f98cb377f69af Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 3 Apr 2025 12:41:57 +0200 Subject: [PATCH 156/534] nits --- .../taproot-address-scripts.component.ts | 21 ++++++++++++------- frontend/src/app/graphs/echarts.ts | 1 - 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 10422c7dc..933c4b013 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -40,6 +40,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { depth: number = 0; depthShown: number; height: number; + levelHeight: number = 40; fullTreeShown: boolean; chartOptions: EChartsOption = {}; @@ -99,7 +100,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { this.fullTreeShown = show; this.depthShown = show ? this.depth : Math.min(this.depth, this.croppedTreeDepth); if (show) { - this.height = (this.depthShown + 1) * 40; + this.height = (this.depthShown + 1) * this.levelHeight; setTimeout(() => { this.prepareChartOptions(this.tree); this.cd.markForCheck(); @@ -107,10 +108,10 @@ export class TaprootAddressScriptsComponent implements OnChanges { } else { this.prepareChartOptions(this.croppedTree); if (!delay) { - this.height = (this.depthShown + 1) * 40; + this.height = (this.depthShown + 1) * this.levelHeight; } else { setTimeout(() => { - this.height = (this.depthShown + 1) * 40; + this.height = (this.depthShown + 1) * this.levelHeight; this.cd.markForCheck(); }, 200); } @@ -150,16 +151,20 @@ export class TaprootAddressScriptsComponent implements OnChanges { const isFirstChild = left === k; const children: [TaprootTree, TaprootTree] = isFirstChild ? [node, { name: e }] : [{ name: e }, node]; - if (this.mergeBranchAtDepth(masterTree, parentHash, children, isFirstChild, merklePath.length - i - 1)) { + // Try to merge the branch to the tree at current level + if (masterTree && this.mergeBranchAtDepth(masterTree, parentHash, children, isFirstChild, merklePath.length - i - 1)) { return masterTree; } - + // If no merge is possible, go up one level and try again k = parentHash; node = { name: k, children }; - } - return node; + if (!masterTree) { + return node; + } + // We only end up here if we could not merge the script in masterTree due to malformed merkle path + console.error('Could not merge script in Taptree'); } mergeBranchAtDepth(tree: TaprootTree, target: string, children: [TaprootTree, TaprootTree], first: boolean, targetDepth: number, currentDepth = 0): boolean { @@ -353,7 +358,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { bottom: '20', right: 0, left: 0, - height: Math.max(140, (this.depthShown) * 40), + height: Math.max(140, this.depthShown * this.levelHeight), lineStyle: { curveness: 0.9, width: 2, diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index 3c65ecdcc..de3f816d4 100644 --- a/frontend/src/app/graphs/echarts.ts +++ b/frontend/src/app/graphs/echarts.ts @@ -1,6 +1,5 @@ // Import tree-shakeable echarts import * as echarts from 'echarts/core'; - import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, CustomChart, TreeChart } from 'echarts/charts'; import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, GraphicComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; From d3d7829fee3a456863c17a2b33c835f228cac310 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 3 Apr 2025 18:00:45 +0200 Subject: [PATCH 157/534] FIx pool page CSS --- .../app/components/pool/pool.component.scss | 117 +++++++++--------- 1 file changed, 61 insertions(+), 56 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.scss b/frontend/src/app/components/pool/pool.component.scss index 26e6008b6..f09ac0d65 100644 --- a/frontend/src/app/components/pool/pool.component.scss +++ b/frontend/src/app/components/pool/pool.component.scss @@ -84,74 +84,79 @@ div.scrollable { text-align: right; } } +} - .progress { - background-color: var(--secondary); +.progress { + background-color: var(--secondary); +} + +.coinbase { + width: 20%; + @media (max-width: 875px) { + display: none; } +} - .coinbase { - width: 20%; - @media (max-width: 875px) { - display: none; - } +.health { + @media (max-width: 1150px) { + display: none; } +} - .height { - width: 10%; +.height { + width: 10%; +} + +.timestamp { + @media (max-width: 875px) { + padding-left: 50px; } - - .timestamp { - @media (max-width: 875px) { - padding-left: 50px; - } - @media (max-width: 685px) { - display: none; - } + @media (max-width: 625px) { + display: none; } +} - .mined { - width: 13%; - @media (max-width: 1100px) { - display: none; - } +.mined { + width: 13%; +} + +.txs { + @media (max-width: 938px) { + display: none; } - - .txs { - padding-right: 40px; - @media (max-width: 1100px) { - padding-right: 10px; - } - @media (max-width: 875px) { - padding-right: 20px; - } - @media (max-width: 567px) { - padding-right: 10px; - } + padding-right: 40px; + @media (max-width: 1100px) { + padding-right: 10px; } - - .size { - width: 12%; - @media (max-width: 1000px) { - width: 15%; - } - @media (max-width: 875px) { - width: 20%; - } - @media (max-width: 650px) { - width: 20%; - } - @media (max-width: 450px) { - display: none; - } + @media (max-width: 875px) { + padding-right: 20px; } + @media (max-width: 567px) { + padding-right: 10px; + } +} - .scriptmessage { - overflow: hidden; - display: inline-block; - text-overflow: ellipsis; - vertical-align: middle; - width: auto; - text-align: left; +.size { + min-width: 80px; + width: 12%; + @media (max-width: 1000px) { + width: 15%; + } +} + +.scriptmessage { + max-width: 340px; + overflow: hidden; + display: inline-block; + text-overflow: ellipsis; + vertical-align: middle; + width: auto; + text-align: left; +} + +.reward { + @media (max-width: 1035px) { + display: none; } } From 22af7de5bd8ae2affd096fed97d644eac930fbc3 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 5 Apr 2025 20:03:14 +0900 Subject: [PATCH 158/534] Bump package.json versions ahead of the official release --- backend/package-lock.json | 4 ++-- backend/package.json | 4 ++-- frontend/package-lock.json | 4 ++-- frontend/package.json | 2 +- unfurler/package-lock.json | 4 ++-- unfurler/package.json | 4 ++-- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index a4963d6f0..7138c59e1 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-backend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-backend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "hasInstallScript": true, "license": "GNU Affero General Public License v3.0", "dependencies": { diff --git a/backend/package.json b/backend/package.json index bcbc0f256..f039ccad2 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", @@ -68,4 +68,4 @@ "ts-jest": "^29.1.1", "ts-node": "^10.9.1" } -} +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 932979e2b..148c08751 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-frontend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-frontend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "license": "GNU Affero General Public License v3.0", "dependencies": { "@angular-devkit/build-angular": "^17.3.1", diff --git a/frontend/package.json b/frontend/package.json index 8d4ee6e27..a8abf1d4b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", diff --git a/unfurler/package-lock.json b/unfurler/package-lock.json index 799148486..8f8373a36 100644 --- a/unfurler/package-lock.json +++ b/unfurler/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-unfurl", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-unfurl", - "version": "3.0.0", + "version": "3.2.0-dev", "dependencies": { "@types/node": "^16.11.41", "ejs": "^3.1.10", diff --git a/unfurler/package.json b/unfurler/package.json index bf3dad55b..968334f22 100644 --- a/unfurler/package.json +++ b/unfurler/package.json @@ -1,6 +1,6 @@ { "name": "mempool-unfurl", - "version": "3.1.0-dev", + "version": "3.2.0-dev", "description": "Renderer for mempool open graph link preview images", "repository": { "type": "git", @@ -32,4 +32,4 @@ "eslint-config-prettier": "^8.5.0", "prettier": "^2.7.1" } -} +} \ No newline at end of file From 6d15a58e997d577ae8730c01ad992ded18f1055f Mon Sep 17 00:00:00 2001 From: russeree Date: Sat, 5 Apr 2025 17:59:44 +0000 Subject: [PATCH 159/534] [Install] Add CKPool Install Support [Install] Standardize Variable Naming --- production/install | 101 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/production/install b/production/install index aadb8005e..e3976f292 100755 --- a/production/install +++ b/production/install @@ -43,6 +43,9 @@ CLN_INSTALL=ON # install UNFURL UNFURL_INSTALL=ON +# install CKPOOL +CKPOOL_MAINNET_INSTALL=ON + # configure 4 network instances BITCOIN_MAINNET_ENABLE=ON BITCOIN_MAINNET_MINFEE_ENABLE=ON @@ -56,6 +59,11 @@ BISQ_MAINNET_ENABLE=ON ELEMENTS_LIQUID_ENABLE=ON ELEMENTS_LIQUIDTESTNET_ENABLE=ON +# configure 3 CKPool instances +BITCOIN_MAINNET_CKPOOL=ON +BITCOIN_TESTNET_CKPOOL=ON +BITCOIN_TESTNET4_CKPOOL=ON + # enable lightmode and disable compaction to fit on 1TB SSD drive BITCOIN_ELECTRS_INSTALL=ON BITCOIN_ELECTRS_LIGHT_MODE=ON @@ -197,6 +205,18 @@ MEMPOOL_SIGNET_HTTP_PORT=8995 MEMPOOL_LIQUIDTESTNET_HTTP_HOST=127.0.0.1 MEMPOOL_LIQUIDTESTNET_HTTP_PORT=8994 +# set CKPool bitcoin mainnet port +CKPOOL_MAINNET_STRATUM_HOST=127.0.0.1 +CKPOOL_MAINNET_STRATUM_PORT=3333 + +# set CKPool bitcoin mainnet port +CKPOOL_TESTNET_STRATUM_HOST=127.0.0.1 +CKPOOL_TESTNET_STRATUM_PORT=3334 + +# set CKPool bitcoin mainnet port +CKPOOL_TESTNET4_STRATUM_HOST=127.0.0.1 +CKPOOL_TESTNET4_STRATUM_PORT=3335 + ##### OS options, should be automatically detected case $OS in @@ -283,6 +303,11 @@ BITCOIN_GROUP=bitcoin # bitcoin core data folder, needs about 300GB BITCOIN_HOME=/bitcoin +# ckpool user/group +CKPOOL_HOME=/ckpool +CKPOOL_USER=ckpool +CKPOOL_GROUP=ckpool + # bitcoin testnet data BITCOIN_TESTNET_DATA=${BITCOIN_HOME}/testnet3 # bitcoin testnet4 data @@ -367,6 +392,12 @@ BISQ_REPO_BRANCH=master BISQ_LATEST_RELEASE=master echo -n '.' +CKPOOL_URL=https://github.com/mempool/ckpool +CKPOOL_REPO_NAME=ckpool +CKPOOL_REPO_BRANCH=master +CKPOOL_LATEST_RELEASE=$(curl -s https://api.github.com/repos/mempool/ckpool/releases/latest|grep tag_name|head -1|cut -d '"' -f4) +echo -n '.' + UNFURL_REPO_URL=https://github.com/mempool/mempool UNFURL_REPO_NAME=unfurl UNFURL_REPO_BRANCH=master @@ -421,6 +452,7 @@ 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 py311-certbot-nginx mariadb1011-server) FREEBSD_PKG+=(geoipupdate redis) +FREEBSD_PKG+=(libepoll-shim) FREEBSD_UNFURL_PKG=() FREEBSD_UNFURL_PKG+=(nvidia-driver-470 chromium xinit xterm twm ja-sourcehansans-otf) @@ -1223,6 +1255,75 @@ if [ "${BITCOIN_INSTALL}" = ON ];then osSudo "${ROOT_USER}" sed -i.orig "s/__BITCOIN_RPC_PASS__/${BITCOIN_RPC_PASS}/" "${MINFEE_HOME}/bitcoin.conf" fi +####################### +# CKPool Installation # +####################### + +#CKPool cronjob installer +install_ckpool_cron() { + local network=$1 + local network_label=$2 + local network_cmd=$3 + + echo "[*] Installing CKPool ${network_label} Cron for 'ckpool' user" + case $OS in + FreeBSD) + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && (crontab -l > ${TEMP_CRON_FILE} 2>/dev/null || echo \"\" > ${TEMP_CRON_FILE})" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && echo '@reboot screen -dmS ckpool-${network} sh -c \"while true; do ${CKPOOL_HOME}/${CKPOOL_REPO_NAME}/start ${network_cmd}; sleep 1; done\"' >> ${TEMP_CRON_FILE}" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && crontab ${TEMP_CRON_FILE}" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && rm -f ${TEMP_CRON_FILE}" + ;; + Debian) + ;; + esac +} + +#CKPool binary Installer +if [ "${CKPOOL_INSTALL}" = ON ]; then + echo "[*] Creating 'ckpool' user" + osGroupCreate "${CKPOOL_GROUP}" + osUserCreate "${CKPOOL_USER}" "${CKPOOL_HOME}" "${CKPOOL_GROUP}" + osSudo "${ROOT_USER}" chsh -s `which zsh` "${CKPOOL_USER}" + + echo "[*] Creating 'ckpool' data folder" + osSudo "${ROOT_USER}" mkdir -p "${CKPOOL_HOME}" + osSudo "${ROOT_USER}" chown -R "${CKPOOL_USER}:${CKPOOL_GROUP}" "${CKPOOL_HOME}" + osSudo "${CKPOOL_USER}" touch "${CKPOOL_HOME}/.zshrc" + + echo "[*] Creating '.ckpool' directory in ckpool user's home to store config files" + osSudo "${ROOT_USER}" mkdir -p "${CKPOOL_HOME}/.ckpool" + osSudo "${ROOT_USER}" chown "${CKPOOL_USER}:${CKPOOL_GROUP}" "${CKPOOL_HOME}/.ckpool" + + echo "[*] Cloning Mempool CKPool repo from ${CKPOOL_REPO_URL}" + osSudo "${CKPOOL_USER}" git config --global advice.detachedHead false + osSudo "${CKPOOL_USER}" git clone --branch "${CKPOOL_REPO_BRANCH}" "${CKPOOL_REPO_URL}" "${CKPOOL_HOME}/${CKPOOL_REPO_NAME}" + + echo "[*] Checking out CKPOOL ${CKPOOL_LATEST_RELEASE}" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME}/${CKPOOL_REPO_NAME} && git checkout ${CKPOOL_LATEST_RELEASE}" + + echo "[*] Building CKPool from source repo" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_REPO_NAME} && ./autogen.sh --quiet" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_REPO_NAME} && ./configure CFLAGS='-O3 -march=native -flto -Wall -I/usr/local/include/libepoll-shim' LDFLAGS='-L/usr/local/lib -lepoll-shim -lpthread'" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_REPO_NAME} && gmake -j${NPROC}" + + echo "[*] Copy CKPool binarary into OS" + osSudo "${ROOT_USER}" sh -c "cd ${CKPOOL_HOME}/${CKPOOL_REPO_NAME} && cp src/ckpool /usr/local/bin" + + TEMP_CRON_FILE="tmp_cron" + + if [ "${BITCOIN_MAINNET_CKPOOL}" = ON ]; then + install_ckpool_cron "mainnet" "Mainnet" "bitcoin" + fi + + if [ "${BITCOIN_TESTNET_CKPOOL}" = ON ]; then + install_ckpool_cron "testnet" "Testnet" "testnet" + fi + + if [ "${BITCOIN_TESTNET4_CKPOOL}" = ON ]; then + install_ckpool_cron "testnet4" "Testnet4" "testnet3" + fi +fi + ######################### # Elements installation # ######################### From 77eac7c25115c08c9ef62330ade100ff2860754b Mon Sep 17 00:00:00 2001 From: russeree Date: Sun, 6 Apr 2025 01:27:34 +0000 Subject: [PATCH 160/534] [Ports] Adjust ports for CKSolo --- production/install | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/production/install b/production/install index e3976f292..e274f23b4 100755 --- a/production/install +++ b/production/install @@ -1264,12 +1264,13 @@ install_ckpool_cron() { local network=$1 local network_label=$2 local network_cmd=$3 + local port=$4 echo "[*] Installing CKPool ${network_label} Cron for 'ckpool' user" case $OS in FreeBSD) osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && (crontab -l > ${TEMP_CRON_FILE} 2>/dev/null || echo \"\" > ${TEMP_CRON_FILE})" - osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && echo '@reboot screen -dmS ckpool-${network} sh -c \"while true; do ${CKPOOL_HOME}/${CKPOOL_REPO_NAME}/start ${network_cmd}; sleep 1; done\"' >> ${TEMP_CRON_FILE}" + osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && echo '@reboot screen -dmS ckpool-${network} sh -c \"while true; do ${CKPOOL_HOME}/${CKPOOL_REPO_NAME}/start ${network_cmd} ${port}; sleep 1; done\"' >> ${TEMP_CRON_FILE}" osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && crontab ${TEMP_CRON_FILE}" osSudo "${CKPOOL_USER}" sh -c "cd ${CKPOOL_HOME} && rm -f ${TEMP_CRON_FILE}" ;; @@ -1312,15 +1313,15 @@ if [ "${CKPOOL_INSTALL}" = ON ]; then TEMP_CRON_FILE="tmp_cron" if [ "${BITCOIN_MAINNET_CKPOOL}" = ON ]; then - install_ckpool_cron "mainnet" "Mainnet" "bitcoin" + install_ckpool_cron "mainnet" "Mainnet" "bitcoin" 2333 fi if [ "${BITCOIN_TESTNET_CKPOOL}" = ON ]; then - install_ckpool_cron "testnet" "Testnet" "testnet" + install_ckpool_cron "testnet" "Testnet" "testnet" 2334 fi if [ "${BITCOIN_TESTNET4_CKPOOL}" = ON ]; then - install_ckpool_cron "testnet4" "Testnet4" "testnet3" + install_ckpool_cron "testnet4" "Testnet4" "testnet4" 2335 fi fi From 05d2aa73f85e7c9994f88a873a8cc912bc11c4f8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 6 Apr 2025 06:55:27 +0000 Subject: [PATCH 161/534] pump up monitoring frequency --- backend/src/api/bitcoin/esplora-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index 8035d92c0..30a6822d5 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -36,7 +36,7 @@ class FailoverRouter { maxHeight: number = 0; hosts: FailoverHost[]; multihost: boolean; - gitHashInterval: number = 600000; // 10 minutes + gitHashInterval: number = 60000; // 1 minute pollInterval: number = 60000; // 1 minute pollTimer: NodeJS.Timeout | null = null; pollConnection = axios.create(); From b73f93e1cde277c6c7d3f87af880fe61251bac1f Mon Sep 17 00:00:00 2001 From: wiz Date: Sun, 6 Apr 2025 17:51:14 +0900 Subject: [PATCH 162/534] ops: Use gcc to build NodeJS v22 on FreeBSD 14 --- production/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/production/install b/production/install index aadb8005e..f4b2c10ed 100755 --- a/production/install +++ b/production/install @@ -1113,10 +1113,10 @@ echo "[*] Installing Mempool crontab" osSudo "${ROOT_USER}" crontab -u "${MEMPOOL_USER}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/mempool.crontab" echo "[*] Installing nvm.sh from GitHub" -osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh' +osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | zsh' echo "[*] Building NodeJS via nvm.sh" -osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v22.14.0 --shared-zlib' +osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; CC=gcc CXX=g++ nvm install v22.14.0 --shared-zlib' osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm alias default 22.14.0' #################### From 849eebe5837ab8d8018c7ca0f2db704f740329e4 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 6 Apr 2025 08:53:35 +0000 Subject: [PATCH 163/534] Fix axios unix sockets --- backend/src/api/bitcoin/esplora-api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index 30a6822d5..6ee51fda4 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -111,7 +111,7 @@ class FailoverRouter { for (const host of this.hosts) { try { const result = await (host.socket - ? this.pollConnection.get('/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) + ? this.pollConnection.get('http://api/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) : this.pollConnection.get(host.host + '/blocks/tip/height', { timeout: config.ESPLORA.FALLBACK_TIMEOUT }) ); if (result) { @@ -288,7 +288,7 @@ class FailoverRouter { let url; if (host.socket) { axiosConfig = { socketPath: host.host, timeout: config.ESPLORA.REQUEST_TIMEOUT, responseType }; - url = path; + url = 'http://api' + path; } else { axiosConfig = { timeout: config.ESPLORA.REQUEST_TIMEOUT, responseType }; url = host.host + path; From 3df953c0a8c478951d859acaba7fbcb7c10c0653 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sun, 6 Apr 2025 18:02:22 +0900 Subject: [PATCH 164/534] Pin GitHub actions to node 22.14.0 --- .github/workflows/ci.yml | 4 ++-- .github/workflows/e2e_parameterized.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 68ffa840a..976fe5a7a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: - node: ["22"] + node: ["22.14.0"] flavor: ["dev", "prod"] fail-fast: false runs-on: ubuntu-latest @@ -163,7 +163,7 @@ jobs: if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" strategy: matrix: - node: ["22"] + node: ["22.14.0"] flavor: ["dev", "prod"] fail-fast: false runs-on: ubuntu-latest diff --git a/.github/workflows/e2e_parameterized.yml b/.github/workflows/e2e_parameterized.yml index a53677a80..8b07ffe82 100644 --- a/.github/workflows/e2e_parameterized.yml +++ b/.github/workflows/e2e_parameterized.yml @@ -43,7 +43,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node }} + node-version: 22.14.0 registry-url: "https://registry.npmjs.org" - name: Install (Prod dependencies only) @@ -151,7 +151,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 22 + node-version: 22.14.0 cache: "npm" cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json From 84c9a01b6df64d7b78faca98448e078ec882c4b6 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sun, 6 Apr 2025 18:03:03 +0900 Subject: [PATCH 165/534] Pin Node versions to 22.14.0 on the Docker images --- docker/backend/Dockerfile | 4 ++-- docker/frontend/Dockerfile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index e56b07da3..942a8f9c8 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -8,7 +8,7 @@ WORKDIR /build RUN apt-get update && \ apt-get install -y curl ca-certificates && \ curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ - apt-get install -y nodejs build-essential python3 pkg-config && \ + apt-get install -y nodejs=22.14.0-1nodesource1 build-essential python3 pkg-config && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* @@ -29,7 +29,7 @@ FROM rust:1.84-bookworm AS runtime RUN apt-get update && \ apt-get install -y curl ca-certificates && \ curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ - apt-get install -y nodejs && \ + apt-get install -y nodejs=22.14.0-1nodesource1 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index 8d97c9dc6..23c1da3d4 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-bookworm-slim AS builder +FROM node:22.14.0-bookworm-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} From c5f7d561131f20be27e408972f34c147f7f6c68a Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sun, 6 Apr 2025 23:33:53 +0900 Subject: [PATCH 166/534] Set automatic pool updates on by default --- docker/backend/start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/backend/start.sh b/docker/backend/start.sh index 8adb631da..ae0bc616f 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -26,7 +26,7 @@ __MEMPOOL_EXTERNAL_MAX_RETRY__=${MEMPOOL_EXTERNAL_MAX_RETRY:=1} __MEMPOOL_EXTERNAL_RETRY_INTERVAL__=${MEMPOOL_EXTERNAL_RETRY_INTERVAL:=0} __MEMPOOL_USER_AGENT__=${MEMPOOL_USER_AGENT:=mempool} __MEMPOOL_STDOUT_LOG_MIN_PRIORITY__=${MEMPOOL_STDOUT_LOG_MIN_PRIORITY:=info} -__MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=false} +__MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=true} __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} From 7dab8f19a2e11da7244ac4ac34fb3ce95f72c2fd Mon Sep 17 00:00:00 2001 From: wiz Date: Sun, 6 Apr 2025 23:44:06 +0900 Subject: [PATCH 167/534] docker: Add missing nginx route for /api/v1/services --- nginx-mempool.conf | 3 +++ production/install | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/nginx-mempool.conf b/nginx-mempool.conf index 2532a7082..4b12ed714 100644 --- a/nginx-mempool.conf +++ b/nginx-mempool.conf @@ -58,6 +58,9 @@ proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } + location /api/v1/services { + proxy_pass https://mempool.space; + } location /api/v1 { proxy_pass http://127.0.0.1:8999/api/v1; } diff --git a/production/install b/production/install index f4b2c10ed..1d8faa9f8 100755 --- a/production/install +++ b/production/install @@ -418,7 +418,7 @@ DEBIAN_UNFURL_PKG+=(libxdamage-dev libxrandr-dev libgbm-dev libpango1.0-dev liba FREEBSD_PKG=() FREEBSD_PKG+=(zsh sudo git git-lfs screen curl wget calc neovim) FREEBSD_PKG+=(openssh-portable py311-pip rust llvm17 jq base64 libzmq4) -FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc libevent libtool pkgconf) +FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc13 libevent libtool pkgconf) FREEBSD_PKG+=(nginx rsync py311-certbot-nginx mariadb1011-server) FREEBSD_PKG+=(geoipupdate redis) From be46532e0c9557cb5b3750601343fd5408af182f Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 7 Apr 2025 14:19:44 +0900 Subject: [PATCH 168/534] Bump version string to v3.3-dev --- backend/package-lock.json | 2 +- backend/package.json | 4 ++-- frontend/package-lock.json | 2 +- frontend/package.json | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 7138c59e1..aa10a1a11 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "3.2.0-dev", + "version": "3.3-dev", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/backend/package.json b/backend/package.json index f039ccad2..ab24e9596 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "3.2.0-dev", + "version": "3.3-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", @@ -68,4 +68,4 @@ "ts-jest": "^29.1.1", "ts-node": "^10.9.1" } -} \ No newline at end of file +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 148c08751..26c4d8358 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "3.2.0-dev", + "version": "3.3-dev", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/frontend/package.json b/frontend/package.json index a8abf1d4b..efca14cdd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "3.2.0-dev", + "version": "3.3-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", @@ -121,4 +121,4 @@ "scarfSettings": { "enabled": false } -} \ No newline at end of file +} From 9b7c52cc585dc07edf12661743a761fb18e4e03b Mon Sep 17 00:00:00 2001 From: "Portland.HODL" Date: Mon, 7 Apr 2025 00:11:56 -0700 Subject: [PATCH 169/534] [Fix] Electrs sysconf update --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index ae5883b5d..be81f91ea 100755 --- a/production/install +++ b/production/install @@ -1416,7 +1416,7 @@ if [ "${BITCOIN_ELECTRS_INSTALL}" = ON ];then case $OS in FreeBSD) echo "[*] Patching Bitcoin Electrs code for FreeBSD" - osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" + osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_HOME}/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sysconf-0.3.4\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" #osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/new_index/\" && sed -i.bak -e s/Snappy/None/ db.rs && rm db.rs.bak" #osSudo "${BITCOIN_USER}" sh -c "cd \"${BITCOIN_ELECTRS_HOME}/src/bin/\" && sed -i.bak -e 's/from_secs(5)/from_secs(1)/' electrs.rs && rm electrs.rs.bak" ;; From 8a110432572082a3ba6c805515e011d081a5170c Mon Sep 17 00:00:00 2001 From: "Portland.HODL" Date: Mon, 7 Apr 2025 00:48:41 -0700 Subject: [PATCH 170/534] [Fix] use bash instead of Zsh --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index be81f91ea..d243b45f4 100755 --- a/production/install +++ b/production/install @@ -1145,7 +1145,7 @@ echo "[*] Installing Mempool crontab" osSudo "${ROOT_USER}" crontab -u "${MEMPOOL_USER}" "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/mempool.crontab" echo "[*] Installing nvm.sh from GitHub" -osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | zsh' +osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash' echo "[*] Building NodeJS via nvm.sh" osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; CC=gcc CXX=g++ nvm install v22.14.0 --shared-zlib' From 8fbdaf665fd6e5fa5fcd45a346dd006e40f795f5 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 8 Apr 2025 17:39:26 +0900 Subject: [PATCH 171/534] [accelerator] fix card on file final payment step ui --- .../accelerate-checkout.component.html | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 4601823dc..652d991f2 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -499,9 +499,13 @@ } @else if (step === 'googlepay') {
    } @else if (step === 'cardonfile') { -
    - - {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.brand }} {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }} +
    + @if (['VISA', 'MASTERCARD', 'JCB', 'DISCOVER', 'DISCOVER_DINERS', 'AMERICAN_EXPRESS'].includes(estimate?.availablePaymentMethods?.cardOnFile?.card?.brand)) { + + } @else { + + } + {{ estimate?.availablePaymentMethods?.cardOnFile?.card?.last_4 }}
    } @if (loadingCashapp || loadingApplePay || loadingGooglePay || loadingCardOnFile) { From c9a9d0e3dd5ab41e17d855db968a9d738235e5fc Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 8 Apr 2025 17:55:22 +0900 Subject: [PATCH 172/534] [accelerator] fix auto scroll after clicking on the main "accelerate" cta --- .../accelerate-checkout/accelerate-checkout.component.ts | 5 +---- frontend/src/app/components/tracker/tracker.component.html | 1 - frontend/src/app/components/tracker/tracker.component.ts | 4 ---- .../app/components/transaction/transaction.component.html | 1 - .../src/app/components/transaction/transaction.component.ts | 2 -- 5 files changed, 1 insertion(+), 12 deletions(-) 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 fda32e065..958a27787 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -61,7 +61,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Input() accelerating: boolean = false; @Input() miningStats: MiningStats; @Input() eta: ETA; - @Input() scrollEvent: boolean; @Input() applePayEnabled: boolean = false; @Input() googlePayEnabled: boolean = true; @Input() cardOnFileEnabled: boolean = true; @@ -191,9 +190,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } ngOnChanges(changes: SimpleChanges): void { - if (changes.scrollEvent && this.scrollEvent) { - this.scrollToElement('acceleratePreviewAnchor', 'start'); - } if (changes.accelerating && this.accelerating) { this.moveToStep('success', true); } @@ -214,6 +210,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this._step === 'checkout') { this.insertSquare(); this.enterpriseService.goal(8); + this.scrollToElementWithTimeout('acceleratePreviewAnchor', 'start', 100); } if (this._step === 'checkout' && this.canPayWithBitcoin) { this.btcpayInvoiceFailed = false; diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index 1eef206d1..a7b8972a2 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -130,7 +130,6 @@ [accelerating]="isAcceleration" [miningStats]="miningStats" [eta]="eta" - [scrollEvent]="scrollIntoAccelPreview" (unavailable)="eligibleForAcceleration = false" class="w-100" > diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index e18d9a082..1d6706fae 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -121,7 +121,6 @@ export class TrackerComponent implements OnInit, OnDestroy { acceleratorAvailable: boolean = this.stateService.env.ACCELERATOR && this.stateService.network === ''; eligibleForAcceleration: boolean = false; accelerationFlowCompleted = false; - scrollIntoAccelPreview = false; auditEnabled: boolean = this.stateService.env.AUDIT && this.stateService.env.BASE_MODULE === 'mempool' && this.stateService.env.MINING_DASHBOARD === true; enterpriseInfo: any; @@ -735,9 +734,6 @@ export class TrackerComponent implements OnInit, OnDestroy { return; } this.accelerationFlowCompleted = false; - if (this.showAccelerationSummary) { - this.scrollIntoAccelPreview = true; - } return false; } diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 7fd8c2b52..eb4453453 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -87,7 +87,6 @@ [accelerating]="isAcceleration" [eta]="eta" [miningStats]="miningStats" - [scrollEvent]="scrollIntoAccelPreview" [showDetails]="showAccelerationDetails" [noCTA]="true" (hasDetails)="setHasAccelerationDetails($event)" diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index b5d3752ae..423c86530 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -155,7 +155,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { accelerationFlowCompleted = false; showAccelerationDetails = false; hasAccelerationDetails = false; - scrollIntoAccelPreview = false; auditEnabled: boolean = this.stateService.env.AUDIT && this.stateService.env.BASE_MODULE === 'mempool' && this.stateService.env.MINING_DASHBOARD === true; isMempoolSpaceBuild = this.stateService.isMempoolSpaceBuild; @@ -831,7 +830,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { document.location.hash = '#accelerate'; this.openAccelerator(); - this.scrollIntoAccelPreview = true; return false; } From c7c1824aac273864c8f2f4931afd21bb7079419d Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn <100320+knorrium@users.noreply.github.com> Date: Tue, 8 Apr 2025 03:44:10 -0700 Subject: [PATCH 173/534] Continue to tag Docker builds as latest --- .github/workflows/on-tag.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 1447ec4ab..4a6882b81 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -105,8 +105,9 @@ jobs: --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ + --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ --output "type=registry,push=true" \ --build-arg commitHash=$SHORT_SHA \ - ./${{ matrix.service }}/ \ No newline at end of file + ./${{ matrix.service }}/ From 9f13a4b6b4e4e6126eaafe088f371188e8505010 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 9 Apr 2025 06:40:40 +0000 Subject: [PATCH 174/534] Fix network change bug on stratum pages --- frontend/src/app/services/state.service.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 7f8f81744..ed9728ec0 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -327,6 +327,8 @@ export class StateService { this.networkChanged$.subscribe((network) => { this.transactions$ = new BehaviorSubject(null); + this.stratumJobs$ = new BehaviorSubject>({}); + this.stratumJobUpdate$.next({ state: {} }); this.blocksSubject$.next([]); }); From be2c57e020b29d3fda403700f96c00e44c02ae47 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 9 Apr 2025 07:06:31 +0000 Subject: [PATCH 175/534] preview stratum coinbase transactions --- .../app/components/pool/pool.component.html | 7 ++- .../stratum-list/stratum-list.component.html | 4 +- .../transaction-raw.component.html | 34 ++++++++------ .../transaction/transaction-raw.component.ts | 47 +++++++++++++++++++ 4 files changed, 76 insertions(+), 16 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index 35bad3af7..bd82c151d 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -219,7 +219,12 @@ - + diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html index 24801cf2c..3de251b09 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html @@ -45,7 +45,9 @@ } diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 35701889b..85b04d361 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -19,7 +19,11 @@ @if (transaction && !error && !isLoading) {
    -

    Preview Transaction

    + @if (isCoinbase) { +

    Preview Coinbase

    + } @else { +

    Preview Transaction

    + } @@ -39,19 +43,21 @@
    -
    - - - - This transaction is stored locally in your browser. Broadcast it to add it to the mempool. - - - Redirecting to transaction page... - - - - -
    + @if (!isCoinbase) { +
    + + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + + Redirecting to transaction page... + + + + +
    + } @if (!hasPrevouts) {
    diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 2e4dd4868..a4d20b040 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -36,7 +36,9 @@ export class TransactionRawComponent implements OnInit, OnDestroy { isLoadingBroadcast: boolean; errorBroadcast: string; successBroadcast: boolean; + isCoinbase: boolean; broadcastSubscription: Subscription; + fragmentSubscription: Subscription; isMobile: boolean; @ViewChild('graphContainer') @@ -77,6 +79,21 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.pushTxForm = this.formBuilder.group({ txRaw: ['', Validators.required], }); + + this.fragmentSubscription = this.route.fragment.subscribe((fragment) => { + if (fragment) { + const params = new URLSearchParams(fragment); + const hex = params.get('hex'); + if (hex) { + this.pushTxForm.get('txRaw').setValue(hex); + this.decodeTransaction(); + } + const offline = params.get('offline'); + if (offline) { + this.offlineMode = offline === 'true'; + } + } + }); } async decodeTransaction(): Promise { @@ -184,6 +201,14 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.transaction = tx; this.rawHexTransaction = hex; + this.isCoinbase = this.transaction.vin[0].is_coinbase; + + // Update URL fragment with hex data + this.router.navigate([], { + fragment: this.getCurrentFragments(), + replaceUrl: true + }); + this.transaction.flags = getTransactionFlags(this.transaction, this.cpfpInfo, null, null, this.stateService.network); this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; if (this.transaction.sigops >= 0) { @@ -256,6 +281,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.filters = []; this.hasPrevouts = false; this.missingPrevouts = []; + this.offlineMode = false; this.stateService.markBlock$.next({}); this.mempoolBlocksSubscription?.unsubscribe(); this.broadcastSubscription?.unsubscribe(); @@ -264,6 +290,10 @@ export class TransactionRawComponent implements OnInit, OnDestroy { resetForm() { this.resetState(); this.pushTxForm.get('txRaw').setValue(''); + this.router.navigate([], { + fragment: '', + replaceUrl: true + }); } @HostListener('window:resize', ['$event']) @@ -306,8 +336,24 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.graphHeight = Math.min(360, this.maxInOut * 80); } + getCurrentFragments() { + // build a fragment param string from current state + const params = new URLSearchParams(); + if (this.offlineMode) { + params.set('offline', 'true'); + } + if (this.rawHexTransaction) { + params.set('hex', this.rawHexTransaction); + } + return params.toString(); + } + onOfflineModeChange(e): void { this.offlineMode = !e.target.checked; + this.router.navigate([], { + fragment: this.getCurrentFragments(), + replaceUrl: true + }); } ngOnDestroy(): void { @@ -315,6 +361,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.flowPrefSubscription?.unsubscribe(); this.stateService.markBlock$.next({}); this.broadcastSubscription?.unsubscribe(); + this.fragmentSubscription?.unsubscribe(); } } From 17cc2ded4ced3903fb5bd062fa8ee10fb2235ec0 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Apr 2025 13:01:10 +0200 Subject: [PATCH 176/534] Enable offline mode when previewing coinbase --- frontend/src/app/components/pool/pool.component.html | 2 +- .../stratum/stratum-list/stratum-list.component.html | 2 +- .../app/components/transaction/transaction-raw.component.ts | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index bd82c151d..cc9e85a07 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -220,7 +220,7 @@
    diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index a4d20b040..efdabf036 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -86,12 +86,14 @@ export class TransactionRawComponent implements OnInit, OnDestroy { const hex = params.get('hex'); if (hex) { this.pushTxForm.get('txRaw').setValue(hex); - this.decodeTransaction(); } const offline = params.get('offline'); if (offline) { this.offlineMode = offline === 'true'; } + if (this.pushTxForm.get('txRaw').value) { + this.decodeTransaction(); + } } }); } @@ -281,7 +283,6 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.filters = []; this.hasPrevouts = false; this.missingPrevouts = []; - this.offlineMode = false; this.stateService.markBlock$.next({}); this.mempoolBlocksSubscription?.unsubscribe(); this.broadcastSubscription?.unsubscribe(); @@ -290,6 +291,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { resetForm() { this.resetState(); this.pushTxForm.get('txRaw').setValue(''); + this.offlineMode = false; this.router.navigate([], { fragment: '', replaceUrl: true From 5555e5c0b02993ca6aa916be39c2b3fc0b9326be Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Mon, 7 Apr 2025 15:36:04 +0900 Subject: [PATCH 177/534] Switch hammer to pickaxe --- .../master-page/master-page.component.html | 4 ++-- .../master-page/master-page.component.scss | 17 ++++++++++++++--- .../svg-images/svg-images.component.html | 7 +++++++ frontend/src/app/shared/shared.module.ts | 3 +-- 4 files changed, 24 insertions(+), 7 deletions(-) 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 436cf3c67..291f96f1f 100644 --- a/frontend/src/app/components/master-page/master-page.component.html +++ b/frontend/src/app/components/master-page/master-page.component.html @@ -86,8 +86,8 @@ - - + @@ -341,7 +341,7 @@

    Also, if you are using our Marks in a way described in the sections "Uses for Which We Are Granting a License," you must include the following trademark attribution at the foot of the webpage where you have used the Mark (or, if in a book, on the credits page), on any packaging or labeling, and on advertising or marketing materials:

    -

    "The Mempool Open Source Project®, Mempool Accelerator®, Mempool Enterprise®, Mempool Liquidity™, Mempool®, 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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

    +

    "The Mempool Open Source Project®, Mempool Accelerator®, Mempool Enterprise®, Mempool Wallet™, Mempool®, 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;, the Mempool Accelerator logo;, the Mempool Goggles 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, and are used with permission. Mempool Space K.K. has no affiliation with and does not sponsor or endorse the information provided herein."

  • What to Do When You See Abuse
  • From c34090dbb1ab2616aea6eb62abd57eae9d5784dc Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 12 Apr 2025 12:47:25 +0200 Subject: [PATCH 182/534] Fix liquid scroll overflow --- .../timezone-selector/timezone-selector.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/timezone-selector/timezone-selector.component.html b/frontend/src/app/components/timezone-selector/timezone-selector.component.html index bd959ac3d..f763bffef 100644 --- a/frontend/src/app/components/timezone-selector/timezone-selector.component.html +++ b/frontend/src/app/components/timezone-selector/timezone-selector.component.html @@ -1,4 +1,4 @@ -
    +
    Coinbase tag + + Coinbase tag   + + + Clean Prevhash Job Received - {{ row.job.height }} + + {{ row.job.height }} +
    - + Coinbase tag   diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html index 3de251b09..406db5461 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html @@ -45,7 +45,7 @@ - + {{ row.job.height }}
    The Mempool Open Source Project
    Mempool Accelerator
    Mempool Enterprise
    Mempool Liquidity
    Mempool Wallet
    Mempool
    mempool.space
    Be your own explorer
    + + + + + + + + + + + + + + +
    TreasuryBTC BalanceUSD Value
    +
    +
    + {{i + 1}} +
    +
    {{wallet}} + + + +
    +
    -
    \ No newline at end of file +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    + +
    +
    USD Value
    -
    -
    - {{i + 1}} -
    -
    {{wallet}} - - - -
    +
    +
    + {{i + 1}} +
    +
    {{wallet}} + + + +
    - -
    -
    +
    +
    Treasury Distribution
    - +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    Balance History
    +
    +
    diff --git a/frontend/src/app/components/treasuries/treasuries.component.scss b/frontend/src/app/components/treasuries/treasuries.component.scss index 6dad9a9d7..fd19065ff 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.scss +++ b/frontend/src/app/components/treasuries/treasuries.component.scss @@ -107,11 +107,13 @@ } .table-cell-position { width: 10%; + min-width: 50px; text-align: center; .position-container { display: flex; align-items: center; justify-content: center; + min-width: 40px; .color-swatch { width: 16px; height: 16px; @@ -124,7 +126,7 @@ } } .table-cell-name { - width: 40%; + width: 25%; text-align: left; } .table-cell-balance { @@ -135,6 +137,12 @@ width: 25%; text-align: right; } + + @media (max-width: 1080px) { + .table-cell-value { + display: none; + } + } } .position-container { diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index 8c58ee503..0159681f0 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -7,7 +7,7 @@ import { catchError, map, scan, shareReplay, startWith, switchMap, tap } from 'r import { WalletStats } from '@app/shared/wallet-stats'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Router } from '@angular/router'; - +import { chartColors } from '@app/app.constants'; @Component({ selector: 'app-treasuries', templateUrl: './treasuries.component.html', @@ -83,8 +83,8 @@ export class TreasuriesComponent implements OnInit, OnDestroy { mempool_stats: { funded_txo_count: 0, funded_txo_sum: 0, - spent_txo_count: 0, - spent_txo_sum: 0, + spent_txo_count: 0, + spent_txo_sum: 0, tx_count: 0 }, }; @@ -270,12 +270,12 @@ export class TreasuriesComponent implements OnInit, OnDestroy { } getWalletColor(wallet: string): string { - // Use a consistent color for each wallet based on its position in the sorted list - const colors = [ - '#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0', '#9966FF', '#FF9F40', - ]; const index = this.currentSortedWallets.indexOf(wallet); - return colors[index % colors.length]; + return chartColors[index % chartColors.length]; + } + + onNavigateToWallet(wallet: string): void { + this.navigateToWallet(wallet); } navigateToWallet(wallet: string): void { diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index fe6f41b55..a6847af3b 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -39,6 +39,7 @@ import { WalletComponent } from '@components/wallet/wallet.component'; import { WalletPreviewComponent } from '@components/wallet/wallet-preview.component'; import { AddressGraphComponent } from '@components/address-graph/address-graph.component'; import { TreasuriesGraphComponent } from '@components/treasuries/treasuries-graph/treasuries-graph.component'; +import { TreasuriesPieComponent } from '@components/treasuries/treasuries-pie/treasuries-pie.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'; @@ -85,6 +86,7 @@ import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; BlockHealthGraphComponent, AddressGraphComponent, TreasuriesGraphComponent, + TreasuriesPieComponent, UtxoGraphComponent, ActiveAccelerationBox, AddressesTreemap, From bf3467bf9e12beb65f19eeb236cabd3a275d2361 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 5 May 2025 22:00:47 +0000 Subject: [PATCH 222/534] Add treasuries API --- backend/src/api/services/services-routes.ts | 10 +-- backend/src/api/services/wallets.ts | 32 +++++++++ .../treasuries-graph.component.ts | 71 ++++++++++--------- .../treasuries-pie.component.ts | 53 ++++++++------ .../treasuries/treasuries.component.html | 20 +++--- .../treasuries/treasuries.component.ts | 59 ++++++++------- .../src/app/interfaces/node-api.interface.ts | 7 ++ frontend/src/app/services/api.service.ts | 8 +-- 8 files changed, 154 insertions(+), 106 deletions(-) diff --git a/backend/src/api/services/services-routes.ts b/backend/src/api/services/services-routes.ts index 95c5989fe..422219d82 100644 --- a/backend/src/api/services/services-routes.ts +++ b/backend/src/api/services/services-routes.ts @@ -7,7 +7,7 @@ class ServicesRoutes { public initRoutes(app: Application): void { app .get(config.MEMPOOL.API_URL_PREFIX + 'wallet/:walletId', this.$getWallet) - .get(config.MEMPOOL.API_URL_PREFIX + 'wallets', this.$getWallets) + .get(config.MEMPOOL.API_URL_PREFIX + 'treasuries', this.$getTreasuries) ; } @@ -28,12 +28,12 @@ class ServicesRoutes { } } - private async $getWallets(req: Request, res: Response): Promise { + private async $getTreasuries(req: Request, res: Response): Promise { try { - const wallets = await WalletApi.getWallets(); - res.status(200).send(wallets); + const treasuries = await WalletApi.getTreasuries(); + res.status(200).send(treasuries); } catch (e) { - handleError(req, res, 500, 'Failed to get wallets'); + handleError(req, res, 500, 'Failed to get treasuries'); } } } diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index a03df9c5d..b7f81af92 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -26,9 +26,17 @@ interface Wallet { lastPoll: number; } +interface Treasury { + id: number, + name: string, + wallet: string, + enterprise: string, +} + const POLL_FREQUENCY = 5 * 60 * 1000; // 5 minutes class WalletApi { + private treasuries: Treasury[] = []; private wallets: Record = {}; private syncing = false; private lastSync = 0; @@ -65,6 +73,8 @@ class WalletApi { } this.wallets = data.wallets; + this.treasuries = data.treasuries || []; + // Reset lastSync time to force transaction history refresh for (const wallet of Object.values(this.wallets)) { wallet.lastPoll = 0; @@ -90,6 +100,7 @@ class WalletApi { const cacheData = { cacheSchemaVersion: this.cacheSchemaVersion, wallets: this.wallets, + treasuries: this.treasuries, }; await fsPromises.writeFile( @@ -130,6 +141,10 @@ class WalletApi { return Object.keys(this.wallets); } + public getTreasuries(): Treasury[] { + return this.treasuries?.filter(treasury => !!this.wallets[treasury.wallet]) || []; + } + // resync wallet addresses from the services backend async $syncWallets(): Promise { if (!config.WALLETS.ENABLED || this.syncing) { @@ -162,9 +177,26 @@ class WalletApi { } } } + + // update list of treasuries + const treasuriesResponse = await axios.get(config.MEMPOOL_SERVICES.API + `/treasuries`); + console.log(treasuriesResponse.data); + this.treasuries = treasuriesResponse.data || []; } catch (e) { logger.err(`Error updating active wallets: ${(e instanceof Error ? e.message : e)}`); } + + try { + // update list of active treasuries + this.lastSync = Date.now(); + const response = await axios.get(config.MEMPOOL_SERVICES.API + `/treasuries`); + const treasuries: Treasury[] = response.data; + if (treasuries) { + this.treasuries = treasuries; + } + } catch (e) { + logger.err(`Error updating active treasuries: ${(e instanceof Error ? e.message : e)}`); + } } for (const walletKey of Object.keys(this.wallets)) { diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 095038f63..2073ecc8f 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -1,16 +1,14 @@ -import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption } from '@app/graphs/echarts'; +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; +import { EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest } from 'rxjs'; import { tap } from 'rxjs/operators'; import { AddressTxSummary } from '@interfaces/electrs.interface'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; -import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { StateService } from '@app/services/state.service'; -import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; import { SeriesOption } from 'echarts'; import { WalletStats } from '@app/shared/wallet-stats'; import { chartColors } from '@app/app.constants'; +import { Treasury } from '../../../interfaces/node-api.interface'; // export const treasuriesPalette = [ @@ -44,7 +42,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { @Input() walletStats: Record; @Input() walletSummaries$: Observable>; @Input() selectedWallets: Record = {}; - @Input() wallets: string[] = []; + @Input() treasuries: Treasury[] = []; @Input() height: number = 400; @Input() right: number | string = 10; @Input() left: number | string = 70; @@ -57,6 +55,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { adjustedLeft: number = 70; adjustedRight: number = 10; walletData: Record = {}; + seriesNameToLabel: Record = {}; hoverData: any[] = []; subscription: Subscription; @@ -74,12 +73,8 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { constructor( @Inject(LOCALE_ID) public locale: string, public stateService: StateService, - private router: Router, private amountShortenerPipe: AmountShortenerPipe, private cd: ChangeDetectorRef, - private relativeUrlPipe: RelativeUrlPipe, - private fiatCurrencyPipe: FiatCurrencyPipe, - private zone: NgZone, ) {} ngOnInit() { @@ -122,13 +117,13 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { processWalletData(walletSummaries: Record): void { this.walletData = {}; - Object.entries(walletSummaries).forEach(([walletId, summary]) => { - if (!summary || !summary.length) return; + this.treasuries.forEach(treasury => { + if (!walletSummaries[treasury.wallet] || !walletSummaries[treasury.wallet].length) return; - const total = this.walletStats[walletId] ? this.walletStats[walletId].balance : summary.reduce((acc, tx) => acc + tx.value, 0); + const total = this.walletStats[treasury.wallet] ? this.walletStats[treasury.wallet].balance : walletSummaries[treasury.wallet].reduce((acc, tx) => acc + tx.value, 0); let runningTotal = total; - const processedData = summary.map(tx => { + const processedData = walletSummaries[treasury.wallet].map(tx => { const balance = runningTotal; runningTotal -= tx.value; return { @@ -138,7 +133,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { }; }).reverse(); - this.walletData[walletId] = processedData + this.walletData[treasury.wallet] = processedData .filter(({ tx }) => tx.txid !== undefined) .map(({ time, balance, tx }) => [time, balance, tx]); @@ -146,11 +141,11 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { const now = Date.now(); const start = now - (periodSeconds[this.period] * 1000); - const fullData = [...this.walletData[walletId]]; + const fullData = [...this.walletData[treasury.wallet]]; - this.walletData[walletId] = this.walletData[walletId].filter(d => d[0] >= start); + this.walletData[treasury.wallet] = this.walletData[treasury.wallet].filter(d => d[0] >= start); - if (this.walletData[walletId].length === 0 || this.walletData[walletId][0][0] > start) { + if (this.walletData[treasury.wallet].length === 0 || this.walletData[treasury.wallet][0][0] > start) { // Find the most recent balance at or before the period start let startBalance = 0; for (let i = fullData.length - 1; i >= 0; i--) { @@ -161,19 +156,25 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { } // Add a data point at the period start with the correct historical balance - this.walletData[walletId].unshift([start, startBalance, { placeholder: true }]); + this.walletData[treasury.wallet].unshift([start, startBalance, { placeholder: true }]); } } // Add current point - this.walletData[walletId].push([Date.now(), total, { current: true }]); + this.walletData[treasury.wallet].push([Date.now(), total, { current: true }]); }); } prepareChartOptions(): void { // Prepare legend data - const legendData = this.wallets.map(walletId => ({ - name: walletId, + + this.seriesNameToLabel = {}; + for (const treasury of this.treasuries) { + this.seriesNameToLabel[treasury.wallet] = treasury.enterprise || treasury.name; + } + + const legendData = this.treasuries.map(treasury => ({ + name: treasury.wallet, inactiveColor: 'var(--grey)', textStyle: { color: 'white', @@ -185,8 +186,8 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { let maxValue = 0; let minValue = Number.MAX_SAFE_INTEGER; - this.wallets.forEach(walletId => { - const data = this.walletData[walletId]; + this.treasuries.forEach(treasury => { + const data = this.walletData[treasury.wallet]; if (data) { data.forEach(point => { const value = point[1] || (point.value && point.value[1]) || 0; @@ -201,13 +202,13 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { } // Prepare series data - const series: SeriesOption[] = this.wallets.map((walletId, index) => ({ - name: walletId, + const series: SeriesOption[] = this.treasuries.map((treasury, index) => ({ + name: treasury.wallet, yAxisIndex: 0, showSymbol: false, symbol: 'circle', symbolSize: 8, - data: this.walletData[walletId] || [], + data: this.walletData[treasury.wallet] || [], areaStyle: undefined, triggerLineEvent: true, type: 'line', @@ -227,8 +228,8 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { legend: this.showLegend ? { data: legendData, selected: this.selectedWallets, - formatter: function (name) { - return name; + formatter: (name) => { + return this.seriesNameToLabel[name]; } } : undefined, tooltip: { @@ -261,13 +262,13 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { tooltip += `
    ${date}
    `; // Get all active wallet IDs from the selected wallets - const activeWalletIds: { walletId: string, index: number }[] = this.wallets - .map((walletId, index) => ({ walletId, index })) - .filter(({ walletId }) => this.selectedWallets[walletId] && this.walletData[walletId]); + const activeTreasuries: { treasury: Treasury, index: number }[] = this.treasuries + .map((treasury, index) => ({ treasury, index })) + .filter(({ treasury }) => this.selectedWallets[treasury.wallet] && this.walletData[treasury.wallet]); // For each active wallet, find and display the most recent balance - activeWalletIds.forEach(({ walletId, index }) => { - const walletPoints = this.walletData[walletId]; + activeTreasuries.forEach(({ treasury, index }) => { + const walletPoints = this.walletData[treasury.wallet]; if (!walletPoints || !walletPoints.length) { return; } @@ -300,7 +301,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { const marker = ``; tooltip += `
    - ${marker} ${walletId}: + ${marker} ${treasury.enterprise || treasury.name}: ${this.formatBTC(balance)}
    `; } diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index c2da96a40..6c5336502 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -1,15 +1,14 @@ -import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, Input, NgZone, OnChanges, SimpleChanges, ChangeDetectorRef, EventEmitter, Output } from '@angular/core'; -import { Router } from '@angular/router'; +import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, Input, OnChanges, SimpleChanges, ChangeDetectorRef, EventEmitter, Output } from '@angular/core'; import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs'; import { StateService } from '@app/services/state.service'; -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'; import { WalletStats } from '@app/shared/wallet-stats'; import { AddressTxSummary } from '@interfaces/electrs.interface'; import { chartColors } from '@app/app.constants'; import { formatNumber } from '@angular/common'; +import { Treasury } from '@interfaces/node-api.interface'; @Component({ selector: 'app-treasuries-pie', @@ -23,8 +22,8 @@ export class TreasuriesPieComponent implements OnChanges { @Input() walletStats: Record; @Input() walletSummaries$: Observable>; @Input() selectedWallets: Record = {}; - @Input() wallets: string[] = []; - @Output() navigateToWallet: EventEmitter = new EventEmitter(); + @Input() treasuries: Treasury[] = []; + @Output() navigateToTreasury: EventEmitter = new EventEmitter(); chartOptions: EChartsOption = {}; chartInitOptions = { @@ -41,8 +40,6 @@ export class TreasuriesPieComponent implements OnChanges { constructor( @Inject(LOCALE_ID) public locale: string, public stateService: StateService, - private router: Router, - private zone: NgZone, private cd: ChangeDetectorRef, ) { } @@ -81,13 +78,13 @@ export class TreasuriesPieComponent implements OnChanges { processWalletData(walletSummaries: Record): void { this.walletBalance = {}; - - Object.entries(walletSummaries).forEach(([walletId, summary]) => { + for (const treasury of this.treasuries) { + const summary = walletSummaries[treasury.wallet]; if (summary?.length) { - const total = this.walletStats[walletId] ? this.walletStats[walletId].balance : summary.reduce((acc, tx) => acc + tx.value, 0); - this.walletBalance[walletId] = total; + const total = this.walletStats[treasury.wallet] ? this.walletStats[treasury.wallet].balance : summary.reduce((acc, tx) => acc + tx.value, 0); + this.walletBalance[treasury.wallet] = total; } - }); + } } generateChartSeriesData(): PieSeriesOption[] { @@ -108,15 +105,25 @@ export class TreasuriesPieComponent implements OnChanges { const treasuriesTotal = Object.values(this.walletBalance).reduce((acc, v) => acc + v, 0); const total = this.mode === 'relative' ? treasuriesTotal : 2099999997690000; - const entries = this.wallets.map((id, index) => ({ - id, - balance: this.walletBalance[id], - share: (this.walletBalance[id] / total) * 100, + const entries: { + treasury?: any, + id: string, + label: string, + balance: number, + share: number, + color: string, + }[] = this.treasuries.map((treasury, index) => ({ + treasury, + id: treasury.wallet, + label: treasury.enterprise || treasury.name, + balance: this.walletBalance[treasury.wallet], + share: (this.walletBalance[treasury.wallet] / total) * 100, color: chartColors[index % chartColors.length], })); if (this.mode === 'all') { entries.unshift({ id: 'remaining', + label: 'Remaining', balance: (total - treasuriesTotal), share: ((total - treasuriesTotal) / total) * 100, color: 'orange' @@ -125,7 +132,7 @@ export class TreasuriesPieComponent implements OnChanges { console.log('ALL! ', entries); } - const otherEntry = { id: 'other', balance: 0, share: 0 }; + const otherEntry = { id: 'other', label: 'Other', balance: 0, share: 0 }; entries.forEach((entry) => { if (entry.share < sliceThreshold) { @@ -144,6 +151,9 @@ export class TreasuriesPieComponent implements OnChanges { color: 'var(--tooltip-grey)', alignTo: 'edge', edgeDistance: edgeDistance, + formatter: () => { + return entry.label; + } }, tooltip: { show: !isMobile(), @@ -155,11 +165,11 @@ export class TreasuriesPieComponent implements OnChanges { }, borderColor: '#000', formatter: () => { - return `${entry.id} (${entry.share.toFixed(2)}%)
    + return `${entry.label} (${entry.share.toFixed(2)}%)
    ${formatNumber(entry.balance / 100_000_000, this.locale, '1.3-3')} BTC
    `; } }, - data: entry.id as any, + data: entry.treasury, } as PieSeriesOption); }); @@ -191,7 +201,6 @@ export class TreasuriesPieComponent implements OnChanges { ${formatNumber(otherEntry.balance, this.locale, '1.3-3')}
    `; } }, - data: 9999 as any, } as PieSeriesOption); } @@ -254,10 +263,10 @@ export class TreasuriesPieComponent implements OnChanges { this.chartInstance = ec; this.chartInstance.on('click', (e) => { - if (e.data.data === 9999) { // "Other" + if (!e.data.data) { return; } - this.navigateToWallet.emit(e.data.data); + this.navigateToTreasury.emit(e.data.data); }); } diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index 5a1a5f416..9744f37c4 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -13,22 +13,22 @@ USD Value - - +
    -
    +
    {{i + 1}}
    - {{wallet}} + {{ treasury.enterprise || treasury.name }} - + - +
    @@ -46,10 +46,10 @@ [walletStats]="walletStats" [walletSummaries$]="walletSummaries$" [selectedWallets]="selectedWallets" - [wallets]="currentSortedWallets" + [treasuries]="currentSortedTreasuries" [height]="375" mode="relative" - (navigateToWallet)="onNavigateToWallet($event)" + (navigateToTreasury)="onNavigateToTreasury($event)" />
    @@ -66,7 +66,7 @@ [walletStats]="walletStats" [walletSummaries$]="walletSummaries$" [selectedWallets]="selectedWallets" - [wallets]="currentSortedWallets" + [treasuries]="currentSortedTreasuries" [height]="400" [right]="10" [left]="70" diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index 0159681f0..ac8b6581c 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -5,22 +5,22 @@ import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { catchError, map, scan, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; import { WalletStats } from '@app/shared/wallet-stats'; -import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Router } from '@angular/router'; import { chartColors } from '@app/app.constants'; +import { Treasury } from '@interfaces/node-api.interface'; @Component({ selector: 'app-treasuries', templateUrl: './treasuries.component.html', styleUrls: ['./treasuries.component.scss'] }) export class TreasuriesComponent implements OnInit, OnDestroy { - wallets: string[] = []; + treasuries: Treasury[] = []; walletSummaries$: Observable>; selectedWallets: Record = {}; isLoading = true; error: any; walletSubscriptions: Subscription[] = []; - currentSortedWallets: string[] = []; + currentSortedTreasuries: Treasury[] = []; // Individual wallet data walletObservables: Record>> = {}; @@ -28,28 +28,27 @@ export class TreasuriesComponent implements OnInit, OnDestroy { individualWalletSummaries: Record> = {}; walletStatsObservables: Record> = {}; walletStats$: Observable>; - sortedWallets$: Observable; + sortedTreasuries$: Observable; constructor( private apiService: ApiService, private stateService: StateService, - private electrsApiService: ElectrsApiService, private router: Router, ) {} ngOnInit() { // Fetch the list of wallets from the API - this.apiService.getWallets$().pipe( + this.apiService.getTreasuries$().pipe( catchError(err => { - console.error('Error loading wallets list:', err); + console.error('Error loading treasuries list:', err); return of([]); }) - ).subscribe(wallets => { - this.wallets = wallets; + ).subscribe(treasuries => { + this.treasuries = treasuries; // Initialize all wallets as enabled by default - this.wallets.forEach(wallet => { - this.selectedWallets[wallet] = true; + this.treasuries.forEach(treasury => { + this.selectedWallets[treasury.wallet] = true; }); // Set up wallet data after we have the wallet list @@ -58,16 +57,16 @@ export class TreasuriesComponent implements OnInit, OnDestroy { } private setupWalletData() { - this.wallets.forEach(walletName => { - this.walletObservables[walletName] = this.apiService.getWallet$(walletName).pipe( + this.treasuries.forEach(treasury => { + this.walletObservables[treasury.wallet] = this.apiService.getWallet$(treasury.wallet).pipe( catchError((err) => { - console.log(`Error loading wallet ${walletName}:`, err); + console.log(`Error loading wallet ${treasury.wallet}:`, err); return of({}); }), shareReplay(1), ); - this.walletAddressesObservables[walletName] = this.walletObservables[walletName].pipe( + this.walletAddressesObservables[treasury.wallet] = this.walletObservables[treasury.wallet].pipe( map(wallet => { const walletInfo: Record = {}; for (const address of Object.keys(wallet || {})) { @@ -127,7 +126,7 @@ export class TreasuriesComponent implements OnInit, OnDestroy { )), ); - this.individualWalletSummaries[walletName] = this.walletObservables[walletName].pipe( + this.individualWalletSummaries[treasury.wallet] = this.walletObservables[treasury.wallet].pipe( switchMap(wallet => this.stateService.walletTransactions$.pipe( startWith([]), scan((summaries, newTransactions: Transaction[]) => { @@ -174,7 +173,7 @@ export class TreasuriesComponent implements OnInit, OnDestroy { )) ); - this.walletStatsObservables[walletName] = this.walletObservables[walletName].pipe( + this.walletStatsObservables[treasury.wallet] = this.walletObservables[treasury.wallet].pipe( switchMap(wallet => { const walletStats = new WalletStats( Object.values(wallet || {}).map(w => w?.stats || {}), @@ -232,22 +231,22 @@ export class TreasuriesComponent implements OnInit, OnDestroy { }) ); - this.sortedWallets$ = this.walletStats$.pipe( + this.sortedTreasuries$ = this.walletStats$.pipe( map(walletStats => { - return [...this.wallets].sort((a, b) => { - const balanceA = walletStats[a]?.balance || 0; - const balanceB = walletStats[b]?.balance || 0; + return [...this.treasuries].sort((a, b) => { + const balanceA = walletStats[a.wallet]?.balance || 0; + const balanceB = walletStats[b.wallet]?.balance || 0; return balanceB - balanceA; }); }), tap(sortedWallets => { // Update selectedWallets to maintain the same order const newSelectedWallets: Record = {}; - sortedWallets.forEach(wallet => { - newSelectedWallets[wallet] = this.selectedWallets[wallet] ?? true; + sortedWallets.forEach(treasury => { + newSelectedWallets[treasury.wallet] = this.selectedWallets[treasury.wallet] ?? true; }); this.selectedWallets = newSelectedWallets; - this.currentSortedWallets = sortedWallets; + this.currentSortedTreasuries = sortedWallets; }) ); } @@ -269,17 +268,17 @@ export class TreasuriesComponent implements OnInit, OnDestroy { }); } - getWalletColor(wallet: string): string { - const index = this.currentSortedWallets.indexOf(wallet); + getTreasuryColor(treasury: Treasury): string { + const index = this.currentSortedTreasuries.indexOf(treasury); return chartColors[index % chartColors.length]; } - onNavigateToWallet(wallet: string): void { - this.navigateToWallet(wallet); + onNavigateToTreasury(treasury: Treasury): void { + this.navigateToTreasury(treasury); } - navigateToWallet(wallet: string): void { - this.router.navigate(['/wallet', wallet]); + navigateToTreasury(treasury: Treasury): void { + this.router.navigate(['/wallet', treasury.wallet]); } ngOnDestroy() { diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 05f0855a9..29a021dfa 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -481,3 +481,10 @@ export interface WalletAddress { stats: ChainStats; transactions: AddressTxSummary[]; } + +export interface Treasury { + id: number, + name: string, + wallet: string, + enterprise: string, +} diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index dcd09f0fe..285060bff 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -1,7 +1,7 @@ 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, SubmitPackageResult } from '../interfaces/node-api.interface'; + RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, WalletAddress, Treasury, SubmitPackageResult } from '../interfaces/node-api.interface'; import { BehaviorSubject, Observable, catchError, filter, map, of, shareReplay, take, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { Transaction } from '@interfaces/electrs.interface'; @@ -523,9 +523,9 @@ export class ApiService { ); } - getWallets$(): Observable { - return this.httpClient.get( - this.apiBaseUrl + this.apiBasePath + `/api/v1/wallets` + getTreasuries$(): Observable { + return this.httpClient.get( + this.apiBaseUrl + this.apiBasePath + `/api/v1/treasuries` ); } From 6a901342a5bd4925da8018c7e6a56a3421bc154f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 9 Apr 2025 09:48:41 +0000 Subject: [PATCH 223/534] simple sighash highlighting --- .../transaction-raw.component.html | 2 +- .../transactions-list.component.html | 47 +++++- .../transactions-list.component.scss | 115 ++++++++++++++ .../transactions-list.component.ts | 43 +++++ frontend/src/app/shared/script.utils.ts | 3 + frontend/src/app/shared/shared.module.ts | 3 +- frontend/src/app/shared/transaction.utils.ts | 149 ++++++++++++++++++ 7 files changed, 352 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 85b04d361..2da08a569 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -147,7 +147,7 @@
    - +

    Details

    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 1f2250d68..243151185 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -28,7 +28,8 @@ @@ -54,6 +55,30 @@ + @if (signatures) { + +
    + @if (tx['_sigs'][vindex].length === 0) { + + + + } @else { + @for (sig of tx['_sigs'][vindex]; track sig.signature; let idx = $index) { + @if (idx < 10) { + + + + } + } + @if (tx['_sigs'][vindex].length > 10) { + + +{{ tx['_sigs'][vindex].length - 10 }} + + } + } +
    + + }
    Coinbase (Newly Generated Coins)
    {{ vin.scriptsig | hex2ascii }}
    @@ -106,15 +131,19 @@ + @if (signatures) { + + } - + @@ -201,7 +230,7 @@ - -
    +
    + @@ -335,7 +366,7 @@ - - + diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index b31a14535..953167945 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -15,7 +15,7 @@ import { OrdApiService } from '@app/services/ord-api.service'; import { Inscription } from '@app/shared/ord/inscription.utils'; import { Etching, Runestone } from '@app/shared/ord/rune.utils'; import { ADDRESS_SIMILARITY_THRESHOLD, AddressMatch, AddressSimilarity, AddressType, AddressTypeInfo, checkedCompareAddressStrings, detectAddressType } from '@app/shared/address-utils'; -import { processInputSignatures, Sighash, SigInfo } from '../../shared/transaction.utils'; +import { processInputSignatures, Sighash, SigInfo, SighashLabels } from '@app/shared/transaction.utils'; @Component({ selector: 'app-transactions-list', @@ -62,15 +62,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { selectedSig: { txIndex: number, vindex: number, sig: SigInfo } | null = null; sigHighlights: { vin: boolean[], vout: boolean[] } = { vin: [], vout: [] }; - sighashLabels: { [sighash: string]: string } = { - '0': 'SIGHASH_DEFAULT', - '1': 'SIGHASH_ALL', - '2': 'SIGHASH_NONE', - '3': 'SIGHASH_SINGLE', - '129': 'SIGHASH_ALL | ACP', - '130': 'SIGHASH_NONE | ACP', - '131': 'SIGHASH_SINGLE | ACP', - }; + sighashLabels = SighashLabels; constructor( public stateService: StateService, diff --git a/frontend/src/app/shared/components/asm/asm.component.html b/frontend/src/app/shared/components/asm/asm.component.html new file mode 100644 index 000000000..a1f2801e9 --- /dev/null +++ b/frontend/src/app/shared/components/asm/asm.component.html @@ -0,0 +1,30 @@ +
    + @for (instruction of instructions; track instruction.instruction) { + OP_{{instruction.instruction}} + @for (arg of instruction.args; track arg) { + + + + + + {{arg.slice(0, -2)}}{{arg.slice(-2)}} + + + {{ arg }} + + + + {{ arg }} + + } +
    + } +
    diff --git a/frontend/src/app/shared/components/asm/asm.component.scss b/frontend/src/app/shared/components/asm/asm.component.scss new file mode 100644 index 000000000..ce9b2b22a --- /dev/null +++ b/frontend/src/app/shared/components/asm/asm.component.scss @@ -0,0 +1,53 @@ +.sig { + cursor: pointer; + + + &.sighash-0 { + --sigColor: var(--green); + } + &.sighash-1 { + --sigColor: var(--green); + } + &.sighash-2 { + --sigColor: gold; + } + &.sighash-3 { + --sigColor: cornflowerblue; + } + &.sighash-129 { + --sigColor: darkviolet; + } + &.sighash-130 { + --sigColor: darkorange; + } + &.sighash-131 { + --sigColor: var(--pink); + } + &.sig-no-lock { + --sigColor: var(--red); + } + color: var(--sigColor); + + &:hover, &.hovered { + color: color-mix(in srgb, var(--sigColor) 60%, white); + } + + ::ng-deep svg path { + pointer-events: auto; + } +} + +.sig-key { + position: absolute; + top: 0; + left: 0; + transition: transform 0.2s ease; + pointer-events: none; + + &.sig-inline { + position: relative; + pointer-events: auto; + margin-left: 4px; + margin-right: -4px; + } +} \ No newline at end of file diff --git a/frontend/src/app/shared/components/asm/asm.component.ts b/frontend/src/app/shared/components/asm/asm.component.ts new file mode 100644 index 000000000..66ae5df4b --- /dev/null +++ b/frontend/src/app/shared/components/asm/asm.component.ts @@ -0,0 +1,178 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core'; +import { SigInfo, SighashLabels } from '@app/shared/transaction.utils'; + +@Component({ + selector: 'app-asm', + templateUrl: './asm.component.html', + styleUrls: ['./asm.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AsmComponent { + @Input() asm: string; + @Input() crop: number = 0; + @Input() annotations: { + signatures: Record, + selectedSig: SigInfo | null + } = { + signatures: {}, + selectedSig: null + }; + @Output() showSigInfo = new EventEmitter(); + @Output() hideSigInfo = new EventEmitter(); + + instructions: { instruction: string, args: string[] }[] = []; + sighashLabels: Record = SighashLabels; + + ngOnInit(): void { + this.parseASM(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['asm']) { + this.parseASM(); + } + } + + parseASM(): void { + let instructions = this.asm.split('OP_'); + // trim instructions to a whole number of instructions with at most `crop` characters total + if (this.crop) { + let chars = 0; + for (let i = 0; i < instructions.length; i++) { + chars += instructions[i].length + 3; + if (chars > this.crop) { + instructions = instructions.slice(0, i); + break; + } + } + } + this.instructions = instructions.filter(instruction => instruction.trim() !== '').map(instruction => { + const parts = instruction.split(' '); + return { + instruction: parts[0], + args: parts.slice(1) + }; + }); + } + + doShowSigInfo(sig: SigInfo): void { + this.showSigInfo.emit(sig); + } + + doHideSigInfo(): void { + this.hideSigInfo.emit(); + } + + readonly opcodeStyles: Map = new Map([ + // Constants + ['0', 'constants'], + ['FALSE', 'constants'], + ['TRUE', 'constants'], + ...Array.from({length: 75}, (_, i) => [`PUSHBYTES_${i + 1}`, 'constants']), + ['PUSHDATA1', 'constants'], + ['PUSHDATA2', 'constants'], + ['PUSHDATA4', 'constants'], + ['PUSHNUM_NEG1', 'constants'], + ...Array.from({length: 16}, (_, i) => [`PUSHNUM_${i + 1}`, 'constants']), + + // Control flow + ['NOP', 'control'], + ['IF', 'control'], + ['NOTIF', 'control'], + ['ELSE', 'control'], + ['ENDIF', 'control'], + ['VERIFY', 'control'], + ...Array.from({length: 70}, (_, i) => [`RETURN_${i + 186}`, 'control']), + + // Stack + ['TOALTSTACK', 'stack'], + ['FROMALTSTACK', 'stack'], + ['IFDUP', 'stack'], + ['DEPTH', 'stack'], + ['DROP', 'stack'], + ['DUP', 'stack'], + ['NIP', 'stack'], + ['OVER', 'stack'], + ['PICK', 'stack'], + ['ROLL', 'stack'], + ['ROT', 'stack'], + ['SWAP', 'stack'], + ['TUCK', 'stack'], + ['2DROP', 'stack'], + ['2DUP', 'stack'], + ['3DUP', 'stack'], + ['2OVER', 'stack'], + ['2ROT', 'stack'], + ['2SWAP', 'stack'], + + // String + ['CAT', 'splice'], + ['SUBSTR', 'splice'], + ['LEFT', 'splice'], + ['RIGHT', 'splice'], + ['SIZE', 'splice'], + + // Logic + ['INVERT', 'logic'], + ['AND', 'logic'], + ['OR', 'logic'], + ['XOR', 'logic'], + ['EQUAL', 'logic'], + ['EQUALVERIFY', 'logic'], + + // Arithmetic + ['1ADD', 'arithmetic'], + ['1SUB', 'arithmetic'], + ['2MUL', 'arithmetic'], + ['2DIV', 'arithmetic'], + ['NEGATE', 'arithmetic'], + ['ABS', 'arithmetic'], + ['NOT', 'arithmetic'], + ['0NOTEQUAL', 'arithmetic'], + ['ADD', 'arithmetic'], + ['SUB', 'arithmetic'], + ['MUL', 'arithmetic'], + ['DIV', 'arithmetic'], + ['MOD', 'arithmetic'], + ['LSHIFT', 'arithmetic'], + ['RSHIFT', 'arithmetic'], + ['BOOLAND', 'arithmetic'], + ['BOOLOR', 'arithmetic'], + ['NUMEQUAL', 'arithmetic'], + ['NUMEQUALVERIFY', 'arithmetic'], + ['NUMNOTEQUAL', 'arithmetic'], + ['LESSTHAN', 'arithmetic'], + ['GREATERTHAN', 'arithmetic'], + ['LESSTHANOREQUAL', 'arithmetic'], + ['GREATERTHANOREQUAL', 'arithmetic'], + ['MIN', 'arithmetic'], + ['MAX', 'arithmetic'], + ['WITHIN', 'arithmetic'], + + // Crypto + ['RIPEMD160', 'crypto'], + ['SHA1', 'crypto'], + ['SHA256', 'crypto'], + ['HASH160', 'crypto'], + ['HASH256', 'crypto'], + ['CODESEPARATOR', 'crypto'], + ['CHECKSIG', 'crypto'], + ['CHECKSIGVERIFY', 'crypto'], + ['CHECKMULTISIG', 'crypto'], + ['CHECKMULTISIGVERIFY', 'crypto'], + ['CHECKSIGADD', 'crypto'], + + // Locktime + ['CLTV', 'locktime'], + ['CSV', 'locktime'], + + // Reserved + ['RESERVED', 'reserved'], + ['VER', 'reserved'], + ['VERIF', 'reserved'], + ['VERNOTIF', 'reserved'], + ['RESERVED1', 'reserved'], + ['RESERVED2', 'reserved'], + ...Array.from({length: 10}, (_, i) => [`NOP${i + 1}`, 'reserved']) + ] as [string, string][]); +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 89f2c4ef8..28d19a256 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -18,6 +18,7 @@ import { Hex2asciiPipe } from '@app/shared/pipes/hex2ascii/hex2ascii.pipe'; import { Decimal2HexPipe } from '@app/shared/pipes/decimal2hex/decimal2hex.pipe'; import { FeeRoundingPipe } from '@app/shared/pipes/fee-rounding/fee-rounding.pipe'; import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; +import { AsmComponent } from '@app/shared/components/asm/asm.component'; import { AbsolutePipe } from '@app/shared/pipes/absolute/absolute.pipe'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { ScriptpubkeyTypePipe } from '@app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe'; @@ -147,6 +148,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c NoSanitizePipe, Hex2asciiPipe, AsmStylerPipe, + AsmComponent, AbsolutePipe, BytesPipe, VbytesPipe, diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index d51231125..ecf392ff4 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -104,6 +104,16 @@ export type SighashValue = (SighashFlag.SINGLE & SighashFlag.ANYONECANPAY) | (SighashFlag.ALL & SighashFlag.NONE); +export const SighashLabels: Record = { + '0': 'SIGHASH_DEFAULT', + '1': 'SIGHASH_ALL', + '2': 'SIGHASH_NONE', + '3': 'SIGHASH_SINGLE', + '129': 'SIGHASH_ALL | ACP', + '130': 'SIGHASH_NONE | ACP', + '131': 'SIGHASH_SINGLE | ACP', +}; + export interface SigInfo { signature: string; sighash: SighashValue; @@ -172,7 +182,7 @@ export function extractDERSignaturesASM(script_asm: string): SigInfo[] { if (isDERSig(hexData)) { const sighash = decodeSighashFlag(parseInt(hexData.slice(-2), 16)); signatures.push({ - signature: hexData.slice(0, -2), // Remove sighash byte + signature: hexData, sighash }); } From 773037b85777d53f642fddbe0636ecbd5cc75bf7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 21 Apr 2025 14:57:11 +0000 Subject: [PATCH 227/534] handle many signatures --- .../transactions-list.component.html | 8 ++-- .../transactions-list.component.scss | 41 +++++++++++-------- 2 files changed, 29 insertions(+), 20 deletions(-) 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 92f576856..e25e2fec5 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -63,8 +63,8 @@ } @else { - @for (sig of tx['_sigs'][vindex]; track sig.signature; let idx = $index) { - @if (idx < 10) { + @for (sig of tx['_sigs'][vindex].slice(0, 7); track sig.signature; let idx = $index) { + @if (idx < 7) { } } - @if (tx['_sigs'][vindex].length > 10) { + @if (tx['_sigs'][vindex].length > 7) { - +{{ tx['_sigs'][vindex].length - 10 }} + +{{ tx['_sigs'][vindex].length - 7 }} } } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 1e083ff8f..7e1327e2e 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -52,18 +52,26 @@ .sig-td:hover { .sig-stack { .sig-key { - @for $i from 1 through 10 { + @for $i from 1 through 8 { &:nth-child(#{$i}) { transform: translate(#{($i - 1) * 6}px, #{($i - 1) * 6}px); } } } + + .sig-overflow { + opacity: 1; + transform: translate(30px, 40px); + } } } .sig { cursor: pointer; + &.sig-overflow { + opacity: 0; + } &.sighash-0 { --sigColor: var(--green); @@ -91,16 +99,18 @@ } color: var(--sigColor); - @for $i from 1 through 10 { - &:nth-child(#{$i}) { - transform: translate(#{($i - 1) * 3}px, #{($i - 1) * 3}px); - color: color-mix(in srgb, var(--sigColor) #{100 - ($i - 1) * 10} + '%', black); - z-index: #{10 - $i}; + &.sig-key { + @for $i from 1 through 8 { + &:nth-child(#{$i}) { + transform: translate(#{($i - 1) * 3}px, #{($i - 1) * 3}px); + color: color-mix(in srgb, var(--sigColor) #{100 - ($i - 1) * 10} + '%', black); + z-index: #{10 - $i}; + } } - } - @for $i from 4 through 10 { - &:nth-child(#{$i}) { - transform: translate(9px, 9px); + @for $i from 4 through 8 { + &:nth-child(#{$i}) { + transform: translate(9px, 9px); + } } } @@ -131,14 +141,13 @@ // background-color: var(--tertiary); color: white; border-radius: 50%; - width: 20px; - height: 20px; - display: flex; - align-items: center; - justify-content: center; font-size: 10px; font-weight: bold; - z-index: 1; + padding: 5px; + margin-left: 10px; + margin-right: 10px; + display: block; + transition: transform 0.2s ease, opacity 0.2s ease; } .mobile-bottomcol { From b3af3820ecd0957b59b197e9e17ccbe3d0c191a5 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 5 May 2025 23:56:07 +0000 Subject: [PATCH 228/534] Support for sighash display preferences --- .../transaction-raw.component.html | 2 +- .../transactions-list.component.html | 28 +++---- .../transactions-list.component.ts | 78 ++++++++++++++++--- frontend/src/app/services/state.service.ts | 5 ++ 4 files changed, 89 insertions(+), 24 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 2da08a569..fbc0d8e90 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -147,7 +147,7 @@ - +

    Details

    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 e25e2fec5..0942ba8a9 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -55,21 +55,21 @@ - @if (signatures) { + @if (tx['_showSignatures']) {
    - @if (signatures) { + @if (tx['_showSignatures']) { } -
    +
    @if (tx['_sigs'][vindex].length === 0) { - + } @else { @for (sig of tx['_sigs'][vindex]; track sig.signature; let idx = $index) { @if (idx < 10) { - + } } @if (tx['_sigs'][vindex].length > 10) { - + +{{ tx['_sigs'][vindex].length - 10 }} } @@ -159,27 +165,47 @@
    Witness - +

    + + + + + @if (witness.length > 1000) { - @if (!showFullWitness[vindex][i]) { + @if (!showFullWitness[vindex][windex]) { {{ witness | slice:0:1000 }} } @else { {{ witness }} } } @else if (witness) { - {{ witness }} + + + {{witness.slice(0, -2)}}{{witness.slice(-2)}} + + + + {{ witness }} + } @else { <empty> }

    @if (witness.length > 1000) {
    - @if (!showFullWitness[vindex][i]) { + @if (!showFullWitness[vindex][windex]) { ... } -
    ScriptSig (ASM) + +
    ScriptSig (HEX)
    - @if (tx['_sigs'][vindex].length === 0) { - + @if (tx['_sigs'][vindex].length === 0 && signaturesMode === 'all') { + - } @else { + } @else if (showSig(tx['_sigs'][vindex])) { @for (sig of tx['_sigs'][vindex].slice(0, 7); track sig.signature; let idx = $index) { @if (idx < 7) { @@ -77,7 +77,7 @@ } } @if (tx['_sigs'][vindex].length > 7) { - + +{{ tx['_sigs'][vindex].length - 7 }} } @@ -141,7 +141,7 @@ 'sigged': selectedSig && selectedSig.txIndex === i && sigHighlights.vin[vindex], }">
    @@ -149,7 +149,7 @@
    + @@ -174,12 +174,12 @@ - -

    - + + [ngbTooltip]="sighashLabels[sigInfo.sig.sighash]"> @@ -190,13 +190,13 @@ {{ witness }} } } @else if (witness) { - + {{witness.slice(0, -2)}}{{witness.slice(-2)}} + [ngbTooltip]="sighashLabels[sigInfo.sig.sighash]">{{witness.slice(-2)}} @@ -263,7 +263,7 @@

    +
    + diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 953167945..93d5c7760 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, Input, ChangeDetectionStrategy, OnChanges, Output, EventEmitter, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '@app/services/state.service'; +import { Component, OnInit, Input, ChangeDetectionStrategy, OnChanges, Output, EventEmitter, ChangeDetectorRef, OnDestroy } from '@angular/core'; +import { StateService, SignaturesMode } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; import { Observable, ReplaySubject, BehaviorSubject, merge, Subscription, of, forkJoin } from 'rxjs'; import { Outspend, Transaction, Vin, Vout } from '@interfaces/electrs.interface'; @@ -16,6 +16,8 @@ import { Inscription } from '@app/shared/ord/inscription.utils'; import { Etching, Runestone } from '@app/shared/ord/rune.utils'; import { ADDRESS_SIMILARITY_THRESHOLD, AddressMatch, AddressSimilarity, AddressType, AddressTypeInfo, checkedCompareAddressStrings, detectAddressType } from '@app/shared/address-utils'; import { processInputSignatures, Sighash, SigInfo, SighashLabels } from '@app/shared/transaction.utils'; +import { ActivatedRoute } from '@angular/router'; +import { SighashFlag } from '../../shared/transaction.utils'; @Component({ selector: 'app-transactions-list', @@ -23,7 +25,7 @@ import { processInputSignatures, Sighash, SigInfo, SighashLabels } from '@app/sh styleUrls: ['./transactions-list.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) -export class TransactionsListComponent implements OnInit, OnChanges { +export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { network = ''; nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId; showMoreIncrement = 1000; @@ -40,13 +42,16 @@ export class TransactionsListComponent implements OnInit, OnChanges { @Input() rowLimit = 12; @Input() blockTime: number = 0; // Used for price calculation if all the transactions are in the same block @Input() txPreview = false; - @Input() signatures = true; + @Input() forceSignaturesMode: SignaturesMode = null; @Output() loadMore = new EventEmitter(); latestBlock$: Observable; outspendsSubscription: Subscription; currencyChangeSubscription: Subscription; + networkSubscription: Subscription; + signaturesSubscription: Subscription; + queryParamsSubscription: Subscription; currency: string; refreshOutspends$: ReplaySubject = new ReplaySubject(); refreshChannels$: ReplaySubject = new ReplaySubject(); @@ -64,6 +69,10 @@ export class TransactionsListComponent implements OnInit, OnChanges { sigHighlights: { vin: boolean[], vout: boolean[] } = { vin: [], vout: [] }; sighashLabels = SighashLabels; + signaturesPreference: SignaturesMode = null; + signaturesOverride: SignaturesMode = null; + signaturesMode: SignaturesMode = 'interesting'; + constructor( public stateService: StateService, private cacheService: CacheService, @@ -74,11 +83,29 @@ export class TransactionsListComponent implements OnInit, OnChanges { private ref: ChangeDetectorRef, private priceService: PriceService, private storageService: StorageService, - ) { } + private route: ActivatedRoute, + ) { + this.signaturesMode = this.forceSignaturesMode || this.stateService.signaturesMode$.value; + } ngOnInit(): void { this.latestBlock$ = this.stateService.blocks$.pipe(map((blocks) => blocks[0])); - this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.networkSubscription = this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.signaturesSubscription = this.stateService.signaturesMode$.subscribe((mode) => { + this.signaturesMode = mode; + this.updateSignaturesMode(); + }); + + this.queryParamsSubscription = this.route.queryParams.subscribe((params) => { + console.log('query params', params); + if (params['sigs'] && ['all', 'interesting', 'none'].includes(params['sigs'])) { + this.signaturesOverride = params['sigs'] as SignaturesMode; + this.updateSignaturesMode(); + } else { + this.signaturesOverride = null; + this.updateSignaturesMode(); + } + }); if (this.network === 'liquid' || this.network === 'liquidtestnet') { this.assetsService.getAssetsMinimalJson$.subscribe((assets) => { @@ -206,12 +233,12 @@ export class TransactionsListComponent implements OnInit, OnChanges { } const confirmedTxs = this.transactions.filter((tx) => tx.status.confirmed).length; + this.transactions.forEach((tx) => { tx['@voutLimit'] = true; tx['@vinLimit'] = true; - if (tx['addressValue'] !== undefined) { - return; - } + tx['_showSignatures'] = false; + tx['_interestingSignatures'] = false; if (this.addresses?.length) { const addressIn = tx.vout.map(v => { @@ -293,6 +320,11 @@ export class TransactionsListComponent implements OnInit, OnChanges { }); return map; }, {}); + + if (!tx['_interestingSignatures']) { + tx['_interestingSignatures'] = tx['_sigs'].some(sigs => sigs.some(sig => this.sigIsInteresting(sig))); + } + tx['_showSignatures'] = this.shouldShowSignatures(tx); } tx.largeInput = tx.largeInput || tx.vin.some(vin => (vin?.prevout?.value > 1000000000)); @@ -541,8 +573,36 @@ export class TransactionsListComponent implements OnInit, OnChanges { this.ref.markForCheck(); } + updateSignaturesMode(): void { + this.signaturesMode = this.signaturesOverride || this.forceSignaturesMode || this.signaturesPreference || 'interesting'; + for (const tx of this.transactions) { + tx['_showSignatures'] = this.shouldShowSignatures(tx); + } + } + + showSig(sigs: SigInfo[]): boolean { + return this.signaturesMode === 'all' || (this.signaturesMode === 'interesting' && sigs.some(sig => this.sigIsInteresting(sig))); + } + + sigIsInteresting(sig: SigInfo): boolean { + return sig.sighash !== SighashFlag.DEFAULT && sig.sighash !== SighashFlag.ALL; + } + + shouldShowSignatures(tx): boolean { + switch (this.signaturesMode) { + case 'all': + return true; + case 'interesting': + return tx['_interestingSignatures']; + default: + return false; + } + } + ngOnDestroy(): void { this.outspendsSubscription.unsubscribe(); this.currencyChangeSubscription?.unsubscribe(); + this.networkSubscription.unsubscribe(); + this.signaturesSubscription.unsubscribe(); } } diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index ed9728ec0..100eeef35 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -42,6 +42,8 @@ export interface Customization { }; } +export type SignaturesMode = 'all' | 'interesting' | 'none' | null; + export interface Env { MAINNET_ENABLED: boolean; TESTNET_ENABLED: boolean; @@ -150,6 +152,7 @@ export class StateService { backend$ = new BehaviorSubject<'esplora' | 'electrum' | 'none'>('esplora'); networkChanged$ = new ReplaySubject(1); lightningChanged$ = new ReplaySubject(1); + signaturesMode$: BehaviorSubject; blocksSubject$ = new BehaviorSubject([]); blocks$: Observable; transactions$ = new BehaviorSubject(null); @@ -332,6 +335,8 @@ export class StateService { this.blocksSubject$.next([]); }); + this.signaturesMode$ = new BehaviorSubject(this.storageService.getValue('signatures-enabled') as SignaturesMode || null); + this.blockVSize = this.env.BLOCK_WEIGHT_UNITS / 4; this.blocks$ = this.blocksSubject$.pipe(filter(blocks => blocks != null && blocks.length > 0)); From dd183f7897b1633105335b8be17328763e2f8036 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 7 May 2025 18:47:32 +0000 Subject: [PATCH 229/534] Update utxo chart colors & add acceleration support --- .../components/block-overview-graph/utils.ts | 4 +- .../utxo-graph/utxo-graph.component.ts | 45 +++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index f051e9d51..94ab9b686 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -12,7 +12,7 @@ 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(''); + return [color.r, color.g, color.b].map(c => Math.max(0, Math.min(Math.round(c * 255), 255)).toString(16)).join(''); } export function desaturate(color: Color, amount: number): Color { @@ -35,6 +35,8 @@ export function darken(color: Color, amount: number): Color { } export function mix(color1: Color, color2: Color, amount: number): Color { + // clamp to 0-1 + amount = Math.max(0, Math.min(amount, 1)); return { r: color1.r * (1 - amount) + color2.r * amount, g: color1.g * (1 - amount) + color2.g * amount, diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index b712fcf87..ebcad891c 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -8,9 +8,12 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip import { renderSats } from '@app/shared/common.utils'; import { colorToHex, hexToColor, mix } from '@components/block-overview-graph/utils'; import { TimeService } from '@app/services/time.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Acceleration } from '@interfaces/node-api.interface'; +import { defaultAuditColors } from '@components/block-overview-graph/utils'; -const newColorHex = '1bd8f4'; -const oldColorHex = '9339f4'; +const newColorHex = '1BF4AF'; +const oldColorHex = '3C39F4'; const pendingColorHex = 'eba814'; const newColor = hexToColor(newColorHex); const oldColor = hexToColor(oldColorHex); @@ -61,8 +64,10 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { @Input() widget: boolean = false; subscription: Subscription; + accelerationsSubscription: Subscription; lastUpdate: number = 0; updateInterval; + accelerationMap: Record = {}; chartOptions: EChartsOption = {}; chartInitOptions = { @@ -80,6 +85,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { private router: Router, private relativeUrlPipe: RelativeUrlPipe, private timeService: TimeService, + private websocketService: WebsocketService, ) { // re-render the chart every 10 seconds, to keep the age colors up to date this.updateInterval = setInterval(() => { @@ -87,6 +93,18 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { this.prepareChartOptions(this.utxos); } }, 10000); + + this.websocketService.startTrackAccelerations(); + this.accelerationsSubscription = this.stateService.liveAccelerations$.subscribe((accelerations) => { + this.accelerationMap = accelerations.reduce((acc, acceleration) => { + acc[acceleration.txid] = acceleration; + return acc; + }, {}); + + this.applyAccelerations(); + this.prepareChartOptions(this.utxos); + }); + } ngOnChanges(changes: SimpleChanges): void { @@ -95,10 +113,20 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { return; } if (changes.utxos) { + this.applyAccelerations(); this.prepareChartOptions(this.utxos); } } + applyAccelerations(): void { + for (const utxo of this.utxos) { + delete utxo.status['accelerated']; + if (this.accelerationMap[utxo.txid]) { + utxo.status['accelerated'] = true; + } + } + } + prepareChartOptions(utxos: Utxo[]): void { if (!utxos || utxos.length === 0) { return; @@ -311,7 +339,12 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy {
    ${valueStr}
    - ${utxo.status.confirmed ? 'Confirmed ' + this.timeService.calculate(utxo.status.block_time, 'since', true, 1, 'minute').text : 'Pending'} + ${utxo.status.confirmed + ? 'Confirmed ' + this.timeService.calculate(utxo.status.block_time, 'since', true, 1, 'minute').text + : utxo.status['accelerated'] + ? 'Accelerated' + : 'Pending' + } `; }, } @@ -322,7 +355,9 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } getColor(utxo: Utxo): string { - if (utxo.status.confirmed) { + if (utxo.status['accelerated']) { + return colorToHex(defaultAuditColors.accelerated); + } else if (utxo.status.confirmed) { const age = Date.now() / 1000 - utxo.status.block_time; const oneHour = 60 * 60; const fourYears = 4 * 365 * 24 * 60 * 60; @@ -366,6 +401,8 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { this.subscription.unsubscribe(); } clearInterval(this.updateInterval); + this.websocketService.stopTrackAccelerations(); + this.accelerationsSubscription.unsubscribe(); } isMobile(): boolean { From e5082863de6b713613dea8e80d613f519fe299ff Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 8 May 2025 11:32:51 +0200 Subject: [PATCH 230/534] [mining] fix potential bug where we try to index hashrate even if there are no blocks --- backend/src/api/mining/mining.ts | 47 ++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 7e3ec525a..0e9dcf91a 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -256,31 +256,36 @@ class Mining { const blockStats: any = await BlocksRepository.$blockCountBetweenTimestamp( null, fromTimestamp / 1000, toTimestamp / 1000); - const lastBlockHashrate = await bitcoinClient.getNetworkHashPs(blockStats.blockCount, - blockStats.lastBlockHeight); - let pools = await PoolsRepository.$getPoolsInfoBetween(fromTimestamp / 1000, toTimestamp / 1000); - const totalBlocks = pools.reduce((acc, pool) => acc + pool.blockCount, 0); - if (totalBlocks > 0) { - pools = pools.map((pool: any) => { - pool.hashrate = (pool.blockCount / totalBlocks) * lastBlockHashrate; - pool.share = (pool.blockCount / totalBlocks); - return pool; - }); + if (blockStats.blockCount <= 0) { + logger.debug(`No block found between ${fromTimestamp / 1000} and ${toTimestamp / 1000}, skipping hashrate indexing for this period`, logger.tags.mining); + } else { + const lastBlockHashrate = await bitcoinClient.getNetworkHashPs(blockStats.blockCount, + blockStats.lastBlockHeight); - for (const pool of pools) { - hashrates.push({ - hashrateTimestamp: toTimestamp / 1000, - avgHashrate: pool['hashrate'] , - poolId: pool.poolId, - share: pool['share'], - type: 'weekly', + let pools = await PoolsRepository.$getPoolsInfoBetween(fromTimestamp / 1000, toTimestamp / 1000); + const totalBlocks = pools.reduce((acc, pool) => acc + pool.blockCount, 0); + if (totalBlocks > 0) { + pools = pools.map((pool: any) => { + pool.hashrate = (pool.blockCount / totalBlocks) * lastBlockHashrate; + pool.share = (pool.blockCount / totalBlocks); + return pool; }); - } - newlyIndexed += hashrates.length / Math.max(1, pools.length); - await HashratesRepository.$saveHashrates(hashrates); - hashrates.length = 0; + for (const pool of pools) { + hashrates.push({ + hashrateTimestamp: toTimestamp / 1000, + avgHashrate: pool['hashrate'] , + poolId: pool.poolId, + share: pool['share'], + type: 'weekly', + }); + } + + newlyIndexed += hashrates.length / Math.max(1, pools.length); + await HashratesRepository.$saveHashrates(hashrates); + hashrates.length = 0; + } } const elapsedSeconds = Math.max(1, Math.round((new Date().getTime() / 1000) - timer)); From 13b4126f9b3c43d991e7dea24312de1b7b10dc96 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 8 May 2025 12:52:32 +0200 Subject: [PATCH 231/534] [lightning] make sure channel id has valid format before caching its funding transaction --- backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts b/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts index ada2a89b2..f681565d4 100644 --- a/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts +++ b/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts @@ -79,6 +79,10 @@ class FundingTxFetcher { } const parts = channelId.split('x'); + if (parts.length < 3) { + logger.debug(`Channel ID ${channelId} does not seem valid, should contains at least 3 parts separated by 'x'`, logger.tags.ln); + return null; + } const blockHeight = parts[0]; const txIdx = parts[1]; const outputIdx = parts[2]; From c67c2571b7a95c2b865b7dd2adefd624e045138c Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 8 May 2025 13:07:05 +0200 Subject: [PATCH 232/534] [lightning] make sure tx idx is present in block --- backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts b/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts index f681565d4..d0b92f42e 100644 --- a/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts +++ b/backend/src/tasks/lightning/sync-tasks/funding-tx-fetcher.ts @@ -103,6 +103,10 @@ class FundingTxFetcher { } const txid = block.tx[txIdx]; + if (!txid) { + logger.debug(`Cannot cache ${channelId} funding tx. TX index ${txIdx} does not exist in block ${block.hash ?? block.id}`, logger.tags.ln); + return null; + } const rawTx = await bitcoinClient.getRawTransaction(txid); const tx = await bitcoinClient.decodeRawTransaction(rawTx); From 91858c0fe977e4d9ea585347e4a0fd9fbec679c7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 8 May 2025 12:52:04 +0000 Subject: [PATCH 233/534] fix e2e tests --- .../transactions-list/transactions-list.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 93d5c7760..a0b40b234 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -575,8 +575,10 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { updateSignaturesMode(): void { this.signaturesMode = this.signaturesOverride || this.forceSignaturesMode || this.signaturesPreference || 'interesting'; - for (const tx of this.transactions) { - tx['_showSignatures'] = this.shouldShowSignatures(tx); + if (this.transactions?.length) { + for (const tx of this.transactions) { + tx['_showSignatures'] = this.shouldShowSignatures(tx); + } } } From aae22fa3e84043b5e53e42ad86b4dce00300ecd9 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 8 May 2025 16:37:53 +0000 Subject: [PATCH 234/534] fix enterprise network redirect bug --- frontend/src/app/services/api.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 285060bff..f9d2c1ad6 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -420,7 +420,7 @@ export class ApiService { } getEnterpriseInfo$(name: string): Observable { - return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/v1/services/enterprise/info/` + name); + return this.httpClient.get(this.apiBaseUrl + `/api/v1/services/enterprise/info/` + name); } getChannelByTxIds$(txIds: string[]): Observable { From 14919fa828ce8d28e9439ababbbf5b1bc673c312 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 9 May 2025 12:10:01 +0000 Subject: [PATCH 235/534] misc signature highlighting fixes --- .../transactions-list.component.html | 4 +-- .../transactions-list.component.ts | 25 +++++++++++-------- frontend/src/app/services/state.service.ts | 2 +- frontend/src/app/shared/transaction.utils.ts | 2 +- 4 files changed, 18 insertions(+), 15 deletions(-) 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 0942ba8a9..08ffb69d4 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -58,11 +58,11 @@ @if (tx['_showSignatures']) {
    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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 zL(2pm^0VZ4vq^IXYX{GT7$-2^WRM_lpu3;NZy44G;Qp;@`N{afExwL*9D_}(tTOB{ z+z>3_y$WKYU!?6+gAfiP@iYb|<+(1w!w3^@-N5E8bbiloKGg3qj#RE^_*V{+EM(+} z4PL9N0DA~olVMldfHLZQzpneA_j;Z{UyUunx7KlEACRj9{uNZ==d>y~?W!!(fsa3Y z%-T-A@0!{V<5Uh7bih~JjJN()dF01;?I*@W(Lu+xVz*!XV0%UEKbWk{pq=!!P;z)6 z=!fF-Fwd2ux3Bd4f_}Di!!C)?_yN>ljP22dnmlA=)_ACAINCth*P614{^m7)w{tSD z4n7ga*^1oc&d%5pIa&=L)nps6>n4EphHCQkoA?G3OedkVyQNSjO4BgDrrnrJ%10bq zg<@>4ddnkY{Uc}66uX^m$Jhe@lsBdzeZeKLO*?Qu=?lTsXKlj6WxuJW`y242&D6hr z|2FL=s|*8?Sm>B^f;CZ${l!kz4XNqymlElh;fKc$muG&dkJLeob@@x=j05W!U6x}! zY6F#lzYme!KcO3aOOENI8)F11c#2&y$=IUyQu<^GeRy21g32%+(G$Y21obWQNj@3rd)rdIM*R72Ce;zHqya4eL6+1@o8Ax9@9r@b8KjEpJ+yL+wrzvQI1`H{w#oP z<8k5g6?t@Yjaa&I(D0$q4x2S0dZXK$Qp#km^5`?(+CbYa+0wJG?;?|Oq(<_{v#Kcp zoC)MZFMDc7>brrCtvMpoI>eie#EkKbkJ1glXly%uOn;#77&>Kg6$c6dTe5-9=5xMc z8av?gh8-KjPl+m1XJeS*_2yiH@)R_3zfr9FTna zrz#Ko`NrAo2^h7yyke2O`=GaQKj<5P=@VY>Xrq&FL*}>9^{r-X>_6ZwbnQp<8)|JY zqX*lyd4AD8#GO9mdG}PmP5tn(u2XlHpS3~$uOIbw?tg!M`SW)_UcUMEpO>${`Ch+? z{_66Nf4D%s6p-OP1S^ITE|1jJEmz-9Wcpk^yG)=wutu6Lkb=&(L)RWwejSztZhPXT5RK zzoN*xVwc)pWk^n+hBn^2PtMW*X9tRg9zBaao{R2*MRigQM)YIMfw$YJ;Bj zo=7zj!HcXlFpxQN$|r&VHl7W*c#zvpNT+3yRD51ca|5RvIUIF`Ve|mg7;u1S=qzZ# zX6V7QzrvktFi;P+-msB&z=ZOrBzi3|1s0)GCINNIxye*NbHj8(a6R^;M_%B;-b1Bn zk+pe_E^rTaV^UcM7hlPMzu)n7;=1wn14MY{@J6;|qx<^6{-INhd1IkCcey*G7{Tm= z{vt-(XhOKatj%t1KHHAb2Mzia`4Zf`H}f^eAkTKHf_A+_wk~R1ERd-W&3Kdi)6ez0 z=U+V0@0~xteD%c({pR_ndi(sTd>}e~_5GW-KWQS`8|Z3k`?MF!TquQ%@^b?nqrrx4 zfa3yb8{ zPF{uarV66M37{VZ)=P<%nlLgbs!c|0MwpT7$n!vNQcJsIh`<6~#p;utge^m5?!#vv z!H;1ZzHKXV2>3sfGJS03C3OPQb4CF9q@4_5r20{-q2F9JbGK`lx9&c2XYu_ar4k zXvco1U6NCHw;W^FsdI6#jch4MTVV6(QR)i65UM8Q$8C7{NNm1Yga`2c ztxnsJ>^Q;R;0Tse7Ulf=fNX+&hP4{ zoD6o$Zk2Ul>2+AVDn99c(SgQrQ3bs7O5^pGtOD;W=`vP3r-O!u#l$S50MX^tWkHLg9n-0$6_3( zUR|re+__Kk(GnYzMrYS#r0d(O_KdX_k4;&NZ2s~Y&G<_mkRND^*hTE*h6$Skx+c`7-tuw=I{ zA&K1t}bA6oq2 zQ?YgFwEY(uo@*qaYcu1IFwJYsZS#RU&6R#wDH-^I10Qjp<$JBU2ElK;(IuYVclYNq zs79whtP@i>+Xl*wM?~0V>q*0O1lwRWvB6bGhgtN)2Y2mcUIrj}zTWfcGyN2rzRKMX zHLa%gx~8r*T>FpgmQA^L-o8xxE)Dormse7>=Y=c<20jqNHI zRzCoRM|tZ&50wpSc0ag6#^?nDZQywNTFHsSzU5RddUt&Yc{WTv*tu3LS{@t?ZjTRi zGJp~O|0p}prdf{bNYC{KARH;}>WgAGLjV6aZAgS62@(W|>)qy)d9tcz?uA0E_w6os zOrBGwtGlLW1h#Z}V5B1X6uZ5Ff-#a6-15^r(5oE!5n?x_^=26Fi(rh{Rhot2*R8=5vT~ni^e57nN)Jh>wO#K?S=*n|DWYY%7&X~-@ zSMF`ve&B}2{kwfE*1#4UKXRUmRd@O|wpx|Tfz~kIN|uZvp;I$Y($Q`f+@3?FNvHNomc?0! ziA_-<*cMSa519*9VN<6}NMv*|DGjixgSk54=^SJd+b}+eF-v23%!~!mw`!AU8ybsF z?lW$W%x^9iY5nY&7V!LljBB|!5Uiv!whb5`^J1d#%l7qbSo5vN)nS_jp-sZXN}@%R zRJk#MC)c+0cWlbMg+Dz$=sP1j*SPr4V#gk2to|`Zp^oULc@p$l z1@sfmNnO{x(AzHIH&(7)Y$T37W)%(o@#Y!$#q8^0FHO^CeRcs41LCUPB*WOy-ym~* zPeMGlE8>5E5+^S=iZ)}lKJ}a1@`>@A$&As{vB`DDMsFR^w;zu(%YeIK`O&yrx?`Fm zdeioi6CF)2YJ5EnK)n1Q*BL{u`>6YrXb6kfHqK%k2ivRFeA8lssATg_X zrrj;`=)=`vc_aI5x@gmxIx09&D+YLa??W{`u>N#Dip>f=&C_dmUj&Pf=$n?p z@}avuCNi$UvED-WnuWgR76~@i@XWP({?CU@*-ZB#?0Ey77w1?Tv-!`aCtnNBo5L#O z&3OHUEF0x&P1}RHvcQ<{Y9E4c$-OH&?74H7AESMsP11Xp7ccKze*X2XeiQw|6Yc z3~CIN7}~~8IFowIAg?fWto6)eJ=WlA_cx^+qeFezI^^@NVJlhH20H)pb0%;%Phd5|Htl54h-{r@`Mk^3_e5_q2^+U9ccactQ~{J0I?4!Z@}#i`Z~+k$pl8ypoYq%Aa(kRk#ahgasfgcnqzR`i z^9l#U$n_#o*R}J_i>%?(vp5`ph$B|xz?)LjE?Fk)U>zDJ1T7B1z~sOM4jXG{#HbuY zj0^eEVY%3+a!*Rgpb@3~dISBg24p@BjwhJQ7$#tJdh)%X(77nLy^fiXc&%9V>2j)Wowp(x%u^wkONwH>jm z<;3xy;=xH-!^umv@qkPHA^OzEZf_)DzPfOXJrWQ;)z=rP@|da4#6zHHNR~gFHytvS z2+m#O)Xpx^X)hQy&-VYd|FExecRP;{q}26DR;AkvEQ1G3PLH2dESv*~%BG>?kPH`- z7O~sWeLUk1soJ=<)Qw|3%I zepGx*xb@tSuI#OTDr)PeV|>5;RQ_#mFm!G3$@;nGR{jE`MEr>SU3$uPS`MMUIvT@) zzFYbwNp%r>2%pMNVOe}fqI8bcx!2;>4J}O4pyA@U+Kfln^=zQ0Jz2MM%_SJKY*N>B z|Kx!-Hx7QVt@7#=r5%Kase2O8hg-*MLdZRzel+?-k)F}hj5Debw>Wt7i>e_=Hz zTH|jQQ7WAtOT^ecLF^8eqtwbzJ&`z)6CW!j`~@34B%HIHEq53al~yqn#@_0(k6}f=IiIz`WIA zlNVr^mgumjXrBj$-=f^5|8$D`6%ZMsJujP&YefWVy`gb@wSmst0o>Wbi)poY;+j(X zat#-YIMP0m%(=X!6@vI)vbm0SPT*c_%?-DzlM0}84fU+|xK~z*`Ru3gm7iSKQ}9Q zY84XGrLF?>qOFY7MgB==(WV>vrD)SuG_uqrSvxG*w6*jzuBLyvttlLug=6uY2nN6C ztC2V|iKj0SPk*AWG9}Wq_PyGw&xeY^m}z$rW*(JK;z{#?q#qb6DtPF_={sE0;(^A) zzRHbzXe7;IoK+GY^HE@1(r1eg-i`-Ymky-Jr?BO|j5#Vc;3!{v727`|6`6zOD%IEm zl&{>z?Ni}0wDcom-26*U2^&L4+9%@Oe$`=6a-ymnD$Dg;0>?MbV}SC|Pd@yy ze! zlVb@M5o=_bHf@e8DW4$PHIJH(HpoFA@iB8yt~uhP9(H2}V|^5v)cF`Wic}E)Ls9)k zY2Fiau%C3MmyGf?hUT|IeL%h7+kfz#2fitG=)mduTnzpL_k{2TgY{Eq!@yfPPLW$} zV0O#xc-k@|hssexwB&}a{1S=q1k=bS6&SPaqAGcW^smC{$GMJY@4)*MJU^HJ39;|! zTj*H&ByHLlIrL5IlAn0qmAAL^yU*T4cdfk;5yq!|0KEYCkc~ywAEE(Ierr0vVXY#| z<9bG4!?=t?_Em;n8b;51SFe-S0gLTrOln*(Hh6ZgrHfua#+^5L z*^A~Hhxu@ffzlL2Cy~d+H4I@ksE^pu8*JkcTo9M4D zfBx}Ty@meM<&WR}qWIb6uRp%NJpYw@B0&V7T$rDU!c6?G)|4!{SGajel(uR6c#zv? zFe+!i(q?@*_G&GH8x&}z%(JWo_BdtU=~~|YGI9H`xTM3gnv(6K)-`hvZU#mB`PqlM zL5@h|c%6$pVbw``<;k{{in-DR#{p#z6Qs_F4VzPXEppb8Ti0$q(DyzTg z19Tk6q!qBa-=-8R=Pa8~I{1*Y{JGjc^!Op)5Wxo*MrTx5rfJ`;dsfsX?TSy%)a9XJ>=&4H`+ zmc&9rG$>@@0yaLTVD4f-wkJ{WbkJ+k<3?4J3LS`vc1#Ke=maJgRi(iN<{s!EjiC<8 zOgJ~kDczG?2KSO-ete*di2UeHdR0cIY{D)blygDz!y8@T)&{y{+h@Yxx6$F|Yg@kf z{Gr}9f20j`ZJvMg$eZa;pK@`-W**4t!p~P>=xgx#1W?}8r*Fy^Jak7jo9DJ%QfCzP zL6IFMy}=w`?6kda_>sp~`)QKV=KlHidHcBsESPMMP73fz{MF!2ABoM>iNZ9{-`3GG zE>C4z3CB~OD%Y#>7TvoG13t17#iSs5d*%lmGZRn$R9e&mv6}shR^ej(}Q!$14v43e89yMnMYhK zF`jEQ_S{!T4&s@U`r)3;Pr+t?N-5Wd+YimaSNx=rz2{p>QlI%q3ksa3v0s|bd#l}{ z4^wVd_50Lm+5#psW1YwscUTKpltY9^rwnavMVz^U+66JP{h%D+Ap2 zr4LZgWo(RFX4E9Se}?)JdQ2xzSmSUlfPvDvJ$RtA?@2g}4{(0OEP15>&^3aRjxPkl zV~fSgVK?iZ_8hLItbrUfzj|)c_1sv*qfx7Ch3ba{D2#D7#*p2I|G5@huqdFHeLARr zJG33|i)Ud%dw5pAMyJYXA7fsWGx;QqA@2D zTkc02=%#}jnxUgip>2paK&8TOh)U%r&bD(v#fRvu z)-ZsP;Br+_TO7pb=Qq$FKjDo5)y;3o1&yiAok0`day??50}XO3PX!L~7c|jLWSHnz zA_t@{aG$D-#?*#Aa*#!S%ZzMGnIt;QZyksS{}D_uG%AMHa@D6S7afrIv{hXB4U$R* z(;6pKoI!Pmh_mJ@?e)nj2}kaE1{XfoA7j%S=-MpHZ=j<&b&8f>w-197iG9GpCh;lT z+Au-_n#K$EHJBtqk56WPV7;SnpP1|Eu#Mi_Q$U}vMzOQTU_ZWR8=D?( z`W|fNFf-DBgrRd`@C_a*HXkhN{;m z_iyQB%<^!Q4fMxPw1Li>LEg~ep&buT<$K-~;^qMz_PL_Yw=+hJ-w^iP?W}Y}7fnGr zu@kb7z!@J95WlcNt2|Y%*ZrvgE!uUBFirTCM8J}9>Z=}m2>foF9iz7)5ApW($bAC8 z_}UZ<#wCW_AFG|!NqoJd?-{r%=}Ypj{V43lBdeU3fUdjI4W2%DPaihY6maUXC9J?TW()PO$FVG+3Q=eBkRm$jq-aI4o zphm!uK|>m>E>(s&)KfwakiXxx<1nVJ< z-HM#YhMU8n5mw^^qve9NHYq04JkR5X=bS5CCK|W#F`nBF@tZvq z*C^l=PkD4Hn}I(v3~NpyWG?BoX~{yEs+X|ghz>Ako@1WDZ(JX8t)Xpn zAez6P z+bwzY+6iWIecR~}9-WbI9WpAqHgCMqb1>K%NNfYZkwM*HuMWi}F@fn^GW23OpZQX+ zB0s~P_Bm}EX=uTv9s~I*^lYG$_PC(mIDjX|!lv@r7z(eiSf9A9G+qRNYfmh*xy@4J*tPAtj zx$NdGbT&J^M*#L5(jw2Wt`uhPM`<(NZ=kad5@hZzeZ&Xxjh>S}*c<2pVPX+!GuE5v zcl4Fw?=Qdn`qG=|-~XVE^lyK?{P4r`%TIrMbNTfj`p|%0%;RTx->|ta+q^zvZ%(*< z|DrWp#?+4KRdy$58!x@Mmt&l<+s{=#wat7VHRIIdSh~<>o*`!py0b_Z{{(q-jrs7Q zpXV;wM>EgRo%0L4zPFe;lsuvLP7n2!`Sg|iJg#KfKK6nr*WMs&O6ktpQ=7x=J&NCJ zR5g&XsDwUDe{dg~K8;g~75g#`p6d)gK~~qr zwo44ih1buS6%!aMZ?#|L@g^I{*SS(XnCj!$1z&ZOCe+WQ*S9|KX%7KoeV^Zf*WTEy zo3H~Tstq4hhRenowizK4pz-)to^-^3PrmV-7au`ReO~6}Emjqvva%2fvm=!%owf)m z<-r3J{tUjxOCEi6&9&jJjp5gaTBhC3>-^j%ST1dB+QHMlv2;oPi52@fynzl-0+UKN z&}n#=NpXddryQXe>Q2VZnf}^Qs<1rG*Ex*=k3R{NdGk{ZTls99^IPW+G*Hr6dEk=z zOr}io!BQE? z0MIxvFVpYb2r1uB9-2l5GMuopvdk#n(_s4nSsXffQdErX@Yz;vp!3Bgm}^-WBA;S6 z*wM?T`2+Qz``R4mt2c~6bbX)%9W;;iTlb$meXOr+=Qq!J`~2bMi?8nM%>#Z1Plzp2 zlaMAyzZLF@TMtnrkv~5q;~@bL-9?KRglhe%v5m2?tiLRS?F};pA3A8*8<)pBd-LM#p$lSIz?291_uHWeZ_7H zJbxXaao;qtGigW3O5aGkmMiuoXTGU`R+8lFgygSzr^<36jQr{;C&&|!@3FNmys2aS z_CcHFEQZsTk)a50)Xps(0Q_(L#+)u=pM+;*BF8==w$Q{!xsr%fzdB_qZ{KWw=+3a^ zO0aBOei4!7OGDPBj%^a)#+_?*J$nk?1jZt6tPb{hf zXR&%dn2S}^x8G+`oegxx6=USE$vCzz+#bl)-&HuW_Q&XgX4wlS<;z=aUKqR3oC36pVv9>c zFD$-zQ-2)862dtP%2faxGJ8}9N~~)bp!?0BD(dCRg}*kN2i~!-_)b~DAZ@1#Wn=A0 znY4R>WLAgy$8O_aK7bx85>9$CyO6RKltgy*woP0*WLNaVSh~hbo)YeJS1PRJB>5=4 ze1sjAAvxe2tgWxUE4zF#-XiUGyMVs2%ag)~q#BPNl|XyysV-9wj_BPy)R|{|e(S5s zXbe4}bi|A=k1ejj%I6^uL}^KId5$utGF-nIi{dLS>n*PyRE>EiVT|a=CVIv^to;_H)KvQ_`)?AK zht2e-`bYFl7Io`gE(6Y(2PKal-M>6x1O1Wk_)P&gIYj9j53Ubfw^X7c)}mgQQfhgU zIgUwRr9RplBdRp!nfwRV+{1g;hdpwTLB6sY*EQ}dpgrYCe&sH@sdsttFg7f|ar97z z2o#@kja@aaquM0F2RXr(Bhwk5UH;#lDsQ;2Fv$@AF+RJ2&eyoJj&}RVF5~LG19|?& zUJ$U3@Z8}CU(6vHx7&6Ri7;rvE<|3#&6w}}p!)(oJhL{I#TMO~Q8dn#Im}GD?Ij2! zzch+bC?0Q``#}l!)LBzxo@l!$7G}>cir2#{w_olJkqYFl(TodUSRJPU;JmW-QDV*# zHHUnKzi7iba0j^jb(o4D=!k!Vi*N4ow|sD)YD~J9lVYy}McX&f=}*TdTCr@^c6)iZWR3 z_pzzE0;j%}h?r%6ZJ>w$fIl`V>0sI84+^MuAL2oou(*J7DkcAxpJMxSbUQyltV*&O zGrnFZ<~rqk6q^;9U4y$F)K)ye=7Cz@>XMc281{qKwthgVduD%lHcEwCRQL~GVjkXJ zt=B_XJUolx{(JSW;ueqB`treDJ@~AQ+_Uf;VA{yfDzbsjT)^>KzlH95YvHwtf{knJ zKgFx9=+wi$VH z{Vfg^R*r@0gc`as*wExy2|uqHB4h#MypP)HlzVMNADHpY9B}rV&Iu?%R`ig-4p8g> zM$bp~1Z{F%Z{tKxx#x^yjFr|p%s+A|SjnUp2A6L=mTR4}fxhM@2nTHxm=jW4F)(Z2 zs)TFmjL!@(r4U{ao%7jlhm9L~lshPPN~cwp8vDgb#Frhql?h?600TmyPy{)2pSB@* z!!0^6jQ(OEj=akKIKJkO43{BH0sdYK$meAp=u%Hv!_p=E{1bxfl$)v(J+}I~&KUVb z|B0l?!YPur(%6cp`F^-;@ph!6^2P6~;PD^RR$oJ9hgG(KXix zT6|yuR%}ZL4&y_YV$XA4>-c&x?IIoOdDdHBBCDE>LUT?14ThAR6u}*zoi=QLkc#(% zw{4%8vMqO~t!mo5>Cl#+(&&v1XjwAHN8v1g{iyYnH-VWkgQ>AmFY|&L9cwN&$DBlm z2lGEMw&-6#Qa-j>zAHdU01ISUyYYd;jsF|cRzFD~I5w82IuMIxo><3=B;IK|%GxnXn=Gxaz*%Om@ z9|H@vfd9oyeFLq&w!7^XA57oYI)=RlFiElcy>>(x<8$yFz&=pydlAv}#Ztbyoi!#~ zEBAC?sh5)#b7bv|FOYjz8|ZiR74G@)b}%X^o z{V(1|e|Gs^$KUiD>AybL+vqQND>?Tk7)+a4sW7>{>}&27c(TC;rTl_^Xj!kJZ`v1M ztbpkatDbuiWTl^{U1hs;CVeoWr~HaZv(8Q5f+yD+US#A=dGm|v>N={t`@GuL8{Y>$ zr zwtwjj4Z^Kc_3h7;@vQ{zm*pMZrQh;Ya$stCFzGyX=7ZF~fo^3uf=(`{>JLVY%7#fC z4HF$E1D4K|K|{F>6AuAC>SUsC&RU1e%9A3434{3g^bZ@XOk4`^)A$^5E|@ZzpPdp~ z>U(4qNXCJsb?%g+ZK!jwIB=NcWFueV{y*G6*IXXm2ab5Kix;|T2BQbH>=L*+(%43X z4R}nr@f_wMP_-puqZL#A@b&L%o?Mh_RHsV6p#aK>*) zoB$Xri!4AI7XwF$PLRa-^PcGM`VFAirp6UNM}8Zf&2cVfy!qKrh@c-D+M2IOd8oQC zKL7mkg4{y`Ni#|FQGdOHKCD@RIwjfQJb*Mkp_m+hU+Z&@piwsM# zFCrE>CUsqSYo}uRH?nk?&iW&x@(lyIfnzz=C&powA4d+N##R%4;)Iw8OC@~>9v>>Q z%*lgf&>R5p2~P|Cq5rlAY3e%9M!)(! zGIh}RIhZt{VLn_oiPwr$Zy(C0#x{2F6N$??%O5Q8rW6A8LFCvk#YbEm8nc#A99byw zFuB;N26qlgQra@HQP|Pl*tjLpWBb6rFd1VMdVzu6IvRrIJWq}I8j6>E{GFQkkF;p> zuX^%h{mDqN0&_N!BRyxzhjH<{tfvT#-y{>U%!h6J#+6Yv`{1x+m0Lh^Zby>%X$TCv zI*%AV4kEm2f3u5!bQO>3#k2TCR}m{QddnLHvF%golaBPqvIpa#YhYDe;?YY6Ij7uH z=2=g94lfxK#&6%9G-6!JI9=#3+eFCpXoQE)W0mz%>i3s)aW z8{sGg@w0)>kv30p&Z9qMQ!#wXMNTP!6FroCEGu+9x1N~ktn+#6iQTS8L3xfMw;OqD zwr>VQ%`X7BNM8_)Y ze~;PYgKkzBy$DO724iqO z7=OF1#;^XG$l{TF<{}=wS;wy0lsPi~603+m=G+wg4gQL7-|^`mQD%R(L^!Ob7oZUZDYxQyta zwHTesZ+U9_5Aqpby?GVT*Mc$>N6S}?^1Wtt8x5Y`0}*2c^BdxGeP=qHs00VS{L)Ml6>Uii}<5!eEfeZTvU*pu`v(*}2 zJGkEdtVYlcb}{WzbViDCPF?zu&Wx*$E!CafM;XB}kR-7542jlnxv0IyUd)U!IYc~`SQhy(JoQcc zN@ECD8k?FQKI)63F=gWfCs$U9(kvV?QRL$<TCW5I4)mv@^HhU!PoIqKSlzIFI1pV?Ol07(2?tx{cTUT5wcYNrU=)POIE%qTr&>|<)|SjOcxQ8J~G3I5tZ+t|Dcc0AaTSXxHdgdix*R7v{fqu;;GQsOt`ZjA3IV9J{ zwhuODjI!q7`M$@he&*Hp{a|b#*KeG&fzD<+>neW;wa-N*_rqQ7W8Kpm@Lu1*pTqLG zOJ^M=dG9pvUrE>Be|dfR(+@8$-+!x(^lzVC{`8k;m!JOr;_}Nsw27`Y&}+So4z1UA z?CAgmtadg12Rqq2W6vaO1@?c~?1kuh+`)AQJ5UAbhxYCCo!Z?s1YGO|#8an?_!gTo z_O;#>-Mjbszynx~Yxx0n=~pMV`iZ&vf%g4A`|LB_!#`A8unx>u_#>D0<7@TN1&_aV zSoL{JTz&v22mMIx!H4RxC79H%^zY@Xtc#IDfTsP1{8^4vudUpFBv18htb0F_eNp|n zUx80A{^Aeo^7E}d_o2h!&`DYWUQ%5T6Qj@fwc68yhoe5S3>Xz!mRw}8X6L66_?`88 z@+BDAK=;oZ%U2BPa~={p*^Q3$p%H8wz=Doqz;{_g<~mcox8t}xzBed-w@fg%k)R_q zjz{px5v)J$bFK?ap*r(MjB&a(4xRbBf7yVINJi)AMMnE!%7dl&*W4^V%8C=(J74_% z-#;*6av)c(QaO#6hUh04D$J8BGmAonwT`&XP6xR7YXertmO*rW8r05q$4)0Q$U|=B zR0sMnvPV166`ioVUY&)QQ2r~rahzq)Dg75(CH2$T(!&IepDiUP(v;yRwUP_rbypw9 zTA%5T1wK0L8+m@oFqfe@+TAFmrw08P4>im ztqgNSH_@5oYO{KI>UELg;mGg5{#u*oU+Q>r`RWUP^X{!K!up|*4}8ju2~3lv+KMtX&M_1cwJm9XRuRMzeOJT;z`C+g2Q%s(IeZCql4=QKJfKKe3hlDU{{B$AJ8p|MHAY{2UKKQr7|s# zo&n5vHz|HIpLZsFws06+jqL_t)za^UL$rplpy zK^zPgHFBs&R_Pm4{#&6mmD@b@5nDSWp;&(_KKW0b_Uvhw#U5jwd{iB5yFIF}mFOwv zmJuJWIE$~+@FCAKl`iJSSHw3N(}<_z%s8Nt(EhYaO|cFc#aGVKXFN9f~-S)E2+yj zUAv+Cq`~gfZ>|O+@)b+tl1;w6j>W4-0(t1A0=I|a$dg=qg?zZcN~j#@DOvT(qawPa z?8FA|85TzP7Pe5Fe8trmij^L|<`>^!#)hDRDYCE5QjBl8QF_c9=-xn=PaZHf!b3ap z5CTcIReALJx9n6<9jEwPd+fWD0MVAALdEvu0kHOfwKfr>zj^8i=t6YF=j@7`6YD`j zWjF6a1E3$HBS%0{k+AfDn?GU-CwQ0v@Ce1)_^7%{T273c^2jNc@S{uDSgoCT1O3(7 zK!;X!;PKl##THwYa~<~P+C1Y{>v4aGR^!$WENu6+e?8{mlWeqjj?l>;u7zG@J(T1k zADWLg7Jdi1$UX>8!3Q{HsBUgrq7mFHfq^8)Pz*ABi%lWyd6Ew$Q7#GcQv z*GDkGjSSOiZ8bULgWfpDO4crX+Z+%7z_~Wir+(<o<=2hA{~7U>j)TO_zJUW?|bF;aexNNsQFoTk`zS zZ%(sT^AQXZIDQl5+EhJ!XMFB$*56e95ln|IrUIvH!ejqPul)R8NBiB7inz3csaaLD zq4CS` z#p)k^qejnccy3d0=u6*goW4vs0i0RiE6rF!w_-2^lj@H*&HT2MW^k~)e8C3#Yk#PQ z57?yd3c4H<=~iJ|tV@OX%({nQ^|wVjZ9QYAIDuQA4yo*lEOA7pDrgH|`_+#K#o>4| z$Z9z>l}jH`#z5n{jnxXXUPVbd8i{lk02u z;qQzCW(t8-XQ&TGwLRxPGB&M#qddVj>SS+BY#CHCCI&CgH^-c4zUzC{@eu+iEFU0O z#kGNI(rG8!HEkCY4u0qYbJ33I6&ZP1B*!l{i070Yy<7i@4+D~lyt3DSU?pLEPn?@b$JO`Ne z5+?imfM9&&rTf~30}Obu2Re05`eZ(sOL=4$qe*;XYftHz1f zM95S>PTvo2d{GSOMO0+@oC3?~HQvuY@f8PuVzJgjwGx*x!u-yma0{Lr*=H!?IC#5JhrG2Jf zn?G$71!8df&^NQ`?0!FeA3X61QbjA>t4~e4OwIC3uXAp5De<*)HqrglynO2{o6f8k zSr<&7X}@(p)CM){5c6sSr289b_t*sCdiE_+?W8aaJW)>{@Y>sh}1 zKs)+Sdu4reN1N~YU~fJ|fNO9l-j)*WW8Be8d)`3T=6Tki`A`7sX~4X@qYd9X+K3SC z-q*m#{`b8NYpOdsBusCbf4KZrU)}!aA6|L`{rm5Kz5MCNXO|y;dVcv;zm@)6-^P=# za>v&AD{nAoQy9PSleOIY5U`E?A3pS$F()5*otr*vqB(U;oMrJZrr?|1Htug{d)x8i zR2g=A9E+YkK0-e5FzrOQ(O-l6{91dbe_5C0z|WiKPoF+j{LsG*&IWq-5wkbNhal32 zu{&-4+AlR0zx%xU7jGZqZ!kjJ{Z2*~GSKJy1TZu23K#3)$O-1<3)9LH@zGbafgYK( z11>=(8`pkI-D}C2pCmV%^Q>Xg7x0HQFeb&f@n}|+Fuo0z4|H^nfW85I8JFTku|o6w zR06)^Ep+VTgE22(ywHbB^z97ZKnH7d0N`9VRgQs4ZttDY$AR78!H+Jp=I9pj!ay;0 z8as1|(yFD{G?l;duGxNpeg}^}R~AQg6W4y|(S(Ov4}QN)D{QNb&M`hS&)9a03GB9) zdi@dVWBBiU^)LU&8|XNdNl{JcMx-IH8dHoYx4moC3iN;!^fth790zRD*yJ~e=<6{aE7i2k}9l~J4pkUF;N-M+}=5IGy@!I_(? zJiv(W&D#xhw~c7-Kg<9g8FHZIY6_Vc{4Lut*m!t@d_J)TZYIXW5;oW!gIl^BKTKpj=7=Sd0mUCh+7MxDrJSLjFDRq(z z*fc+zf61U;qOB9%&`nvi6wUBUNOYvOO$na`!K;8SFQBY6{UMUk0UYReIP<%H)4DI; z@K}&Uzb!)ZxV; zHkA-|8x_N~EtR8jphje_^-p|QjwBkw_JJj;%%4~keeLN*s2k{9w=;K#rn(Kub{xLM z7E~Gd&=2lZgo`vJb!*y_@m{|$#B+lH4t&(>M>o*V2Tq+IIu7C&`at|};zu$1PFkZ< zIhb-N(cpsEWV@)M>?Q=|L3h;G&a$=NP!9H;N6MDr`4wMLI6@NPCkoFn1*&kJW6H!W z#b8H|ee8Kqb&H1N76`3vMLeKqE^C=%XhuD}C;yqYh)gP1GRsT-;vYGI5)@+sQbXU{Fn(HqpRKLsA?$~)txW$6e_gl}>04!aE~yVZj)Dy#A0 zm7GC$BQq56_S4Dm?t}Vkz02p6`+s8i+;@h@Y_dTyx_w|1*I0y1zmc-wR-AQMkg`!B zaqg2lP9LS8vI0ScxKQXhmHB|*LH70Cani9zG%$!B-*wKoYCB|wDE>vXc(y-;b+mTw zb{iQ2c0g|>gKGS)dh49nI)So6c$s}zNBT>{EI0({Cseo7F3PnmHmP)YAg7uvx=84} zLc~SpDx8F`Z?If*)T~i~4`GPRRXau%?ADX&jfb@wn}K}j^2uksfv)wR zHqcocB#2S{$ab2odhrkiI>rgMUnRG=&<$Pd$;DT}l>T*X4E43)jN?xvB%rJFGbKR; zrXiT9%Zp-Ywc{}kJ!@RuC_)bi;rAagg$l?pZ-q|YbvJS-J40n04py~r1lVz1LRa5F z*Nr_J=sI{PRsqt^e%H@Lt_I5#3QUb*gSy!zq9egJ6N!E2ku&X{-msJwH7_V9E4 z8u{kqB)#Y&#wqC^DtEeZ`%(%|ztQCwlgt;aCmkbB)Nc6miK6L5Nx^#2KTJC}F)w6+~^)8O_19<)Jq;Z)X&&~Qz z;|u!Se@?%KMzXmiFTDVDu`8YClw#Fsf-e@zLp3Gi50~Gh)5rFBdhn2kn0i>G4Rq4n zyCSV`|HS|KU?kW805bf?n-ShX$7b|U%^x&AAfL3#?LW~4l60u<3@uNY_+}0KPIQb} zyg2_MiON&Nl5K}jBcWN(ao;Zgsz2pEC%7PyDaO`*0M23~Ha!oB!2w9@WxVL%_X)ju z?gxwbO%R2f4R>#x&)Z`8O3>K5{2)15`$?AMTDI`u7VD(nD}y}Vz~|_Fgpw|2&D}o! zL0_ku4fHpc7urPkw^Hcd9>^RB?%apn4ys6#L&QH`4o>P<3VhhCaZo=Y6uE8V2#hYu zYp3N%xBC+I=ug$Irw&@jq?6P+DBKR>DUi%rGZwAiicUt`fEXm;FCG|g-PSCfk%2sz z)6N>38qXfniv6OB@q#g%=k$4gTh(*s=y$u(Ryvk1aGV_r5+$*L*y_gTE;;Iy#}}5( z94B4%A#4^oc;6Ub|ra zIJgf>;I{n`FI~O1)E0b^=f}NXz+3E@ufP|1jU(T_6EQM7*LYr*{XCbg4p52%<~bq< ze#VG53ulfm4|V8V*9qnY_|@61S7*<0TnFeFIw&u{X-CG1T}6>YtfQOH@SS}>a-fdP zq?|()rH-Q$JCt8GM@RIcB|e4k)PWR&=|t1Hng?}PIxL&AtO=>Z6~#`*f5c9w9@)#T zg)Qw;y^eJPB>_1JTpNzHnfPO)FvQb7g98q(6P`D3=0V#LV??F?H1(Zh(FI2LAH}`S z<~pM`moM;3))d(TdccSJX0K@Z3=AMMy?9u+tUiTbBr8a*FYU`X)!JXz8z0(hdaJMX ze&c-smHB#yA7ZonsW7IU(V@QUgSkO(hQH;I4f8UdFAKU+@HZs$0^pr@!t`G2&3pRb zW;-tx0kG8Y3SjU@uhnX{FY4e;n&>0(yPxM|N?F+I)A3b{H4RSgHw9lVE*Uiui%crw-fZS69_cwHqQ~AWrJ8_)OMnf<7 z+Nl>0{D`=bW204ETcEFV>Rig~WnSEtO`iB%;F{G4mK~ThP3Z7L57l|z5L@j5RMKjS z!3K67M&Lgdc6o3izsk2Xw!EHL^85z6_`sCSW=*~`K*cJV8e|*{G|}+(IRlu0ED=PW zWs^n+luEbG`a;L}Jr_izW8cU_ri`rbtRsEWbe_DZr)=Z{#1qWu#ukay!J&>FaV1BOSg(f+Dnno85J~5_irY0Nu9D|()Ch`w` z5&$St%tm@H?A%Q9sUaTP=|PeDr7Gm(_?HPt684`|s>%~VF3_5==b}uxDW$7@EEfm{ zHul><0Z>3rQjX~ddyXaCZUCl7eycZ>ipA-a-Y

    !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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 From fb98f62e0955d1f0fbfe365e9ee5aac2f58438cf Mon Sep 17 00:00:00 2001 From: orangesurf Date: Sun, 18 May 2025 11:49:52 -0500 Subject: [PATCH 248/534] Fix meta image file format --- frontend/src/index.mempool.meta.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/index.mempool.meta.html b/frontend/src/index.mempool.meta.html index 92154f8db..f6568df4e 100644 --- a/frontend/src/index.mempool.meta.html +++ b/frontend/src/index.mempool.meta.html @@ -9,7 +9,7 @@ - + From 5d0596d37bddee6f1c98e36a6448bc5b0e83c101 Mon Sep 17 00:00:00 2001 From: orangesurf Date: Sun, 18 May 2025 11:52:06 -0500 Subject: [PATCH 249/534] Fix meta image file format --- frontend/src/index.mempool.meta.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/index.mempool.meta.html b/frontend/src/index.mempool.meta.html index f6568df4e..1fd1e6531 100644 --- a/frontend/src/index.mempool.meta.html +++ b/frontend/src/index.mempool.meta.html @@ -19,7 +19,7 @@ - + From a3c6487a2d64b08d7d94a70d6c4096a01219f174 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 19 May 2025 21:14:58 +0000 Subject: [PATCH 250/534] prioritize testnet4 address search results --- frontend/src/app/shared/regex.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/shared/regex.utils.ts b/frontend/src/app/shared/regex.utils.ts index 4d3985f56..00d4ec2f9 100644 --- a/frontend/src/app/shared/regex.utils.ts +++ b/frontend/src/app/shared/regex.utils.ts @@ -142,7 +142,7 @@ const ADDRESS_CHARS: { type RegexTypeNoAddrNoBlockHash = | `transaction` | `blockheight` | `date` | `timestamp`; export type RegexType = `address` | `blockhash` | RegexTypeNoAddrNoBlockHash; -export const NETWORKS = [`testnet`, `testnet4`, `signet`, `liquid`, `liquidtestnet`, `mainnet`] as const; +export const NETWORKS = [`mainnet`, `testnet4`, `testnet`, `signet`, `liquid`, `liquidtestnet`] as const; export type Network = typeof NETWORKS[number]; // Turn const array into union type export const ADDRESS_REGEXES: [RegExp, Network][] = NETWORKS From e0c8cdd697397531ddb6f22387030db76ce9adb9 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 20 May 2025 15:20:09 +0200 Subject: [PATCH 251/534] Add historical price endpoint to Liquid backend --- backend/src/api/liquid/liquid.routes.ts | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/backend/src/api/liquid/liquid.routes.ts b/backend/src/api/liquid/liquid.routes.ts index 388038f7f..4976d1694 100644 --- a/backend/src/api/liquid/liquid.routes.ts +++ b/backend/src/api/liquid/liquid.routes.ts @@ -4,6 +4,7 @@ import config from '../../config'; import elementsParser from './elements-parser'; import icons from './icons'; import { handleError } from '../../utils/api'; +import PricesRepository from '../../repositories/PricesRepository'; class LiquidRoutes { public initRoutes(app: Application) { @@ -31,6 +32,7 @@ class LiquidRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'liquid/reserves/utxos/emergency-spent', this.$getEmergencySpentUtxos) .get(config.MEMPOOL.API_URL_PREFIX + 'liquid/reserves/utxos/emergency-spent/stats', this.$getEmergencySpentUtxosStats) .get(config.MEMPOOL.API_URL_PREFIX + 'liquid/reserves/status', this.$getFederationAuditStatus) + .get(config.MEMPOOL.API_URL_PREFIX + 'historical-price', this.$getHistoricalPrice) ; } } @@ -255,6 +257,34 @@ class LiquidRoutes { } } + private async $getHistoricalPrice(req: Request, res: Response): Promise { + try { + res.header('Pragma', 'public'); + res.header('Cache-control', 'public'); + res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); + if (['testnet', 'signet', 'liquidtestnet'].includes(config.MEMPOOL.NETWORK)) { + 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); + } else if (timestamp) { + response = await PricesRepository.$getNearestHistoricalPrice(timestamp); + } else if (currency) { + response = await PricesRepository.$getHistoricalPrices(currency); + } else { + response = await PricesRepository.$getHistoricalPrices(); + } + res.status(200).send(response); + } catch (e) { + handleError(req, res, 500, 'Failed to get historical prices'); + } + } + } export default new LiquidRoutes(); From a87cdff36b7bab15e703a8413b052371c6929b23 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 20 May 2025 15:20:19 +0200 Subject: [PATCH 252/534] Add USD series to Liquid reserves graph --- .../lbtc-pegs-graph.component.html | 2 +- .../lbtc-pegs-graph.component.ts | 141 ++++++++++++++++-- frontend/src/app/services/price.service.ts | 2 +- 3 files changed, 130 insertions(+), 15 deletions(-) diff --git a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.html b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.html index 841d6b45c..61b09d198 100644 --- a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.html +++ b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.html @@ -1,4 +1,4 @@ -

    +
    \ No newline at end of file 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 063280898..6ccdc59cd 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,10 @@ -import { Component, Inject, LOCALE_ID, ChangeDetectionStrategy, Input, OnChanges, OnInit } from '@angular/core'; +import { Component, Inject, LOCALE_ID, ChangeDetectionStrategy, Input, OnChanges, OnInit, ChangeDetectorRef } from '@angular/core'; import { formatDate, formatNumber } from '@angular/common'; import { EChartsOption } from '@app/graphs/echarts'; import { StateService } from '@app/services/state.service'; +import { map, Subscription, switchMap } from 'rxjs'; +import { PriceService } from '../../services/price.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; @Component({ selector: 'app-lbtc-pegs-graph', @@ -21,19 +24,31 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { @Input() data: any; @Input() height: number | string = '360'; pegsChartOptions: EChartsOption; + subscription: Subscription; - right: number | string = '10'; + right: number | string = '5'; top: number | string = '20'; - left: number | string = '50'; + left: number | string = '60'; template: ('widget' | 'advanced') = 'widget'; isLoading = true; - + chartInstance: any = undefined; pegsChartInitOption = { renderer: 'svg' }; + adjustedLeft: number; + adjustedRight: number; + selected = { + 'L-BTC': true, + 'BTC': true, + 'USD': false, + }; + constructor( public stateService: StateService, + public priceService: PriceService, + public amountShortenerPipe: AmountShortenerPipe, + public cd: ChangeDetectorRef, @Inject(LOCALE_ID) private locale: string, ) { } @@ -42,14 +57,25 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { } ngOnChanges() { - if (!this.data?.liquidPegs) { + if (!this.data?.liquidReserves) { return; } - if (!this.data.liquidReserves) { - this.pegsChartOptions = this.createChartOptions(this.data.liquidPegs.series, this.data.liquidPegs.labels); - } else { - this.pegsChartOptions = this.createChartOptions(this.data.liquidPegs.series, this.data.liquidPegs.labels, this.data.liquidReserves.series); - } + + this.subscription = this.stateService.conversions$.pipe( + switchMap(conversions => + this.priceService.getPriceByBulk$(this.data.liquidPegs.labels.map((date: string) => Math.floor(new Date(date).getTime() / 1000)).slice(0, -1), 'USD') + .pipe( + map(prices => this.data.liquidReserves.series.map((value, i) => value * (prices[i]?.price.USD || conversions['USD']))) + ) + ) + ).subscribe((usdBanlance: any) => { + if (!this.data.liquidReserves) { + this.pegsChartOptions = this.createChartOptions(this.data.liquidPegs.series, this.data.liquidPegs.labels); + } else { + this.pegsChartOptions = this.createChartOptions(this.data.liquidPegs.series, this.data.liquidPegs.labels, this.data.liquidReserves.series, usdBanlance); + } + this.cd.markForCheck(); + }); } rendered() { @@ -59,7 +85,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { this.isLoading = false; } - createChartOptions(pegSeries: number[], labels: string[], reservesSeries?: number[],): EChartsOption { + createChartOptions(pegSeries: number[], labels: string[], reservesSeries?: number[], usdBalance?: number[]): EChartsOption { return { grid: { height: this.height, @@ -89,6 +115,35 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { } } }], + legend: { + data: [ + { + name: 'L-BTC', + inactiveColor: 'var(--grey)', + textStyle: { + color: 'white', + }, + icon: 'roundRect', + }, + { + name: 'BTC', + inactiveColor: 'var(--grey)', + textStyle: { + color: 'white', + }, + icon: 'roundRect', + }, + { + name: 'USD', + inactiveColor: 'var(--grey)', + textStyle: { + color: 'white', + }, + icon: 'roundRect', + } + ], + selected: this.selected, + }, tooltip: { trigger: 'axis', position: (pos, params, el, elRect, size) => { @@ -109,10 +164,12 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { for (let index = params.length - 1; index >= 0; index--) { const item = params[index]; if (index < 26) { + let formattedValue; + item.seriesName === 'USD' ? formattedValue = this.amountShortenerPipe.transform(item.value, 3, undefined, true, true) : formattedValue = formatNumber(item.value, this.locale, '1.2-2'); itemFormatted += `
    ${colorSpan(item.color)}
    -
    ${formatNumber(item.value, this.locale, '1.2-2')} ${item.seriesName}
    +
    ${formattedValue} ${item.seriesName}
    `; } } @@ -129,10 +186,13 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { boundaryGap: false, data: labels.map((value: any) => `${formatDate(value, 'MMM\ny', this.locale)}`), }, - yAxis: { + yAxis: [{ type: 'value', axisLabel: { fontSize: 11, + formatter: (val): string => { + return `${this.amountShortenerPipe.transform(Math.round(val), 0, undefined, true)} BTC`; + } }, splitLine: { lineStyle: { @@ -142,10 +202,23 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { } } }, + { + type: 'value', + axisLabel: { + color: 'rgb(110, 112, 121)', + formatter: function(val) { + return `$${this.amountShortenerPipe.transform(val, 3, undefined, true, true)}`; + }.bind(this) + }, + splitLine: { + show: false, + }, + }], series: [ { data: pegSeries, name: 'L-BTC', + yAxisIndex: 0, color: '#116761', type: 'line', stack: 'total', @@ -163,6 +236,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { { data: reservesSeries, name: 'BTC', + yAxisIndex: 0, color: '#EA983B', type: 'line', smooth: true, @@ -172,8 +246,49 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { color: '#EA983B', }, }, + { + data: usdBalance, + name: 'USD', + yAxisIndex: 1, + color: '#4CAF50', + type: 'line', + smooth: true, + showSymbol: false, + lineStyle: { + width: 2, + color: '#3BCC49', + }, + }, ], }; } + + onLegendSelectChanged(e) { + this.selected = e.selected; + this.adjustedRight = this.selected['USD'] ? +this.right + 40 : +this.right; + this.adjustedLeft = this.selected['L-BTC'] || this.selected['BTC'] ? +this.left : +this.left - 40; + + this.pegsChartOptions = { + ...this.pegsChartOptions, + grid: { + ...this.pegsChartOptions.grid, + right: this.adjustedRight, + left: this.adjustedLeft, + }, + legend: { + ...this.pegsChartOptions.legend, + selected: this.selected, + }, + }; + } + + onChartInit(ec) { + this.chartInstance = ec; + this.chartInstance.on('legendselectchanged', this.onLegendSelectChanged.bind(this)); + } + + ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } } diff --git a/frontend/src/app/services/price.service.ts b/frontend/src/app/services/price.service.ts index e5a0c86c8..f4a1717a9 100644 --- a/frontend/src/app/services/price.service.ts +++ b/frontend/src/app/services/price.service.ts @@ -251,7 +251,7 @@ export class PriceService { } getPriceByBulk$(timestamps: number[], currency: string): Observable { - if (this.stateService.env.BASE_MODULE !== 'mempool' || !this.stateService.env.HISTORICAL_PRICE) { + if (!this.stateService.env.HISTORICAL_PRICE) { return of([]); } From 4d6935cc32aa3989812ebec3a45461cf5ebca737 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 21 May 2025 13:33:55 +0200 Subject: [PATCH 253/534] Fix crash when toggling coinbase tx details --- .../transactions-list/transactions-list.component.html | 4 ++-- frontend/src/app/shared/components/asm/asm.component.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 cb756209f..327403be0 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -174,7 +174,7 @@
    -
    - @if (tx['_sigs'][vindex].length === 0 && signaturesMode === 'all') { + @if (!tx['_sigs']?.[vindex]?.length) { - } @else if (showSig(tx['_sigs'][vindex])) { + } @else { @for (sig of tx['_sigs'][vindex].slice(0, 7); track sig.signature; let idx = $index) { @if (idx < 7) { blocks[0])); this.networkSubscription = this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.signaturesSubscription = this.stateService.signaturesMode$.subscribe((mode) => { - this.signaturesMode = mode; + this.signaturesPreference = mode; this.updateSignaturesMode(); }); this.queryParamsSubscription = this.route.queryParams.subscribe((params) => { - console.log('query params', params); if (params['sigs'] && ['all', 'interesting', 'none'].includes(params['sigs'])) { this.signaturesOverride = params['sigs'] as SignaturesMode; this.updateSignaturesMode(); @@ -313,16 +313,19 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { } // process signature data - tx['_sigs'] = tx.vin.map(vin => processInputSignatures(vin)); - tx['_sigmap'] = tx['_sigs'].reduce((map, sigs, vindex) => { - sigs.forEach(sig => { - map[sig.signature] = { sig, vindex }; - }); - return map; - }, {}); + if (tx.vin.length && !tx.vin[0].is_coinbase) { + tx['_sigs'] = tx.vin.map(vin => processInputSignatures(vin)); + tx['_sigmap'] = tx['_sigs'].reduce((map, sigs, vindex) => { + sigs.forEach(sig => { + map[sig.signature] = { sig, vindex }; + }); + return map; + }, {}); - if (!tx['_interestingSignatures']) { - tx['_interestingSignatures'] = tx['_sigs'].some(sigs => sigs.some(sig => this.sigIsInteresting(sig))); + if (!tx['_interestingSignatures']) { + tx['_interestingSignatures'] = tx['_sigs'].some(sigs => sigs.some(sig => this.sigIsInteresting(sig))) + || tx['_sigs'].every(sigs => !sigs?.length); + } } tx['_showSignatures'] = this.shouldShowSignatures(tx); } diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 100eeef35..cb98b6dc4 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -335,7 +335,7 @@ export class StateService { this.blocksSubject$.next([]); }); - this.signaturesMode$ = new BehaviorSubject(this.storageService.getValue('signatures-enabled') as SignaturesMode || null); + this.signaturesMode$ = new BehaviorSubject(this.storageService.getValue('signatures-mode') as SignaturesMode || null); this.blockVSize = this.env.BLOCK_WEIGHT_UNITS / 4; diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index ecf392ff4..6fa0ff736 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -235,7 +235,7 @@ export function processInputSignatures(vin: Vin): SigInfo[] { signatures = extractDERSignaturesWitness(vin.witness || []); break; case 'v1_p2tr': { - const hasAnnex = vin.witness[vin.witness.length - 1].startsWith('50'); + const hasAnnex = vin.witness.length > 1 &&vin.witness[vin.witness.length - 1].startsWith('50'); const isKeyspend = vin.witness.length === (hasAnnex ? 2 : 1); if (isKeyspend) { signatures = extractSchnorrSignatures(vin.witness); From 1472e33ce2d78f7048fd341bb7329d36b80f8cf2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 9 May 2025 21:17:35 +0000 Subject: [PATCH 236/534] use stricter format for detecting DER signatures --- frontend/src/app/shared/transaction.utils.ts | 66 +++++++++++++++++--- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 6fa0ff736..de1c4d70c 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -86,6 +86,54 @@ export function isDERSig(w: string): boolean { ); } +// enforce canonical DER-encoded signature format +// <0x30> <0x02> <0x02> +// see https://github.com/bitcoin/bitcoin/blob/9a05b45da60d214cb1e5a50c3d2293b1defc9bb0/src/script/interpreter.cpp#L97-L106 +export function isCanonicalDERSig(w: string): boolean { + // minimum DER signature length is 8 bytes + sighash flag (see https://mempool.space/testnet/tx/c6c232a36395fa338da458b86ff1327395a9afc28c5d2daa4273e410089fd433) + if (w.length < 18) { + return false; + } + + // first byte is 0x30 ("SEQUENCE") + if (!w.startsWith('30')) { + return false; + } + + // second byte encodes the total length of the sequence (not including sighash flag) + const compoundLength = parseInt(w.slice(2, 4), 16); + if (w.length !== (compoundLength * 2) + 6) { + return false; + } + + // third byte is 0x02 ("INTEGER") + if (w.slice(4, 6) !== '02') { + return false; + } + + // fourth byte encodes the length of the R component + const rLength = parseInt(w.slice(6, 8), 16); + // rLength doesn't overflow remaining space + if (w.length < (rLength * 2) + 10) { + return false; + } + const sEnd = 8 + (rLength * 2); + + // next byte after R is 0x02 ("INTEGER") + if (w.slice(sEnd, sEnd + 2) !== '02') { + return false; + } + + // next byte encodes the length of the S component + const sLength = parseInt(w.slice(sEnd + 2, sEnd + 4), 16); + // R + S lengths exactly fit the length of the signature + if (w.length !== ((rLength + sLength) * 2) + 14) { + return false; + } + + return true; +} + export enum SighashFlag { DEFAULT = 0, ALL = 1, @@ -156,7 +204,7 @@ export function extractDERSignaturesWitness(witness: string[]): SigInfo[] { const signatures: SigInfo[] = []; for (const w of witness) { - if (isDERSig(w)) { + if (isCanonicalDERSig(w)) { signatures.push({ signature: w, sighash: decodeSighashFlag(parseInt(w.slice(-2), 16)), @@ -179,7 +227,7 @@ export function extractDERSignaturesASM(script_asm: string): SigInfo[] { // Look for OP_PUSHBYTES_N followed by a hex string if (ops[i].startsWith('OP_PUSHBYTES_')) { const hexData = ops[i + 1]; - if (isDERSig(hexData)) { + if (isCanonicalDERSig(hexData)) { const sighash = decodeSighashFlag(parseInt(hexData.slice(-2), 16)); signatures.push({ signature: hexData, @@ -225,9 +273,13 @@ export function processInputSignatures(vin: Vin): SigInfo[] { case 'p2pkh': signatures = extractDERSignaturesASM(vin.scriptsig_asm); break; - case 'p2sh': - signatures = [...extractDERSignaturesASM(vin.scriptsig_asm), ...extractDERSignaturesASM(vin.inner_redeemscript_asm), ...extractDERSignaturesWitness(vin.witness || [])]; - break; + case 'p2sh': { + if (vin.witness?.length) { + signatures = extractDERSignaturesWitness(vin.witness || []); + } else { + signatures = [...extractDERSignaturesASM(vin.scriptsig_asm), ...extractDERSignaturesASM(vin.inner_redeemscript_asm)]; + } + } break; case 'v0_p2wpkh': signatures = extractDERSignaturesWitness(vin.witness || []); break; @@ -464,7 +516,7 @@ export function getNonWitnessSize(tx: Transaction): number { export function setSegwitSighashFlags(flags: bigint, witness: string[]): bigint { for (const w of witness) { - if (isDERSig(w)) { + if (isCanonicalDERSig(w)) { flags |= setSighashFlags(flags, w); } } @@ -478,7 +530,7 @@ export function setLegacySighashFlags(flags: bigint, scriptsig_asm: string): big continue; } // check pushed data - if (isDERSig(item)) { + if (isCanonicalDERSig(item)) { flags |= setSighashFlags(flags, item); } } From 7495d4116fc8f8d55f4678f2cdd3b5c6677ed70c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 May 2025 17:28:11 +0000 Subject: [PATCH 237/534] Detect nonstandard annex & add goggles flag in backend --- backend/src/api/common.ts | 31 ++++++++++++++++++++++++++++++- backend/src/mempool.interfaces.ts | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index f3569c44c..80542edb4 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -255,7 +255,32 @@ export class Common { } else if (this.isNonStandardAnchor(tx, height)) { return true; } - // TODO: bad-witness-nonstandard + // bad-witness-nonstandard + if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.witness?.length) { + const hasAnnex = vin.witness.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + // annex is non-standard + if (hasAnnex) { + return true; + } + if (vin.witness.length > (hasAnnex ? 2 : 1)) { + // script path spend + const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; + // control block is required + if (!controlBlock.length) { + return false; + } else { + // Leaf version must be 0xc0 (aka Tapscript, see BIP 342) + if ((parseInt(controlBlock.slice(0, 2), 16) & 0xfe) !== 0xc0) { + return false; + } + } + // remaining witness items (except for the script) must be within MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE limit + if (vin.witness.slice(0, vin.witness.length - (hasAnnex ? 3 : 2)).some(v => v.length > 160)) { + return false; + } + } + } + // TODO: other bad-witness-nonstandard cases } // output validation @@ -513,6 +538,10 @@ export class Common { flags |= TransactionFlags.p2tr; if (vin.witness?.length) { flags = Common.isInscription(vin, flags); + const hasAnnex = vin.witness.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + if (hasAnnex) { + flags |= TransactionFlags.annex; + } } } break; } diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index e1da4be6f..7059eb936 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -274,6 +274,7 @@ export const TransactionFlags = { fake_pubkey: 0b00000010_00000000_00000000_00000000n, inscription: 0b00000100_00000000_00000000_00000000n, fake_scripthash: 0b00001000_00000000_00000000_00000000n, + annex: 0b00010000_00000000_00000000_00000000n, // heuristics coinjoin: 0b00000001_00000000_00000000_00000000_00000000n, consolidation: 0b00000010_00000000_00000000_00000000_00000000n, From 7758e029244a8b8270bdd9f2cf4c9396482cb00b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 May 2025 17:29:28 +0000 Subject: [PATCH 238/534] Detect nonstandard annex & add goggles flag in frontend --- frontend/src/app/shared/filters.utils.ts | 4 ++- frontend/src/app/shared/transaction.utils.ts | 32 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/shared/filters.utils.ts b/frontend/src/app/shared/filters.utils.ts index 02da99405..05fba85b2 100644 --- a/frontend/src/app/shared/filters.utils.ts +++ b/frontend/src/app/shared/filters.utils.ts @@ -46,6 +46,7 @@ export const TransactionFlags = { fake_pubkey: 0b00000010_00000000_00000000_00000000n, inscription: 0b00000100_00000000_00000000_00000000n, fake_scripthash: 0b00001000_00000000_00000000_00000000n, + annex: 0b00010000_00000000_00000000_00000000n, // heuristics coinjoin: 0b00000001_00000000_00000000_00000000_00000000n, consolidation: 0b00000010_00000000_00000000_00000000_00000000n, @@ -102,6 +103,7 @@ export const TransactionFilters: { [key: string]: Filter } = { fake_pubkey: { key: 'fake_pubkey', label: 'Fake pubkey', flag: TransactionFlags.fake_pubkey, tooltip: true, txPage: true, }, inscription: { key: 'inscription', label: 'Inscription', flag: TransactionFlags.inscription, important: true, tooltip: true, txPage: true, }, fake_scripthash: { key: 'fake_scripthash', label: 'Fake scripthash', flag: TransactionFlags.fake_scripthash, tooltip: true, txPage: true,}, + annex: { key: 'annex', label: 'Annex', flag: TransactionFlags.annex, important: false, tooltip: true, txPage: true,}, /* heuristics */ coinjoin: { key: 'coinjoin', label: $localize`Coinjoin`, flag: TransactionFlags.coinjoin, important: true, tooltip: true, txPage: true, }, consolidation: { key: 'consolidation', label: $localize`Consolidation`, flag: TransactionFlags.consolidation, tooltip: true, txPage: true, }, @@ -118,7 +120,7 @@ export const FilterGroups: { label: string, filters: Filter[]}[] = [ { label: $localize`:@@885666551418fd59011ceb09d5c481095940193b:Features`, filters: ['rbf', 'no_rbf', 'v1', 'v2', 'v3', 'nonstandard'] }, { label: $localize`Address Types`, filters: ['p2pk', 'p2ms', 'p2pkh', 'p2sh', 'p2wpkh', 'p2wsh', 'p2tr'] }, { label: $localize`Behavior`, filters: ['cpfp_parent', 'cpfp_child', 'replacement', 'acceleration'] }, - { label: $localize`Data`, filters: ['op_return', 'fake_pubkey', 'fake_scripthash', 'inscription'] }, + { label: $localize`Data`, filters: ['op_return', 'fake_pubkey', 'fake_scripthash', 'inscription', 'annex'] }, { label: $localize`Heuristics`, filters: ['coinjoin', 'consolidation', 'batch_payout'] }, { label: $localize`Sighash Flags`, filters: ['sighash_all', 'sighash_none', 'sighash_single', 'sighash_default', 'sighash_acp'] }, ].map(group => ({ label: group.label, filters: group.filters.map(filter => TransactionFilters[filter] || null).filter(f => f != null) })); \ No newline at end of file diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 6fa0ff736..2bc899685 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -312,7 +312,32 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string } else if (isNonStandardAnchor(tx, height, network)) { return true; } - // TODO: bad-witness-nonstandard + // bad-witness-nonstandard + if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.witness?.length) { + const hasAnnex = vin.witness.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + // annex is non-standard + if (hasAnnex) { + return true; + } + if (vin.witness.length > (hasAnnex ? 2 : 1)) { + // script path spend + const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; + // control block is required + if (!controlBlock.length) { + return false; + } else { + // Leaf version must be 0xc0 (aka Tapscript, see BIP 342) + if ((parseInt(controlBlock.slice(0, 2), 16) & 0xfe) !== 0xc0) { + return false; + } + } + // remaining witness items (except for the script) must be within MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE limit + if (vin.witness.slice(0, vin.witness.length - (hasAnnex ? 3 : 2)).some(v => v.length > 160)) { + return false; + } + } + } + // TODO: other bad-witness-nonstandard cases } // output validation @@ -568,6 +593,9 @@ export function getTransactionFlags(tx: Transaction, cpfpInfo?: CpfpInfo, replac flags |= TransactionFlags.inscription; } } + if (hasAnnex) { + flags |= TransactionFlags.annex; + } } } break; } @@ -640,7 +668,7 @@ export function getTransactionFlags(tx: Transaction, cpfpInfo?: CpfpInfo, replac 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; From af186c633c81beff56aa909f6c944f66457e0162 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 May 2025 17:29:38 +0000 Subject: [PATCH 239/534] db migration to reindex blocks since first annex tx --- backend/src/api/database-migration.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index cce639370..fbaf05658 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 = 97; + private static currentVersion = 98; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -1146,6 +1146,14 @@ class DatabaseMigration { await this.$executeQuery(`ALTER TABLE blocks MODIFY COLUMN definition_hash varchar(255) NULL DEFAULT "${poolJsonSha}"`); await this.updateToSchemaVersion(97); } + + // reindex mainnet Goggles flags for mined block templates above height 896070 + // (since the first annex transaction at height 896071) + // (safe to make this conditional on the network since it doesn't change the database schema) + if (databaseSchemaVersion < 98 && config.MEMPOOL.NETWORK === 'mainnet') { + await this.$executeQuery('UPDATE blocks_summaries SET version = 0 WHERE height >= 896070;'); + await this.updateToSchemaVersion(98); + } } /** From a08a256e98b91de47ae8278d0a627d216b7509c1 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 May 2025 18:28:14 +0000 Subject: [PATCH 240/534] label annex in transaction details --- .../transactions-list/transactions-list.component.html | 5 +++++ .../transactions-list/transactions-list.component.scss | 7 +++++++ frontend/src/app/shared/shared.module.ts | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) 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 08ffb69d4..cb756209f 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -183,6 +183,11 @@ + @if (vin.witness.length > 1 && windex === vin.witness.length - 1 && witness.slice(0, 2) === '50') { + + + + } @if (witness.length > 1000) { @if (!showFullWitness[vindex][windex]) { {{ witness | slice:0:1000 }} diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 7e1327e2e..4aa93907b 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -150,6 +150,13 @@ transition: transform 0.2s ease, opacity 0.2s ease; } +.annex { + margin-right: -5px; + position: relative; + left: 0px; + top: 0px; +} + .mobile-bottomcol { margin-top: 15px; @media (min-width: 992px) { diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 28d19a256..fe86d02ca 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -7,7 +7,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faTimeline, - faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen } from '@fortawesome/free-solid-svg-icons'; + faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen, faPaperclip } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -465,5 +465,6 @@ export class SharedModule { library.addIcons(faMicroscope); library.addIcons(faExclamationTriangle); library.addIcons(faLockOpen); + library.addIcons(faPaperclip); } } From 083b59f07cde43b67dddfcab46583eb3479b1a35 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 May 2025 22:11:17 +0000 Subject: [PATCH 241/534] avoid requesting infinite acceleration history pages --- frontend/src/app/services/services-api.service.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 2408bd47e..828fe5663 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -169,9 +169,10 @@ export class ServicesApiServices { page, total: parseInt(response.headers.get('X-Total-Count'), 10) || 0, accelerations: accelerations.concat(response.body || []), + pageAccelerations: response.body || [], })), - switchMap(({page, total, accelerations}) => { - if (accelerations.length >= Math.min(total, limit ?? Infinity) || (findTxid && accelerations.find((acc) => acc.txid === findTxid))) { + switchMap(({page, total, accelerations, pageAccelerations }) => { + if (pageAccelerations.length === 0 || 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); From ce9d16f479b012b960b0a856100773d85a07c142 Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Tue, 13 May 2025 18:25:39 -0400 Subject: [PATCH 242/534] Add get-block-v1 doc --- .../src/app/docs/api-docs/api-docs-data.ts | 348 +++++++++++++++--- .../docs/api-docs/api-docs-nav.component.html | 2 +- .../docs/api-docs/api-docs-nav.component.ts | 2 + .../app/docs/api-docs/api-docs.component.html | 2 +- .../app/docs/api-docs/api-docs.component.ts | 2 + 5 files changed, 305 insertions(+), 51 deletions(-) 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 5e9608bdf..876def718 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -3740,6 +3740,7 @@ export const restApiDocsData = [ showConditions: bitcoinNetworks.concat(liquidNetworks) }, { + options: { electrsOnly: true }, type: "endpoint", category: "blocks", httpRequestMethod: "GET", @@ -3747,7 +3748,6 @@ export const restApiDocsData = [ title: "GET Block", description: { default: "Returns details about a block.", - liquid: "Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, and previousblockhash." }, urlString: "/block/:hash", showConditions: bitcoinNetworks.concat(liquidNetworks), @@ -3777,54 +3777,19 @@ export const restApiDocsData = [ commonJS: ['000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce'], curl: ['000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce'], response: `{ - "extras": { - "reward": 638307429, - "coinbaseTx": { - "vin": [ - { - "scriptsig": "03ad3e0b2cfabe6d6df8fb5429a5de5fc2bd1bafffbc90d33c77eb73307d51931d247f21d7bccde51710000000f09f909f092f4632506f6f6c2f6b0000000000000000000000000000000000000000000000000000000000000000000000050086411100" - } - ], - "vout": [ - { - "scriptpubkey_address": "1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY", - "value": 638307429 - } - ] - }, - "coinbaseRaw": "03ad3e0b2cfabe6d6df8fb5429a5de5fc2bd1bafffbc90d33c77eb73307d51931d247f21d7bccde51710000000f09f909f092f4632506f6f6c2f6b0000000000000000000000000000000000000000000000000000000000000000000000050086411100", - "medianFee": 10, - "feeRange": [ - 1, - 8, - 9, - 10, - 15, - 21, - 348 - ], - "totalFees": 13307429, - "avgFee": 5591, - "avgFeeRate": 13, - "pool": { - "id": 36, - "name": "F2Pool", - "slug": "f2pool" - }, - "matchRate": 93 - }, - "id": "00000000000000000007566f8f035a1dc38b351e6f54778b311fe6dbabd79b46", - "height": 736941, - "version": 536870916, - "timestamp": 1652891466, - "bits": 386466234, - "nonce": 3514220842, - "difficulty": 31251101365711.12, - "merkle_root": "4a3072f98f60cbb639bb7f46180b8843d17c7502627ffb633db0ed86610cdd71", - "tx_count": 2381, - "size": 1709571, - "weight": 3997770, - "previousblockhash": "00000000000000000005ef14db0b4befcbbe1e9b8676eec67fcf810a899c4d5e" + "id": "000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce", + "height": 363366, + "version": 2, + "timestamp": 1435766771, + "tx_count": 494, + "size": 286494, + "weight": 1145976, + "merkle_root": "9d3cb87bf05ebae366b4262ed5f768ce8c62fc385c3886c9cb097647b04b686c", + "previousblockhash": "000000000000000010c545b6fa3ef1f7cf45a2a8760b1ee9f2e89673218207ce", + "mediantime": 1435763435, + "nonce": 2892644888, + "bits": 404111758, + "difficulty": 49402014931.2275 }` }, codeSampleTestnet: { @@ -3904,6 +3869,291 @@ export const restApiDocsData = [ previousblockhash: "2745fd72a5bd2b256c9d2044631032d2cd872f1f0001c3db52e26604a6423526", mediantime: 1641153964, ext: {...} +}`, + }, + } + } + }, + { + type: "endpoint", + category: "blocks", + httpRequestMethod: "GET", + fragment: "get-block-v1", + title: "GET Block (v1)", + description: { + default: "Returns details about a block using Mempool's Node.js backend.", + }, + urlString: "/v1/block/:hash", + showConditions: bitcoinNetworks.concat(liquidNetworks), + showJsExamples: showJsExamplesDefault, + codeExample: { + default: { + codeTemplate: { + curl: `/api/v1/block/%{1}`, + commonJS: ` + const { %{0}: { blocks } } = mempoolJS(); + + const hash = '%{1}'; + const block = await blocks.getBlock({ hash }); + + document.getElementById("result").textContent = JSON.stringify(block, undefined, 2); + `, + esModule: ` + const { %{0}: { blocks } } = mempoolJS(); + + const hash = '%{1}'; + const block = await blocks.getBlock({ hash }); + console.log(block); + `, + }, + codeSampleMainnet: { + esModule: ['000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce'], + commonJS: ['000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce'], + curl: ['000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce'], + response: `{ + "id": "000000000000000015dc777b3ff2611091336355d3f0ee9766a2cf3be8e4b1ce", + "height": 363366, + "version": 2, + "timestamp": 1435766771, + "bits": 404111758, + "nonce": 2892644888, + "difficulty": 49402014931.22746, + "merkle_root": "9d3cb87bf05ebae366b4262ed5f768ce8c62fc385c3886c9cb097647b04b686c", + "tx_count": 494, + "size": 286494, + "weight": 1145976, + "previousblockhash": "000000000000000010c545b6fa3ef1f7cf45a2a8760b1ee9f2e89673218207ce", + "mediantime": 1435763435, + "extras": { + "totalFees": 5949764, + "medianFee": 14, + "feeRange": [ + 0, + 0, + 1, + 14, + 38, + 48, + 261 + ], + "reward": 2505949764, + "pool": { + "id": 0, + "name": "Unknown", + "slug": "unknown", + "minerNames": null + }, + "avgFee": 12068, + "avgFeeRate": 20, + "coinbaseRaw": "03668b050455940ee2ebbc03100000046d", + "coinbaseAddress": "17JJ3oZyF4ShQMGukDjpMWhmooCjEvoVVB", + "coinbaseAddresses": [ + "17JJ3oZyF4ShQMGukDjpMWhmooCjEvoVVB" + ], + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 45160ea9d45f6edefef3977ac0b2cdcc29aa594a OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "...", + "avgTxSize": 579.57, + "totalInputs": 1424, + "totalOutputs": 1764, + "totalOutputAmt": 531126071491, + "medianFeeAmt": 10000, + "feePercentiles": [ + 0, + 735, + 10000, + 10000, + 10000, + 20000, + 300000 + ], + "segwitTotalTxs": 0, + "segwitTotalSize": 0, + "segwitTotalWeight": 0, + "header": "02000000ce0782217396e8f2e91e0b76a8a245cff7f13efab645c51000000000000000006c684bb0477609cbc986385c38fc628cce68f7d52e26b466e3ba5ef07bb83c9df30f94558e41161818426aac", + "utxoSetChange": 340, + "utxoSetSize": 21180314, + "totalInputAmt": 531132021255, + "virtualSize": 286494, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null + } +}` + }, + codeSampleTestnet: { + esModule: ['000000000000009c08dc77c3f224d9f5bbe335a78b996ec1e0701e065537ca81'], + commonJS: ['000000000000009c08dc77c3f224d9f5bbe335a78b996ec1e0701e065537ca81'], + curl: ['000000000000009c08dc77c3f224d9f5bbe335a78b996ec1e0701e065537ca81'], + response: `{ + "id": "000000000000009c08dc77c3f224d9f5bbe335a78b996ec1e0701e065537ca81", + "height": 2091140, + "version": 543162372, + "timestamp": 1630625150, + "bits": 436273151, + "nonce": 1600805744, + "difficulty": 16777216, + "merkle_root": "5d10d8d158bb8eb217d01fecc435bd10eda028043a913dc2bfe0ccf536a51cc9", + "tx_count": 2, + "size": 575, + "weight": 1865, + "previousblockhash": "0000000000000073f95d1fc0a93d449f82a754410c635e46264ec6c7c4d5741e", + "mediantime": 1630621997, + "extras": { + "totalFees": 877, + "medianFee": 5, + "feeRange": [ + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "reward": 9766502, + "pool": { + "id": 0, + "name": "Unknown", + "slug": "unknown", + "minerNames": null + }, + "avgFee": 877, + "avgFeeRate": 5, + "coinbaseRaw": "0384e81f047e5d3161425443506f6f6cfabe6d6dfc481b6989a49bad403c75b0abfcdb7796b42489514a8c2d2294d7e5b2c93c05020000007296cd10010022583d1d000000000000", + "coinbaseAddress": "2N4YXTxKEso3yeYXNn5h42Vqu3FzTTQ8Lq5", + "coinbaseAddresses": [ + "2N4YXTxKEso3yeYXNn5h42Vqu3FzTTQ8Lq5" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 7bef0b4a4dafa77b2ec52b81659cbcf0d9a91487 OP_EQUAL", + "coinbaseSignatureAscii": "...", + "avgTxSize": 128, + "totalInputs": 1, + "totalOutputs": 5, + "totalOutputAmt": 4728937, + "medianFeeAmt": null, + "feePercentiles": null, + "segwitTotalTxs": 1, + "segwitTotalSize": 256, + "segwitTotalWeight": 697, + "header": "040060201e74d5c4c7c64e26465e630c4154a7829f443da9c01f5df97300000000000000c91ca536f5cce0bfc23d913a0428a0ed10bd35c4ec1fd017b28ebb58d1d8105d7e5d3161ffff001a705b6a5f", + "utxoSetChange": 4, + "utxoSetSize": 26144301, + "totalInputAmt": 4729814, + "virtualSize": 466.25, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null + } +}` + }, + codeSampleSignet: { + esModule: ['000000ca66fab8083d4f0370d499c3d602e78af5fa69b2427cda15a3f0d96152'], + commonJS: ['000000ca66fab8083d4f0370d499c3d602e78af5fa69b2427cda15a3f0d96152'], + curl: ['000000ca66fab8083d4f0370d499c3d602e78af5fa69b2427cda15a3f0d96152'], + response: `{ + "id": "000000ca66fab8083d4f0370d499c3d602e78af5fa69b2427cda15a3f0d96152", + "height": 53745, + "version": 536870912, + "timestamp": 1630624390, + "bits": 503404179, + "nonce": 19642021, + "difficulty": 0.002919030932507782, + "merkle_root": "2c1984132841b9f98270274012b22beb7d4ade778cf058e9a44d38de5a111362", + "tx_count": 1, + "size": 343, + "weight": 1264, + "previousblockhash": "000001497bffdc2347656847647f343afc0eee441a849259335b8a1d79b6aa4a", + "mediantime": 1630621400, + "extras": { + "totalFees": 0, + "medianFee": 0, + "feeRange": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "reward": 5000000000, + "pool": { + "id": 0, + "name": "Unknown", + "slug": "unknown", + "minerNames": null + }, + "avgFee": 0, + "avgFeeRate": 0, + "coinbaseRaw": "03f1d100", + "coinbaseAddress": "tb1pqk4mdqzp8kpu2g6nrahwd9j0muacyjfadk99tvmpf5vqya8rt5fq2dxx99", + "coinbaseAddresses": [ + "tb1pqk4mdqzp8kpu2g6nrahwd9j0muacyjfadk99tvmpf5vqya8rt5fq2dxx99" + ], + "coinbaseSignature": "OP_PUSHNUM_1 OP_PUSHBYTES_32 05abb680413d83c523531f6ee6964fdf3b82493d6d8a55b3614d180274e35d12", + "coinbaseSignatureAscii": "...", + "avgTxSize": 0, + "totalInputs": 0, + "totalOutputs": 2, + "totalOutputAmt": 0, + "medianFeeAmt": null, + "feePercentiles": null, + "segwitTotalTxs": 0, + "segwitTotalSize": 0, + "segwitTotalWeight": 0, + "header": "000000204aaab6791d8a5b335992841a44ee0efc3a347f644768654723dcff7b490100006213115ade384da4e958f08c77de4a7deb2bb21240277082f9b941281384192c865a31619356011ea5b62b01", + "utxoSetChange": 2, + "utxoSetSize": 302621, + "totalInputAmt": 0, + "virtualSize": 316, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null + } +}` + }, + codeSampleLiquid: { + esModule: [`86aefdd3cf7be8e5781f783fe5d80513e8b3f52f2f1ef61e8e056b7faffc4b78`], + commonJS: [`86aefdd3cf7be8e5781f783fe5d80513e8b3f52f2f1ef61e8e056b7faffc4b78`], + curl: [`86aefdd3cf7be8e5781f783fe5d80513e8b3f52f2f1ef61e8e056b7faffc4b78`], + response: `{ + "id": "86aefdd3cf7be8e5781f783fe5d80513e8b3f52f2f1ef61e8e056b7faffc4b78", + "height": 1471971, + "version": 570425344, + "timestamp": 1630625518, + "bits": null, + "merkle_root": "7e40735e103d6015c90d285d09b535498c0a26df9ca8118b1b4d68aaf80ccf48", + "tx_count": 2, + "size": 10841, + "weight": 16913, + "previousblockhash": "944fa8ffd906b3531af95f3d9b052dfdef0b60657c3c8def2c3591384f083424", + "mediantime": 1630625218, + "stale": false +}`, + }, + codeSampleLiquidTestnet: { + esModule: [`8f7cb70f32e2069724212c986f34462fc40180eabf189b44486faf6989824f9a`], + commonJS: [`8f7cb70f32e2069724212c986f34462fc40180eabf189b44486faf6989824f9a`], + curl: [`8f7cb70f32e2069724212c986f34462fc40180eabf189b44486faf6989824f9a`], + response: `{ + "id": "8f7cb70f32e2069724212c986f34462fc40180eabf189b44486faf6989824f9a", + "height": 154705, + "version": 536870912, + "timestamp": 1641154264, + "bits": null, + "merkle_root": "e7cc1145b3b074be73a84119485a504de77967aabe415240caca0e2c41a8b9b4", + "tx_count": 2, + "size": 5137, + "weight": 7012, + "previousblockhash": "2745fd72a5bd2b256c9d2044631032d2cd872f1f0001c3db52e26604a6423526", + "mediantime": 1641153964, + "stale": false }`, }, } diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.html b/frontend/src/app/docs/api-docs/api-docs-nav.component.html index 13b7cbe80..3dab114cf 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.html +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.html @@ -4,5 +4,5 @@

    {{ item.title }}

    - {{ item.title }} + {{ item.title }}
    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 dd19d0b4f..7ff37ba24 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 @@ -17,6 +17,7 @@ export class ApiDocsNavComponent implements OnInit { tabData: any[]; auditEnabled: boolean; officialMempoolInstance: boolean; + runningElectrs: boolean; constructor( private stateService: StateService @@ -25,6 +26,7 @@ export class ApiDocsNavComponent implements OnInit { ngOnInit(): void { this.env = this.stateService.env; this.officialMempoolInstance = this.env.OFFICIAL_MEMPOOL_SPACE; + this.runningElectrs = !!(this.stateService.backend == 'esplora'); this.auditEnabled = this.env.AUDIT; if (this.whichTab === 'rest') { this.tabData = restApiDocsData; diff --git a/frontend/src/app/docs/api-docs/api-docs.component.html b/frontend/src/app/docs/api-docs/api-docs.component.html index d359500a0..cace339b7 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.html +++ b/frontend/src/app/docs/api-docs/api-docs.component.html @@ -51,7 +51,7 @@

    Note that we enforce rate limits. If you exceed these limits, you will get an HTTP 429 error. If you repeatedly exceed the limits, you may be banned from accessing the service altogether. Consider an enterprise sponsorship if you need higher API limits.

    -
    +

    {{ item.title }}

    {{ item.title }} {{ item.category }} 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 75f71bbf5..f7a5addf3 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs.component.ts @@ -28,6 +28,7 @@ export class ApiDocsComponent implements OnInit, AfterViewInit { wsDocs: any; screenWidth: number; officialMempoolInstance: boolean; + runningElectrs: boolean; auditEnabled: boolean; mobileViewport: boolean = false; showMobileEnterpriseUpsell: boolean = true; @@ -70,6 +71,7 @@ export class ApiDocsComponent implements OnInit, AfterViewInit { ngOnInit(): void { this.env = this.stateService.env; this.officialMempoolInstance = this.env.OFFICIAL_MEMPOOL_SPACE; + this.runningElectrs = !!(this.stateService.backend == 'esplora'); this.auditEnabled = this.env.AUDIT; this.network$ = merge(of(''), this.stateService.networkChanged$).pipe( tap((network: string) => { From e5973b7b05aadaea2cb3bd28282c92e92e4cb896 Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Tue, 13 May 2025 19:31:31 -0400 Subject: [PATCH 243/534] Get correct backend property To detect electrum backends. --- .../src/app/docs/api-docs/api-docs-nav.component.ts | 12 +++++++++++- frontend/src/app/docs/api-docs/api-docs.component.ts | 4 +++- 2 files changed, 14 insertions(+), 2 deletions(-) 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 7ff37ba24..c3640dfe3 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,5 +1,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { Env, StateService } from '@app/services/state.service'; +import { Subject, Subscription } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; import { restApiDocsData, wsApiDocsData } from '@app/docs/api-docs/api-docs-data'; import { faqData } from '@app/docs/api-docs/api-docs-data'; @@ -13,6 +15,7 @@ export class ApiDocsNavComponent implements OnInit { @Input() network: any; @Input() whichTab: string; @Output() navLinkClickEvent: EventEmitter = new EventEmitter(); + private destroy$: Subject = new Subject(); env: Env; tabData: any[]; auditEnabled: boolean; @@ -26,7 +29,9 @@ export class ApiDocsNavComponent implements OnInit { ngOnInit(): void { this.env = this.stateService.env; this.officialMempoolInstance = this.env.OFFICIAL_MEMPOOL_SPACE; - this.runningElectrs = !!(this.stateService.backend == 'esplora'); + this.stateService.backend$.pipe(takeUntil(this.destroy$)).subscribe((backend) => { + this.runningElectrs = !!(backend == 'esplora'); + }); this.auditEnabled = this.env.AUDIT; if (this.whichTab === 'rest') { this.tabData = restApiDocsData; @@ -42,4 +47,9 @@ export class ApiDocsNavComponent implements OnInit { this.navLinkClickEvent.emit({event: event, fragment: fragment}); } + ngOnDestroy(): void { + this.destroy$.next(true); + this.destroy$.complete(); + } + } 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 f7a5addf3..7fed8c53b 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs.component.ts @@ -71,7 +71,9 @@ export class ApiDocsComponent implements OnInit, AfterViewInit { ngOnInit(): void { this.env = this.stateService.env; this.officialMempoolInstance = this.env.OFFICIAL_MEMPOOL_SPACE; - this.runningElectrs = !!(this.stateService.backend == 'esplora'); + this.stateService.backend$.pipe(takeUntil(this.destroy$)).subscribe((backend) => { + this.runningElectrs = !!(backend == 'esplora'); + }); this.auditEnabled = this.env.AUDIT; this.network$ = merge(of(''), this.stateService.networkChanged$).pipe( tap((network: string) => { From cc150b4575a8dbc376013a0bf80ab60704e05397 Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Wed, 14 May 2025 01:29:42 -0400 Subject: [PATCH 244/534] Add get-blocks-v1 doc --- .../src/app/docs/api-docs/api-docs-data.ts | 357 +++++++++++++----- 1 file changed, 264 insertions(+), 93 deletions(-) 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 876def718..f91850bbb 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -4931,13 +4931,163 @@ export const restApiDocsData = [ } }, { + options: { electrsOnly: true }, type: "endpoint", category: "blocks", httpRequestMethod: "GET", fragment: "get-blocks", title: "GET Blocks", description: { - default: "Returns details on the past 15 blocks with fee and mining details in an extras field. If :startHeight is specified, the past 15 blocks before (and including) :startHeight are returned." + default: "Returns details on the past 10 blocks. If :startHeight is specified, the 10 blocks before (and including) :startHeight are returned." + }, + urlString: "/blocks[/:startHeight]", + showConditions: bitcoinNetworks, + showJsExamples: showJsExamplesDefault, + codeExample: { + default: { + codeTemplate: { + curl: `/api/blocks/%{1}`, + commonJS: ` + const { %{0}: { blocks } } = mempoolJS(); + + const getBlocks = await blocks.getBlocks({ startHeight: %{1} }); + + document.getElementById("result").textContent = JSON.stringify(getBlocks, undefined, 2); + `, + esModule: ` + const { %{0}: { blocks } } = mempoolJS(); + + const getBlocks = await blocks.getBlocks({ startHeight: %{1} }); + console.log(getBlocks); + `, + }, + codeSampleMainnet: { + esModule: ['730000'], + commonJS: ['730000'], + curl: ['730000'], + response: `[ + { + "id": "0000000000000000000384f28cb3b9cf4377a39cfd6c29ae9466951de38c0529", + "height": 730000, + "version": 536870912, + "timestamp": 1648829449, + "tx_count": 1627, + "size": 1210916, + "weight": 3993515, + "merkle_root": "efa344bcd6c0607f93b709515dd6dc5496178112d680338ebea459e3de7b4fbc", + "previousblockhash": "00000000000000000008b6f6fb83f8d74512ef1e0af29e642dd20daddd7d318f", + "mediantime": 1648827418, + "nonce": 3580664066, + "bits": 386521239, + "difficulty": 28587155782195.1 + }, + { + "id": "00000000000000000008b6f6fb83f8d74512ef1e0af29e642dd20daddd7d318f", + "height": 729999, + "version": 793796608, + "timestamp": 1648828946, + "tx_count": 2574, + "size": 1481957, + "weight": 3993485, + "merkle_root": "d84f9cc1823bd069c505061b1f6faabd809d67ab5354e9f6234312dc4bdb1ecf", + "previousblockhash": "000000000000000000071e6c86c2175aa86817cae2a77acd95372b55c1103d89", + "mediantime": 1648827210, + "nonce": 3477019455, + "bits": 386521239, + "difficulty": 28587155782195.1 + }, + ... +]`, + }, + codeSampleTestnet: { + esModule: ['2091187'], + commonJS: ['2091187'], + curl: ['2091187'], + response: `[ + { + "id": "00000000000000533f63df886281a9fd74da163e84a21445153ff480e5f57970", + "height": 2091187, + "version": 545259520, + "timestamp": 1630641890, + "tx_count": 26, + "size": 8390, + "weight": 22985, + "merkle_root": "4d6df12a4af11bb928c7b2930e0a4d2c3e268c6dc6a07462943ad1c4b6b96468", + "previousblockhash": "0000000000000079103da7d296e1480295df795b7379e7dffd27743e214b0b32", + "mediantime": 1630639627, + "nonce": 309403673, + "bits": 436273151, + "difficulty": 16777216 + }, + { + "id": "0000000000000079103da7d296e1480295df795b7379e7dffd27743e214b0b32", + "height": 2091186, + "version": 541065216, + "timestamp": 1630641655, + "tx_count": 43, + "size": 11427, + "weight": 32472, + "merkle_root": "c70fa944f2863dc0828ee93ec0407bb8473e3b9bb94854ffd3fa1ccb9855d76a", + "previousblockhash": "00000000000000f015cb6ce3c007b56a053c4b3c3c86a36130e63310da787a30", + "mediantime": 1630639598, + "nonce": 2671302918, + "bits": 436273151, + "difficulty": 16777216 + }, + ... +]` + }, + codeSampleSignet: { + esModule: ['53783'], + commonJS: ['53783'], + curl: ['53783'], + response: `[ + { + "id": "0000010eeacb878340bae34af4e13551413d76a172ec302f7e50b62cb45374f2", + "height": 53783, + "version": 536870912, + "timestamp": 1630641504, + "tx_count": 1, + "size": 343, + "weight": 1264, + "merkle_root": "3063ff3802c920eea68bdc9303957f3e7bfd0a03c93547fd7dad14b77a07d4e8", + "previousblockhash": "00000109a7ea774fcc2d173f9a1da9595a47ff401dac67ca9edea149954210fa", + "mediantime": 1630638966, + "nonce": 11753379, + "bits": 503404179, + "difficulty": 0.00291903093250778 + }, + { + "id": "00000109a7ea774fcc2d173f9a1da9595a47ff401dac67ca9edea149954210fa", + "height": 53782, + "version": 536870912, + "timestamp": 1630640959, + "tx_count": 10, + "size": 1837, + "weight": 5545, + "merkle_root": "888cf13ad83ba4c9d44dee7984a1dafee6c78d329178c51bf0ffe61d98df40f3", + "previousblockhash": "000001508377eba43e83abb169ee1454daed14697267b9baf970b3fd556191e3", + "mediantime": 1630638721, + "nonce": 1074604, + "bits": 503404179, + "difficulty": 0.00291903093250778 + }, + ... +]` + }, + codeSampleLiquid: emptyCodeSample, + codeSampleLiquidTestnet: emptyCodeSample, + } + } + }, + { + type: "endpoint", + category: "blocks", + httpRequestMethod: "GET", + fragment: "get-blocks-v1", + title: "GET Blocks (v1)", + description: { + default: "Returns details on the past 15 blocks from Mempool's Node.js backend. Includes fee and mining details in an extras field. If :startHeight is specified, the past 15 blocks before (and including) :startHeight are returned." }, urlString: "/v1/blocks[/:startHeight]", showConditions: bitcoinNetworks, @@ -4967,74 +5117,57 @@ export const restApiDocsData = [ response: `[ { "id": "0000000000000000000384f28cb3b9cf4377a39cfd6c29ae9466951de38c0529", - "timestamp": 1648829449, "height": 730000, "version": 536870912, + "timestamp": 1648829449, "bits": 386521239, "nonce": 3580664066, - "difficulty": 28587155782195.14, + "difficulty": 28587155782195.1, "merkle_root": "efa344bcd6c0607f93b709515dd6dc5496178112d680338ebea459e3de7b4fbc", "tx_count": 1627, "size": 1210916, "weight": 3993515, "previousblockhash": "00000000000000000008b6f6fb83f8d74512ef1e0af29e642dd20daddd7d318f", + "mediantime": 1648827418, "extras": { - "coinbaseRaw": "0390230b1362696e616e63652f383038e0006f02cd583765fabe6d6d686355577affaad03015e732428a927a5d2d842471b350394139616bcb4401d804000000000000001a750000c9ad0000", - "medianFee": 11, - "feeRange": [ - 1, - 11, - 11, - 11, - 18, - 21, - 660 - ], - "reward": 641321983, "totalFees": 16321983, + "medianFee": 11, + "feeRange": [1, 11, 11, 11, 18, 21, 660], + "reward": 641321983, + "pool": { + "id": 105, + "name": "Binance Pool", + "slug": "binancepool", + "minerNames": null + }, "avgFee": 10038, "avgFeeRate": 16, - "pool": { - "id": 105, - "name": "Binance Pool", - "slug": "binancepool" - } - } - }, - { - "id": "00000000000000000008b6f6fb83f8d74512ef1e0af29e642dd20daddd7d318f", - "timestamp": 1648828946, - "height": 729999, - "version": 793796608, - "bits": 386521239, - "nonce": 3477019455, - "difficulty": 28587155782195.14, - "merkle_root": "d84f9cc1823bd069c505061b1f6faabd809d67ab5354e9f6234312dc4bdb1ecf", - "tx_count": 2574, - "size": 1481957, - "weight": 3993485, - "previousblockhash": "000000000000000000071e6c86c2175aa86817cae2a77acd95372b55c1103d89", - "extras": { - "coinbaseRaw": "038f230b1362696e616e63652f373739d8002900ca5de7a9fabe6d6dda31112c36c10a523154eae76847579755cd4ae558ee2e6f9f200b05dd32a0bf04000000000000006372000000020000", - "medianFee": 17, - "feeRange": [ - 2, - 11, - 14, - 17, - 19, - 28, - 502 + "coinbaseRaw": "0390230b1362696e616e63652f383038e0006f02cd583765fabe6d6d686355577affaad03015e732428a927a5d2d842471b350394139616bcb4401d804000000000000001a750000c9ad0000", + "coinbaseAddress": "1JvXhnHCi6XqcanvrZJ5s2Qiv4tsmm2UMy", + "coinbaseAddresses": [ + "1JvXhnHCi6XqcanvrZJ5s2Qiv4tsmm2UMy" ], - "reward": 649090210, - "totalFees": 24090210, - "avgFee": 9362, - "avgFeeRate": 24, - "pool": { - "id": 105, - "name": "Binance Pool", - "slug": "binancepool" - } + "coinbaseSignature": "OP_DUP OP_HASH160 OP_PUSHBYTES_20 c499d0604392cc2051d7476056647d1c1bfc3f38 OP_EQUALVERIFY OP_CHECKSIG", + "coinbaseSignatureAscii": "...", + "avgTxSize": 744, + "totalInputs": 6249, + "totalOutputs": 6768, + "totalOutputAmt": 1314305994870, + "medianFeeAmt": 3182, + "feePercentiles": [313, 2086, 2538, 3182, 5625, 14136, 990660], + "segwitTotalTxs": 1314, + "segwitTotalSize": 1031785, + "segwitTotalWeight": 3277099, + "header": "000000208f317dddad0dd22d649ef20a1eef1245d7f883fbf6b608000000000000000000bc4f7bdee359a4be8e3380d61281179654dcd65d5109b7937f60c0d6bc44a3ef0924476297d8091702996cd5", + "utxoSetChange": 519, + "utxoSetSize": 80390138, + "totalInputAmt": 1314322316853, + "virtualSize": 998378.75, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null } }, ... @@ -5045,11 +5178,11 @@ export const restApiDocsData = [ commonJS: ['2091187'], curl: ['2091187'], response: `[ - { + { "id": "00000000000000533f63df886281a9fd74da163e84a21445153ff480e5f57970", - "timestamp": 1630641890, "height": 2091187, "version": 545259520, + "timestamp": 1630641890, "bits": 436273151, "nonce": 309403673, "difficulty": 16777216, @@ -5058,27 +5191,46 @@ export const restApiDocsData = [ "size": 8390, "weight": 22985, "previousblockhash": "0000000000000079103da7d296e1480295df795b7379e7dffd27743e214b0b32", + "mediantime": 1630639627, "extras": { - "coinbaseRaw": "03b3e81f3a205468697320626c6f636b20776173206d696e65642077697468206120636172626f6e206e6567617469766520706f77657220736f75726365201209687a2009092009020de601d7986a040000", - "medianFee": 1, - "feeRange": [ - 1, - 1, - 1, - 1, - 5, - 56, - 5053 - ], - "reward": 10547567, "totalFees": 781942, + "medianFee": 1, + "feeRange": [1, 1, 1, 1, 5, 56, 5053], + "reward": 10547567, + "pool": { + "id": 0, + "name": "Unknown", + "slug": "unknown", + "minerNames": null + }, "avgFee": 31277, "avgFeeRate": 143, - "pool": { - "id": 137, - "name": "Unknown", - "slug": "unknown" - } + "coinbaseRaw": "03b3e81f3a205468697320626c6f636b20776173206d696e65642077697468206120636172626f6e206e6567617469766520706f77657220736f75726365201209687a2009092009020de601d7986a040000", + "coinbaseAddress": "2MtzNEqm2D9jcbPJ5mW7Z3AUNwqt3afZH66", + "coinbaseAddresses": [ + "2MtzNEqm2D9jcbPJ5mW7Z3AUNwqt3afZH66" + ], + "coinbaseSignature": "OP_HASH160 OP_PUSHBYTES_20 1320e6542e2146ea486700f4091aa793e7360788 OP_EQUAL", + "coinbaseSignatureAscii": "...", + "avgTxSize": 310.04, + "totalInputs": 33, + "totalOutputs": 64, + "totalOutputAmt": 30223143847, + "medianFeeAmt": null, + "feePercentiles": null, + "segwitTotalTxs": 24, + "segwitTotalSize": 7709, + "segwitTotalWeight": 20369, + "header": "00008020320b4b213e7427fddfe779735b79df950248e196d2a73d1079000000000000006864b9b6c4d13a946274a0c66d8c263e2c4d0a0e93b2c728b91bf14a2af16d4de29e3161ffff001a19207112", + "utxoSetChange": 31, + "utxoSetSize": 26145554, + "totalInputAmt": 30223925789, + "virtualSize": 5746.25, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null } }, ... @@ -5091,38 +5243,57 @@ export const restApiDocsData = [ response: `[ { "id": "0000010eeacb878340bae34af4e13551413d76a172ec302f7e50b62cb45374f2", - "timestamp": 1630641504, "height": 53783, "version": 536870912, + "timestamp": 1630641504, "bits": 503404179, "nonce": 11753379, - "difficulty": 0.002919030932507782, + "difficulty": 0.00291903093250778, "merkle_root": "3063ff3802c920eea68bdc9303957f3e7bfd0a03c93547fd7dad14b77a07d4e8", "tx_count": 1, "size": 343, "weight": 1264, "previousblockhash": "00000109a7ea774fcc2d173f9a1da9595a47ff401dac67ca9edea149954210fa", + "mediantime": 1630638966, "extras": { - "coinbaseRaw": "0317d200", - "medianFee": 0, - "feeRange": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - "reward": 5000000000, "totalFees": 0, + "medianFee": 0, + "feeRange": [0, 0, 0, 0, 0, 0, 0], + "reward": 5000000000, + "pool": { + "id": 0, + "name": "Unknown", + "slug": "unknown", + "minerNames": null + }, "avgFee": 0, "avgFeeRate": 0, - "pool": { - "id": 137, - "name": "Unknown", - "slug": "unknown" - } + "coinbaseRaw": "0317d200", + "coinbaseAddress": "tb1p95clr67qe8s3l27nd2cry22fdhmque3fgze08urhc099pml0rwmqddz08l", + "coinbaseAddresses": [ + "tb1p95clr67qe8s3l27nd2cry22fdhmque3fgze08urhc099pml0rwmqddz08l" + ], + "coinbaseSignature": "OP_PUSHNUM_1 OP_PUSHBYTES_32 2d31f1ebc0c9e11fabd36ab03229496df60e662940b2f3f077c3ca50efef1bb6", + "coinbaseSignatureAscii": "...", + "avgTxSize": 0, + "totalInputs": 0, + "totalOutputs": 2, + "totalOutputAmt": 0, + "medianFeeAmt": null, + "feePercentiles": null, + "segwitTotalTxs": 0, + "segwitTotalSize": 0, + "segwitTotalWeight": 0, + "header": "00000020fa10429549a1de9eca67ac1d40ff475a59a91d9a3f172dcc4f77eaa709010000e8d4077ab714ad7dfd4735c9030afd7b3e7f950393dc8ba6ee20c90238ff6330609d31619356011ea357b300", + "utxoSetChange": 2, + "utxoSetSize": 303088, + "totalInputAmt": 0, + "virtualSize": 316, + "firstSeen": null, + "orphans": [], + "matchRate": null, + "expectedFees": null, + "expectedWeight": null } }, ... From 7fd006d113f9a102502044919d9d810858caf3ff Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Wed, 14 May 2025 01:51:04 -0400 Subject: [PATCH 245/534] Add get-blocks-v1 doc for liquid --- .../src/app/docs/api-docs/api-docs-data.ts | 163 +++++++++++++++--- 1 file changed, 143 insertions(+), 20 deletions(-) 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 f91850bbb..06756063f 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -5555,16 +5555,28 @@ export const restApiDocsData = [ curl: ['1472246'], response: `[ { - id: "0bd348c08101fef863b7263b2b44b2f6575f707f1e397da95cfe2afdd5e9ccdb", - height: 1472246, - version: 570425344, - timestamp: 1630642018, - tx_count: 2, - size: 10838, - weight: 16901, - merkle_root: "a8cdc1ba96d1f862ca7c9aec4133a6efd14138f54c17efdbc968632a6b9cb8c8", - previousblockhash: "a06c327cdd76301de57ba0cf86c5ae8b1fd8a785945065ac9e2128322bd01f31", - mediantime: 1630641718 + "id": "0bd348c08101fef863b7263b2b44b2f6575f707f1e397da95cfe2afdd5e9ccdb", + "height": 1472246, + "version": 570425344, + "timestamp": 1630642018, + "tx_count": 2, + "size": 10838, + "weight": 16901, + "merkle_root": "a8cdc1ba96d1f862ca7c9aec4133a6efd14138f54c17efdbc968632a6b9cb8c8", + "previousblockhash": "a06c327cdd76301de57ba0cf86c5ae8b1fd8a785945065ac9e2128322bd01f31", + "mediantime": 1630641718 + }, + { + "id": "a06c327cdd76301de57ba0cf86c5ae8b1fd8a785945065ac9e2128322bd01f31", + "height": 1472245, + "version": 570425344, + "timestamp": 1630641958, + "tx_count": 2, + "size": 10838, + "weight": 16901, + "merkle_root": "d3c370aabe96147b59f2e40511b0d8b7ee56eeb08d45816af6c4cae710643ce7", + "previousblockhash": "2ec34bb6f0730aa19d7c72346d6e3382620509de048a3b03658af7db19355240", + "mediantime": 1630641658 }, ... ]` @@ -5575,16 +5587,127 @@ export const restApiDocsData = [ curl: ['150000'], response: `[ { - id: "67d5eb1aee63c6c2058a088985503ff0626fd3f7f8022bdc74fab36a359164db", - height: 150000, - version: 536870912, - timestamp: 1640871913, - tx_count: 2, - size: 3527, - weight: 7430, - merkle_root: "40538ff1fcac07c65e36fcc230fc60f58e3a885ce9898e41bc27bcf28227e5ff", - previousblockhash: "2d8c28042b03219e7e9bc6853cc3ae536e36be5639869c545a0f3dbd1309e2a5", - mediantime: 1640871614 + "id": "67d5eb1aee63c6c2058a088985503ff0626fd3f7f8022bdc74fab36a359164db", + "height": 150000, + "version": 536870912, + "timestamp": 1640871913, + "tx_count": 2, + "size": 3527, + "weight": 7430, + "merkle_root": "40538ff1fcac07c65e36fcc230fc60f58e3a885ce9898e41bc27bcf28227e5ff", + "previousblockhash": "2d8c28042b03219e7e9bc6853cc3ae536e36be5639869c545a0f3dbd1309e2a5", + "mediantime": 1640871614 + }, + { + "id": "2d8c28042b03219e7e9bc6853cc3ae536e36be5639869c545a0f3dbd1309e2a5", + "height": 149999, + "version": 536870912, + "timestamp": 1640871853, + "tx_count": 3, + "size": 4380, + "weight": 8097, + "merkle_root": "38495212acd5e3ad4fdce7cce29c8c892b20c3ffacbcd73ecb2b234c6aca67c2", + "previousblockhash": "7bd9ed9ff823d4605a476a12554c75087ab7f55fa6273a1b4b1115b09bb9586e", + "mediantime": 1640871554 + }, + ... +]` + }, + } + } + }, + { + type: "endpoint", + category: "blocks", + httpRequestMethod: "GET", + fragment: "get-blocks-v1", + title: "GET Blocks (v1)", + description: { + default: "Returns details on the past 15 blocks from Mempool's Node.js backend. If :startHeight is specified, the past 15 blocks before (and including) :startHeight are returned." + }, + urlString: "/v1/blocks[/:startHeight]", + showConditions: liquidNetworks, + showJsExamples: showJsExamplesDefault, + codeExample: { + default: { + codeTemplate: { + curl: `/api/v1/blocks/%{1}`, + commonJS: ` + const { %{0}: { blocks } } = mempoolJS(); + + const getBlocks = await blocks.getBlocks({ startHeight: %{1} }); + + document.getElementById("result").textContent = JSON.stringify(getBlocks, undefined, 2); + `, + esModule: ` + const { %{0}: { blocks } } = mempoolJS(); + + const getBlocks = await blocks.getBlocks({ startHeight: %{1} }); + console.log(getBlocks); + `, + }, + codeSampleMainnet: emptyCodeSample, + codeSampleTestnet: emptyCodeSample, + codeSampleSignet: emptyCodeSample, + codeSampleLiquid: { + esModule: ['1472246'], + commonJS: ['1472246'], + curl: ['1472246'], + response: `[ + { + "id": "0bd348c08101fef863b7263b2b44b2f6575f707f1e397da95cfe2afdd5e9ccdb", + "height": 1472246, + "version": 570425344, + "timestamp": 1630642018, + "tx_count": 2, + "size": 10838, + "weight": 16901, + "merkle_root": "a8cdc1ba96d1f862ca7c9aec4133a6efd14138f54c17efdbc968632a6b9cb8c8", + "previousblockhash": "a06c327cdd76301de57ba0cf86c5ae8b1fd8a785945065ac9e2128322bd01f31", + "mediantime": 1630641718, + "ext": { + "challenge": "5b21026a2a106ec32c8a1e8052e5d02a7b0a150423dbd9b116fc48d46630ff6e6a05b92102791646a8b49c2740352b4495c118d876347bf47d0551c01c4332fdc2df526f1a2102888bda53a424466b0451627df22090143bbf7c060e9eacb1e38426f6b07f2ae12102aee8967150dee220f613de3b239320355a498808084a93eaf39a34dcd62024852102d46e9259d0a0bb2bcbc461a3e68f34adca27b8d08fbe985853992b4b104e27412102e9944e35e5750ab621e098145b8e6cf373c273b7c04747d1aa020be0af40ccd62102f9a9d4b10a6d6c56d8c955c547330c589bb45e774551d46d415e51cd9ad5116321033b421566c124dfde4db9defe4084b7aa4e7f36744758d92806b8f72c2e943309210353dcc6b4cf6ad28aceb7f7b2db92a4bf07ac42d357adf756f3eca790664314b621037f55980af0455e4fb55aad9b85a55068bb6dc4740ea87276dc693f4598db45fa210384001daa88dabd23db878dbb1ce5b4c2a5fa72c3113e3514bf602325d0c37b8e21039056d089f2fe72dbc0a14780b4635b0dc8a1b40b7a59106325dd1bc45cc70493210397ab8ea7b0bf85bc7fc56bb27bf85e75502e94e76a6781c409f3f2ec3d1122192103b00e3b5b77884bf3cae204c4b4eac003601da75f96982ffcb3dcb29c5ee419b92103c1f3c0874cfe34b8131af34699589aacec4093399739ae352e8a46f80a6f68375fae", + "solution": "0046304402206263bb35516e8ad806f3626d228dec7929e89202522b219257e7e5eedb64e8ff022036c5bfd2b16e43c5162d35fbc64041630e98f4574775ce3ebe8fc135c84234a646304402200450dabc776fe95cdecef09171141f56c26a0f4a9c5f9256f1d8e67aedb956a40220048d27e08acf5f002d823b2359a58b7b7df57b2121b5c64460dbc0f7807b31f6473045022100b763029e99a6debe765f640128eeaeb7bf721f5fd0a90d72457dffe6b6d97db5022015d492f8bbec838d7b90f5fbe4a0041766ca797e1b61069eef213dd064ede42146304402200a6342eeee2be815c3bf68321692b8f0cbe605cd0d626784f61def9e733164d202200f67b624626e25077db19b098543681e064f45f9eb8ae6888eb78de5af1bb621473045022100c1101245ccf45308d6cf92af9a43c34073aa9be59c6f78c86df8ef7f3a5c5fe0022056098b793ca730cc8e623bd7f9cbd2ba548cb10ba6976e56fcee5ab37e59ad9046304402205d74c5fd7037fe653045d57622bd69b10da7a5de9526996e065b6a6a7c5814f802207a0f6169c85e89a0cb18f908440ec67a63367327e0e3ea45adfa7a3e81f6bb1c473045022100808f8cd8a45b734c6c49afcbdfba8abac16ba4884f201b21a2e146f5ba1b90570220267a207cf36c98c844a353dfd4760053bc132c1271eb52a95219b5075e006c5d473045022100a90a1a40f8dce2085503adc845902db7400dfcfc201cd12cdde8c29694ddd8c40220505f562d7325abbebd263823fd96380fbe000aac3f821de4842a880477cf8e22473045022100b330af409638f2480b3cb931449a513014b9345875ec6e6407187a2beddb522a022069f3b65961c8e920f7ae07be0eb249ef9e7d0a173c7ab3eb236d0e52863f8dfd463044022012149a50dff010d49d1aaa9d25c187dc8c42a713fde49e4e705de9210acd6f1102202a7e63ac3ea01e4a36f0c15044ee2e8b6614c568a442d89cdb0d65c33795ab7d46304402200e7fe3f26c3579b376401f2f650482bd435e0c3cea436041c5a7b8add31543190220368a35ef33d44a6d3dbd97c68cd19042f041c9204e858c42a20014827f0762a7" + } + }, + ... +]` + }, + codeSampleLiquidTestnet: { + esModule: ['150000'], + commonJS: ['150000'], + curl: ['150000'], + response: `[ + { + "id": "67d5eb1aee63c6c2058a088985503ff0626fd3f7f8022bdc74fab36a359164db", + "height": 150000, + "version": 536870912, + "timestamp": 1640871913, + "tx_count": 2, + "size": 3527, + "weight": 7430, + "merkle_root": "40538ff1fcac07c65e36fcc230fc60f58e3a885ce9898e41bc27bcf28227e5ff", + "previousblockhash": "2d8c28042b03219e7e9bc6853cc3ae536e36be5639869c545a0f3dbd1309e2a5", + "mediantime": 1640871614, + "ext": { + "current": { + "extension_space": [ + "02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f02fcba7ecf41bc7e1be4ee122d9d22e3333671eb0a3a87b5cdf099d59874e1940f" + ], + "fedpeg_program": "a91472c44f957fc011d97e3406667dca5b1c930c402687", + "fedpegscript": "51", + "signblock_witness_limit": 150, + "signblockscript": "0020e9e4117540f7f23b3edd7c2cad660a17fb33c7959b8c37cf61d92b189133929a" + }, + "proposed": { + + }, + "signblock_witness": [ + [], + [48, 68, 2, 32, 19, 152, 101, 5, 73, 58, 8, 11, 11, 62, 1, 201, 143, 107, 66, 185, 6, 95, 214, 77, 245, 159, 76, 23, 142, 153, 237, 165, 123, 120, 81, 38, 2, 32, 69, 126, 115, 140, 254, 188, 41, 52, 195, 99, 228, 176, 248, 113, 234, 84, 23, 134, 83, 245, 153, 218, 242, 16, 184, 101, 163, 30, 221, 28, 216, 195, 1], + [81, 33, 2, 23, 228, 3, 221, 177, 129, 135, 44, 50, 160, 205, 70, 140, 113, 0, 64, 178, 245, 61, 140, 172, 105, 241, 141, 173, 7, 152, 94, 227, 126, 154, 113, 81, 174] + ] + } }, ... ]` From 5a53368e15f6574d70bc6a5dfd8d24882ee142d3 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 17 May 2025 19:37:38 +0200 Subject: [PATCH 246/534] fix copy, add missing error string --- .../accelerate-checkout/accelerate-checkout.component.html | 2 +- .../shared/components/mempool-error/mempool-error.component.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) 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 652d991f2..c9a0f54cf 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -591,7 +591,7 @@
    @if (accelerationResponse?.receiptUrl) { }
    diff --git a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts index 7eb9bb5eb..8feedb996 100644 --- a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts +++ b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts @@ -33,6 +33,8 @@ export const MempoolErrors = { 'faucet_above_maximum': `Requested amount is too high`, 'payment_method_not_allowed': `You are not allowed to use this payment method`, 'payment_method_not_allowed_out_of_bound': `You are not allowed to use this payment method with this amount`, + 'invalid_credentials': `Invalid credentials`, + 'forbidden': `You are not allowed to do this.`, } as { [error: string]: string }; export function isMempoolError(error: string) { From f35855b205166f58df5f7c26839eb6d5fd31dfae Mon Sep 17 00:00:00 2001 From: orangesurf Date: Sun, 18 May 2025 10:45:58 -0500 Subject: [PATCH 247/534] Update social sharing image --- frontend/src/resources/meta/meta-preview.png | Bin 2493740 -> 122405 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/src/resources/meta/meta-preview.png b/frontend/src/resources/meta/meta-preview.png index d569aae0ec93d9b068c49fa007693c33fcba59ad..2cb11e5d147b88d9e041b8d7fe254173b151131e 100644 GIT binary patch literal 122405 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 DG1y&` literal 2493740 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�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

    ic~@g7eY8NJ~9$z6DdA%+I9X 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¥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

    q*rLXo~6lvD% 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 z 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%0A98cd0f06{ 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 *`I7Sq6kq^1(!|lhNWRZnFspcpZI+E40%kO#E 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

    jL%}7kOXH;~7(y78L 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

    v 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

    # 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

    - + + {{witness.slice(0, -2)}}OP_{{instruction.instruction}} @for (arg of instruction.args; track arg) { - + Date: Wed, 21 May 2025 14:05:09 +0200 Subject: [PATCH 254/534] Fix colspan value --- .../transactions-list/transactions-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 cb756209f..4b00f984d 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -379,7 +379,7 @@

    + From 30c50a1d50f06fbf9bb430eef880df5e6033a6ba Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 22 May 2025 17:21:44 +0200 Subject: [PATCH 255/534] Crop large OP_RETURN data in tx details section --- .../transactions-list.component.html | 51 +++++++++++++++++-- .../transactions-list.component.ts | 15 ++++++ .../shared/components/asm/asm.component.ts | 3 +- 3 files changed, 64 insertions(+), 5 deletions(-) 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 70f19f357..fa6d3cf12 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -327,7 +327,7 @@ @if (vout.isRunestone) { } @else { - {{ vout.scriptpubkey_asm | hex2ascii }} + {{ vout.scriptpubkey_asm | slice:0:200 | hex2ascii }} } {{ vout.scriptpubkey_type | scriptpubkeyType }} @@ -384,15 +384,58 @@ - + - + - + diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 480f45372..b7d6eb5aa 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -62,6 +62,9 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { outputRowLimit: number = 12; showFullScript: { [vinIndex: number]: boolean } = {}; showFullWitness: { [vinIndex: number]: { [witnessIndex: number]: boolean } } = {}; + showFullScriptPubkeyAsm: { [voutIndex: number]: boolean } = {}; + showFullScriptPubkeyHex: { [voutIndex: number]: boolean } = {}; + showFullOpReturnData: { [voutIndex: number]: boolean } = {}; showOrdData: { [key: string]: { show: boolean; inscriptions?: Inscription[]; runestone?: Runestone, runeInfo?: { [id: string]: { etching: Etching; txid: string; } }; } } = {}; similarityMatches: Map> = new Map(); @@ -516,6 +519,18 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { this.showFullWitness[vinIndex][witnessIndex] = !this.showFullWitness[vinIndex][witnessIndex]; } + toggleShowFullScriptPubkeyAsm(voutIndex: number): void { + this.showFullScriptPubkeyAsm[voutIndex] = !this.showFullScriptPubkeyAsm[voutIndex]; + } + + toggleShowFullScriptPubkeyHex(voutIndex: number): void { + this.showFullScriptPubkeyHex[voutIndex] = !this.showFullScriptPubkeyHex[voutIndex]; + } + + toggleShowFullOpReturnData(voutIndex: number): void { + this.showFullOpReturnData[voutIndex] = !this.showFullOpReturnData[voutIndex]; + } + toggleOrdData(txid: string, type: 'vin' | 'vout', index: number) { const tx = this.transactions.find((tx) => tx.txid === txid); if (!tx) { diff --git a/frontend/src/app/shared/components/asm/asm.component.ts b/frontend/src/app/shared/components/asm/asm.component.ts index 66ae5df4b..d05ced79e 100644 --- a/frontend/src/app/shared/components/asm/asm.component.ts +++ b/frontend/src/app/shared/components/asm/asm.component.ts @@ -28,7 +28,7 @@ export class AsmComponent { } ngOnChanges(changes: SimpleChanges): void { - if (changes['asm']) { + if (changes['asm'] || changes['crop']) { this.parseASM(); } } @@ -82,6 +82,7 @@ export class AsmComponent { ['ELSE', 'control'], ['ENDIF', 'control'], ['VERIFY', 'control'], + ['RETURN', 'control'], ...Array.from({length: 70}, (_, i) => [`RETURN_${i + 186}`, 'control']), // Stack From 59a1c625be20752dd48bb9b812fffe99a76d4b9e Mon Sep 17 00:00:00 2001 From: natsoni Date: Fri, 30 May 2025 13:03:58 +0200 Subject: [PATCH 256/534] Fix missing y axis on difficulty chart --- .../components/hashrate-chart/hashrate-chart.component.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 b687415aa..f8dc73b88 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -364,8 +364,11 @@ export class HashrateChartComponent implements OnInit { { type: 'value', position: 'right', - min: (_) => { + min: (value) => { const firstYAxisMin = this.chartInstance.getModel().getComponent('yAxis', 0).axis.scale.getExtent()[0]; + if (firstYAxisMin === Infinity) { + return value.min; + } const selectedPowerOfTen: any = selectPowerOfTen(firstYAxisMin); const newMin = Math.floor(firstYAxisMin / selectedPowerOfTen.divider / 10) return 600 / 2 ** 32 * newMin * selectedPowerOfTen.divider * 10; From 77fdb67ea8852715e737ef0a0333284f3fe6342d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 2 Jun 2025 21:28:55 +0000 Subject: [PATCH 257/534] reduce enterprise unfurler cluster sizes --- production/unfurler-config.bitb.json | 2 +- production/unfurler-config.meta.json | 2 +- production/unfurler-config.onbtc.json | 2 +- production/unfurler-config.river.json | 2 +- production/unfurler-config.strategy.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/production/unfurler-config.bitb.json b/production/unfurler-config.bitb.json index 8a4f14448..c7cfc280c 100644 --- a/production/unfurler-config.bitb.json +++ b/production/unfurler-config.bitb.json @@ -9,7 +9,7 @@ "NETWORK": "bitb" }, "PUPPETEER": { - "CLUSTER_SIZE": 8, + "CLUSTER_SIZE": 4, "EXEC_PATH": "/usr/local/bin/chrome", "MAX_PAGE_AGE": 86400, "RENDER_TIMEOUT": 3000 diff --git a/production/unfurler-config.meta.json b/production/unfurler-config.meta.json index 0fe1f1780..0aaa5d9c5 100644 --- a/production/unfurler-config.meta.json +++ b/production/unfurler-config.meta.json @@ -9,7 +9,7 @@ "NETWORK": "meta" }, "PUPPETEER": { - "CLUSTER_SIZE": 8, + "CLUSTER_SIZE": 2, "EXEC_PATH": "/usr/local/bin/chrome", "MAX_PAGE_AGE": 86400, "RENDER_TIMEOUT": 3000 diff --git a/production/unfurler-config.onbtc.json b/production/unfurler-config.onbtc.json index c0b6e3dfa..3520c9bb0 100644 --- a/production/unfurler-config.onbtc.json +++ b/production/unfurler-config.onbtc.json @@ -9,7 +9,7 @@ "NETWORK": "onbtc" }, "PUPPETEER": { - "CLUSTER_SIZE": 8, + "CLUSTER_SIZE": 2, "EXEC_PATH": "/usr/local/bin/chrome", "MAX_PAGE_AGE": 86400, "RENDER_TIMEOUT": 3000 diff --git a/production/unfurler-config.river.json b/production/unfurler-config.river.json index 219464437..71af2f383 100644 --- a/production/unfurler-config.river.json +++ b/production/unfurler-config.river.json @@ -9,7 +9,7 @@ "NETWORK": "river" }, "PUPPETEER": { - "CLUSTER_SIZE": 8, + "CLUSTER_SIZE": 2, "EXEC_PATH": "/usr/local/bin/chrome", "MAX_PAGE_AGE": 86400, "RENDER_TIMEOUT": 3000 diff --git a/production/unfurler-config.strategy.json b/production/unfurler-config.strategy.json index e2c7dbd89..fdda1476a 100644 --- a/production/unfurler-config.strategy.json +++ b/production/unfurler-config.strategy.json @@ -9,7 +9,7 @@ "NETWORK": "strategy" }, "PUPPETEER": { - "CLUSTER_SIZE": 8, + "CLUSTER_SIZE": 2, "EXEC_PATH": "/usr/local/bin/chrome", "MAX_PAGE_AGE": 86400, "RENDER_TIMEOUT": 3000 From e1d4c0479ab608142486d327b0f0e945cf5c3717 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 3 Jun 2025 11:44:38 +0200 Subject: [PATCH 258/534] Show decimal in block fee range --- frontend/src/app/components/block/block.component.html | 2 +- .../blockchain-blocks/blockchain-blocks.component.html | 4 ++-- .../app/components/mempool-block/mempool-block.component.html | 4 ++-- .../components/mempool-blocks/mempool-blocks.component.html | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 105cdf31a..7591d02a9 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -130,7 +130,7 @@ - + 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 a782e9588..a784ae24e 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -32,9 +32,9 @@
    - + - - +
    diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.html b/frontend/src/app/components/mempool-block/mempool-block.component.html index d2aa1aed2..cf5e641e5 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.html +++ b/frontend/src/app/components/mempool-block/mempool-block.component.html @@ -19,9 +19,9 @@
    diff --git a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.html b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.html index b979e032b..1c1b4096d 100644 --- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.html +++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.html @@ -16,9 +16,9 @@ ~
    - + - - +
    From a7156b24b2579c4e37673cc923153b96331836e2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 12 Jun 2025 00:34:12 +0000 Subject: [PATCH 259/534] more dashboards --- frontend/custom-xxi-config.json | 48 ++++++++++++++++++ frontend/src/index.mempool.xxi.html | 45 ++++++++++++++++ .../xxi/favicons/android-chrome-192x192.png | Bin 0 -> 3841 bytes .../xxi/favicons/android-chrome-512x512.png | Bin 0 -> 21343 bytes .../xxi/favicons/apple-touch-icon.png | Bin 0 -> 3685 bytes .../resources/xxi/favicons/favicon-16x16.png | Bin 0 -> 222 bytes .../resources/xxi/favicons/favicon-32x32.png | Bin 0 -> 382 bytes .../src/resources/xxi/favicons/favicon.ico | Bin 0 -> 15406 bytes .../resources/xxi/favicons/site.webmanifest | 1 + frontend/src/resources/xxi/xxi-preview.jpg | Bin 0 -> 74726 bytes frontend/src/resources/xxi/xxilogo.png | Bin 0 -> 16490 bytes production/mempool-build-all | 2 +- production/mempool-frontend-config.xxi.json | 19 +++++++ production/mempool-start-all | 2 +- production/unfurler-config.xxi.json | 17 +++++++ unfurler/src/routes.ts | 22 ++++++++ 16 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 frontend/custom-xxi-config.json create mode 100644 frontend/src/index.mempool.xxi.html create mode 100644 frontend/src/resources/xxi/favicons/android-chrome-192x192.png create mode 100644 frontend/src/resources/xxi/favicons/android-chrome-512x512.png create mode 100644 frontend/src/resources/xxi/favicons/apple-touch-icon.png create mode 100644 frontend/src/resources/xxi/favicons/favicon-16x16.png create mode 100644 frontend/src/resources/xxi/favicons/favicon-32x32.png create mode 100644 frontend/src/resources/xxi/favicons/favicon.ico create mode 100644 frontend/src/resources/xxi/favicons/site.webmanifest create mode 100644 frontend/src/resources/xxi/xxi-preview.jpg create mode 100644 frontend/src/resources/xxi/xxilogo.png create mode 100644 production/mempool-frontend-config.xxi.json create mode 100644 production/unfurler-config.xxi.json diff --git a/frontend/custom-xxi-config.json b/frontend/custom-xxi-config.json new file mode 100644 index 000000000..6d3135aa0 --- /dev/null +++ b/frontend/custom-xxi-config.json @@ -0,0 +1,48 @@ +{ + "theme": "wiz", + "enterprise": "xxi", + "branding": { + "name": "xxi", + "title": "Twenty One", + "site_id": 23, + "header_img": "/resources/xxi/xxilogo.png", + "footer_img": "/resources/xxi/xxilogo.png" + }, + "dashboard": { + "widgets": [ + { + "component": "fees", + "mobileOrder": 4 + }, + { + "component": "walletBalance", + "mobileOrder": 1, + "props": { + "wallet": "xxi" + } + }, + { + "component": "goggles", + "mobileOrder": 5 + }, + { + "component": "wallet", + "mobileOrder": 2, + "props": { + "wallet": "xxi", + "period": "all" + } + }, + { + "component": "blocks" + }, + { + "component": "walletTransactions", + "mobileOrder": 3, + "props": { + "wallet": "xxi" + } + } + ] + } +} \ No newline at end of file diff --git a/frontend/src/index.mempool.xxi.html b/frontend/src/index.mempool.xxi.html new file mode 100644 index 000000000..7163e7804 --- /dev/null +++ b/frontend/src/index.mempool.xxi.html @@ -0,0 +1,45 @@ + + + + + + Twenty One + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/resources/xxi/favicons/android-chrome-192x192.png b/frontend/src/resources/xxi/favicons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c435b91dabcdda4cfefc81a539189ad58e2aef68 GIT binary patch literal 3841 zcmeHK`9Bl>AK!)<4U@#=SV-lFsO1Qo9Ld?W<-X=tnNzzFzO=`}xE3`M}!JM1Ws{9{>Odm|ix##;LS_ z7X-}NuTA*zatbi$nu!6RqDOK801#|4HALSCb^MjbN)t7K#UD$L?SQ8T^<8Ki}W0?KFYrZW9vK;T_DV3Ax?`wlB^RC~V92^`kDkvzBTaW|C zsP~zGArfJ&J{A_U?*P+*8uWb{*DVRRqo{)>;QtLnsaupA&95xm3W2qu9IG!R^If-SU8zyRw1 z;Qu9BRL;`ql};i~Qc_Y{porZ~)0Vw;vx8l@OcU}ia&}kuy~%1Md;O(1wJ|coF7(&< zn-#0s`XXx6u2$2u6-6&%kbC>~_EbyM-&a#nzrcXirh6*`rP#{#7Vg`tj8^Ztb~1Z< zDu=jucaqbl=#Brh$2DF-$*fBK;2(XCPAx^UuV?0)A!?x}55>t~0f{H^W6y->e^;58 zb~k$U2c4q!GdSRsN}c49_!;-2mX!f6I=EuaM6K0u(<#umg zu{T((KmKh+NG=43mJPAY)g&)Zw@?JsLVkX$^BF2RcW-$@Ir%xx5OShc7L;@`Xx{v7 z#2>su*g&DF_wS!W-mNh_Hhz~9pv4x@O!nFDL#5ck;_F2N9PDc?k^2KrPG2ARnxRz7 zcNxT3u3)EP$E?fdVXBp^jU>Uj@Ep91?!mNN-#h)MDueC1Bc0+40F>h)M? zrb|cJ(=!fNI81jramMeUn|N^;x9}Y<>u_c4LaNewS-q6ng~m#^FKORZp(q|kGcA>m zs@i4xYGbA$Ik{0ycV7GcrWaDLgZOFv&q_;C$l|cO<4MchtSEn-EE*KmB`B#$+FBY- zciWopel{WT81lw%^f7*AD$kAnjDPfIuCE559P*OA%KW&%XpLn%aVMj^A|Nm@s<2K8 z#>f^y$+s%ZX160A*KnRWDCq}k31_e8UPXiqm)Te-6{q6d!XKuoZLdsIQmtMY&pF#u z16+^***skW9vRL1raOcdy1)BdIWmBvOF$k=bIjp)re5%$%2iTsdkQ>Az4i-?0%%He zk&69l62xJ8U=$28Ymxz28=N5-opEZ;RXSu)FoaOD)i+f&muci^sV<1sQ|HzHkG;#! z9cREp%lQivb*IEB1i*!DkBodBs*HZ*UinP4)I_+@L{cs?#@8)8VDS2&Qzt-0jaZKo zJ7a&DBedS^RnBK?*s(8j_EcX1blSv-w~RN$k=On(xY8 z!#O=R(eZywyx3ee!2*S0Un%QW~1r>Pr-*pQTyU=aBPM6Hdnyq(PnM63(M zR$ea&(3;LZ3(Ib?Jy6+@1ANt=VR?2uGzZy{c}l5`PKucp!`)O2U;A)prb?#*4O*v; z!>eIf+DR05r^6sofu2`Zl;;}yBi<+3{)&#J0a29(apwVX!N{=N%HO%WFo`fA(7o}< zanhQ&e_OFfq;!7O*VxdkTe9+*T&0~Qo4mA7~n&_CbZ9UQmyJ?yeZvwJJK;M7jk(Znazxa z_TGBTt>l1=s!FCSe!O>HAL0OfC{Bp8I+}msj(uC1rN_ebZJQ?%dUe9c2ZoZH&6(`m zr!$}2vTi_M$nB%fMFBPSnj$ly{`uNPRH&*hV_r^zg4VJJEa*k&#R=!RwRa z1B*bmbm^rbp>*6XP6W6(iHkJs>&b4ZZG?%!S_i?d#EO9Q(c2H`4O-T~1J!IN(fpJg zZ=uc+rC8vIhT#ckRe|i9-Q$O9QUU!N!S}wTNrnAt${-vN1_g;i6XHbOOJ#x8@iCa! z{X1RpwD&F_6Y6e{H(Xq(m#X-ixKzo%D)q7*ppL3;LPtH38UhvbDBjlz#)A9gcPNu( zIox7#leP}wL#caTGdr4+iH`ba7QFJ8-f*n0c6=bV>g2REVC)VC^KKJS zM!WDq+wNc%O=>XkQZh`!%9es(6Eq}++Da{bk)j)I*F zXywq^CHwC#(%YR0dgDW*<6^Fw_|J~qK2II0nfTa-nT*Q>9e$Bjk0T#yu(FFK+*4Rt zZ$fBLic0sAr|Yrc--ybo=EEJBK%_uJ=hX*HXkYTv89wA_`W7#`|5{Z9@nFnR(|;>G zUq|(`T;#H_T-9VW!Ea({bjWNCPeaX`t#!$T>c?E6As62E82h=S?@|9Xk3E!^!-Fo7sYu)PjCu7;Ac(tP|{HsRp3q2h{lZ3)=@B5jG zD5W%GoY-ky&CYytMQ_zx!mc$o*rR@1{YgXDkxRjv0oV7JybLiPUf3M^g#lDzW1~cevn7N~~>b;E(OFGuEu? zAJgNztuoPlGVMEwc>z&~f*fICkGv?^VyQG9I_2`NKgO6hJf1CL+WevLs%yS9*e8$c z8<%N|5p;*+^7rh$anT$r&jY?m+T+y7igPt6PACAyDqfBR;{f_t2^$0_0Ysxk<@LGL zi4>(&WfBmcPs`_jOaa1ay&1+w+lf$XXKS90ULusix*~T7hXS8cdmS_9i2|<%y(IIf zBe;%;-$1W(qQOq%Ks$)jmLFPzVE@1U|1kLse}31k>UWk3bDT^IFg3C?tT1qn`47Xa B&q@FQ literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/android-chrome-512x512.png b/frontend/src/resources/xxi/favicons/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..8421218be700fbf53ef9333b8da77edea6c5f596 GIT binary patch literal 21343 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/apple-touch-icon.png b/frontend/src/resources/xxi/favicons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7b4c8a622c31de4386cf049b5bc5e9c4dfc25044 GIT binary patch literal 3685 zcmeH~={Flp8^#lqylQQVruKbT)KUo*grcNksWr5AYAvNLC3Gc(v_%tZBdDje_8>(o zwePzGwXd~R@l+SyJpaP`?LFtY&&=Fs=EGbw*UX&rniS+oB#lT+rk`S%gi%0Dwo_0%2r-*L^F;C(XV`@Co)Il^HP@fMl#3-?8|A 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 aCqM$#q1}XbTbKE71X!3N5$}v|B>ort#=t26 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/favicon-16x16.png b/frontend/src/resources/xxi/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..63d8ccf1a6fe4cc252b88376850525c0126a38a0 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|W_Y?dhFJK& zowSknu!4ZA{WJs9WekpItG+R;Ilz$f(DudwRaREs9tROA@rgRBh0|k-&)&WK|9k(J zd)E6jKCwU8C;ep3!mYxEnx$M_GV62~7 VeK9EAbw1FI44$rjF6*2UngBBAR(}8h literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/favicon-32x32.png b/frontend/src/resources/xxi/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..bc275639ced97ae184fdab120d3a7356860b59a6 GIT binary patch literal 382 zcmV-^0fGLBP)Px$I7vi7R9HvtmNANhP!vUPFoK0;ut;2ig{2D!sBM~Hmm+p9LP2dLoo>KJ1l@o| zl1h?wSeinx7ahJuAkkr924)!euldC*{(a|OcyBQb!+<}m1riw$H8*Bd=YRuop8V35r!d>B*FE1MI6W2Y&H`C zbzMW(b(CcZp65RoKssdV@qP@pJOd)&CJNXMrS1 za9#I>0?7ce;C8zqilWhi%jGgs5JmC(7R-f^cuPY0RR~EaHBI|j2!H!JqbC_9KnYL+ clmI300lK9pu&Mf9AOHXW07*qoM6N<$g4Tqe6#xJL literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/favicon.ico b/frontend/src/resources/xxi/favicons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b7ea1f5cd2a3157d36f35a59e1576272216880e8 GIT binary patch literal 15406 zcmeI2%}Qf26vs2nJb<&9jc(e_AX-t1&U!#ySgra9v#R4-L_zCHM6{@dg1gyipFwmb zQvB*(aHFVIQBl;|`g!L521fN&d?LMBss~+J?GclG~`5x58|V!s1R1}52%ueKRG!m z$F&8T{>;qGi}aoBhaZLP*KOhQ+YvA>3V$KQI^(jQ@79C$DPMX!kN8bYfC(@GCcp&p z6F56Nqq(^`dtY*Vd`!`3lpY=)GL*2-f*kEg_xJZw@8skpqo1l=TwG9JUmvAXDJ3%I zcz<_yH;s*r5%x}H6HNnSuT@`PPghr0rsfP8 zd}?oRCy&QN!^6Wii;PZI1wN0Cj#6!HEw#3`(!s$&b{D(;zr5eX9}M8Do)rJCt}asi zTUuJ=Z>INCoc{5+L9|CGI)GXW;R1egF5cufNN&IQUvj&l<0h*tct z9zG{|&6&nyGXW;R1egF5U;<2l2`~XBzy!*h0PdDtUtd!)nalwJnMtm9#JM=mth3Lj zQ9nIB&5`T6stg-&KEA!ZT~vRiha9#?A`zOJn#zc6Al`yIE8%cBLte8Aa$EEc0cAV8a&oA$jIT~{yT4oxT&BER2H=jZ2oQ^7LqpO~1SnwlCJ!@>DI z#(=D@u1>~`E-x>Q<0$(Pcfhl}yexfPUtgz=jt**UY^24-#hg1q*@Gb_g}XpaO-=GQ z%Wik7!v@5Q5C`&ly)srcG&Ce*O(P>Clt?6;)MadGWo1R$>+|_&c6L_Ap4!^lXklR? zZ|q4Qv=sZ*IG8Vpxw+kLs;sP}{{DXH7yK)fFkf)b3co>BRh8tpw6s)|?HIe9?JqQc zur4?y#6{n8{y2TVh_?<54A9NZjnRed?-zbxEm7YuzDLZXLUXW``Qx;H;?5w}Q2mae z?ufGAw0^Fxu2N4=55?ngUBy@~W&MN=@WJ#y1vwt4^xpqpPPTCy6JP>NfC(@GCcp%k X025#WOn?cL9|7xn5GN+^VgkPb;`*;v literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/favicons/site.webmanifest b/frontend/src/resources/xxi/favicons/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/frontend/src/resources/xxi/favicons/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/frontend/src/resources/xxi/xxi-preview.jpg b/frontend/src/resources/xxi/xxi-preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce1d822cf1b46b92140003364a164dc17d267e6e GIT binary patch literal 74726 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/xxi/xxilogo.png b/frontend/src/resources/xxi/xxilogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a59415095b9d89d23f8215377f034cccfc9774 GIT binary patch literal 16490 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 Date: Sun, 15 Jun 2025 11:50:03 +0200 Subject: [PATCH 260/534] [accelerator] show square payment receipt on pizza tracker --- .../accelerate-checkout/accelerate-checkout.component.ts | 5 +++++ frontend/src/app/components/tracker/tracker.component.html | 7 +++++++ frontend/src/app/components/tracker/tracker.component.ts | 7 +++++++ 3 files changed, 19 insertions(+) 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 958a27787..4d9938bcc 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -72,6 +72,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Output() completed = new EventEmitter(); @Output() hasDetails = new EventEmitter(); @Output() changeMode = new EventEmitter(); + @Output() paymentReceipt = new EventEmitter(); calculating = true; processing = false; @@ -543,6 +544,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.applePay) { this.applePay.destroy(); } + this.paymentReceipt.emit(this.accelerationResponse?.receiptUrl); setTimeout(() => { this.isTokenizing--; this.isCheckoutLocked--; @@ -671,6 +673,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.googlePay) { this.googlePay.destroy(); } + this.paymentReceipt.emit(this.accelerationResponse?.receiptUrl); setTimeout(() => { this.isTokenizing--; this.isCheckoutLocked--; @@ -778,6 +781,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); + this.paymentReceipt.emit(this.accelerationResponse?.receiptUrl); setTimeout(() => { this.isCheckoutLocked--; this.isTokenizing--; @@ -875,6 +879,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.cashAppPay) { this.cashAppPay.destroy(); } + this.paymentReceipt.emit(this.accelerationResponse?.receiptUrl); setTimeout(() => { this.moveToStep('paid', true); if (window.history.replaceState) { diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index a7b8972a2..f4fcd07af 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -131,6 +131,7 @@ [miningStats]="miningStats" [eta]="eta" (unavailable)="eligibleForAcceleration = false" + (paymentReceipt)="paymentReceipt($event)" class="w-100" > @@ -141,6 +142,9 @@
    Your transaction has been accelerated + @if (paymentReceiptUrl) { + Get a receipt. + } } @else { @switch (trackerStage) { @case ('waiting') { @@ -172,6 +176,9 @@ Your transaction is confirmed! + @if (paymentReceiptUrl) { + Get a receipt. + } } @case ('replaced') {
    diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 1d6706fae..857d6444c 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -121,6 +121,7 @@ export class TrackerComponent implements OnInit, OnDestroy { acceleratorAvailable: boolean = this.stateService.env.ACCELERATOR && this.stateService.network === ''; eligibleForAcceleration: boolean = false; accelerationFlowCompleted = false; + paymentReceiptUrl: string | null = null; auditEnabled: boolean = this.stateService.env.AUDIT && this.stateService.env.BASE_MODULE === 'mempool' && this.stateService.env.MINING_DASHBOARD === true; enterpriseInfo: any; @@ -712,6 +713,12 @@ export class TrackerComponent implements OnInit, OnDestroy { return true; } + paymentReceipt(ev) { + if (ev?.length) { + this.paymentReceiptUrl = ev; + } + } + setIsAccelerated(initialState: boolean = false) { this.isAcceleration = (this.tx.acceleration || (this.accelerationInfo && this.pool && this.accelerationInfo.pools.some(pool => (pool === this.pool.id)))); if (this.isAcceleration) { From 6c8ac6cd5c11f2fcf014ca1b3948138910f5f7b6 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 18 Jun 2025 21:18:08 +0200 Subject: [PATCH 261/534] Improve cropping in asm component --- .../shared/components/asm/asm.component.ts | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/shared/components/asm/asm.component.ts b/frontend/src/app/shared/components/asm/asm.component.ts index d05ced79e..9fcb5859e 100644 --- a/frontend/src/app/shared/components/asm/asm.component.ts +++ b/frontend/src/app/shared/components/asm/asm.component.ts @@ -36,14 +36,35 @@ export class AsmComponent { parseASM(): void { let instructions = this.asm.split('OP_'); // trim instructions to a whole number of instructions with at most `crop` characters total - if (this.crop) { + if (this.crop && this.asm.length > this.crop) { let chars = 0; for (let i = 0; i < instructions.length; i++) { - chars += instructions[i].length + 3; - if (chars > this.crop) { + if (chars + instructions[i].length + 3 > this.crop) { + let croppedInstruction = instructions[i]; instructions = instructions.slice(0, i); + // add cropped instruction + let remainingChars = this.crop - chars; + let parts = croppedInstruction.split(' '); + // only render this instruction if there is space for the instruction name and a few args + if (remainingChars > parts[0].length + 10) { + remainingChars -= parts[0].length + 1; + for (let j = 1; j < parts.length; j++) { + const arg = parts[j]; + if (remainingChars >= arg.length) { + remainingChars -= arg.length + 1; + } else { + // crop this argument + parts[j] = arg.slice(0, remainingChars); + // and remove all following arguments + parts = parts.slice(0, j + 1); + break; + } + } + instructions.push(`${parts.join(' ')}`); + } break; } + chars += instructions[i].length + 3; } } this.instructions = instructions.filter(instruction => instruction.trim() !== '').map(instruction => { From f53d1513f7b668fbcdf1ceb29858398757923bd0 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 19 Jun 2025 14:03:19 +0200 Subject: [PATCH 262/534] Fix issues with OP_RETURN data toggling and slicing --- .../transactions-list.component.html | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) 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 fa6d3cf12..9925d5bd8 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -398,12 +398,8 @@
    + + + diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index d244ff15d..b3559769c 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -23,6 +23,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { pushTxForm: UntypedFormGroup; rawHexTransaction: string; + psbt: string; isLoading: boolean; isLoadingPrevouts: boolean; isLoadingCpfpInfo: boolean; @@ -83,15 +84,15 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.fragmentSubscription = this.route.fragment.subscribe((fragment) => { if (fragment) { const params = new URLSearchParams(fragment); - const hex = params.get('hex'); - if (hex) { - this.pushTxForm.get('txRaw').setValue(hex); + const txData = params.get('tx'); + if (txData) { + this.pushTxForm.get('txRaw').setValue(txData); } const offline = params.get('offline'); if (offline) { this.offlineMode = offline === 'true'; } - if (hex && this.pushTxForm.get('txRaw').value && !this.transaction) { + if (txData && this.pushTxForm.get('txRaw').value && !this.transaction) { this.decodeTransaction(); } } @@ -102,10 +103,10 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.resetState(); this.isLoading = true; try { - const { tx, hex } = decodeRawTransaction(this.pushTxForm.get('txRaw').value.trim(), this.stateService.network); + const { tx, hex, psbt } = decodeRawTransaction(this.pushTxForm.get('txRaw').value.trim(), this.stateService.network); await this.fetchPrevouts(tx); await this.fetchCpfpInfo(tx); - this.processTransaction(tx, hex); + this.processTransaction(tx, hex, psbt); } catch (error) { this.error = error.message; } finally { @@ -199,13 +200,14 @@ export class TransactionRawComponent implements OnInit, OnDestroy { } } - processTransaction(tx: Transaction, hex: string): void { + processTransaction(tx: Transaction, hex: string, psbt: string): void { this.transaction = tx; this.rawHexTransaction = hex; + this.psbt = psbt; this.isCoinbase = this.transaction.vin[0].is_coinbase; - // Update URL fragment with hex data + // Update URL fragment with hex or psbt data this.router.navigate([], { fragment: this.getCurrentFragments(), replaceUrl: true @@ -266,6 +268,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { resetState() { this.transaction = null; this.rawHexTransaction = null; + this.psbt = null; this.error = null; this.errorPrevouts = null; this.errorBroadcast = null; @@ -345,7 +348,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { params.set('offline', 'true'); } if (this.rawHexTransaction) { - params.set('hex', this.rawHexTransaction); + params.set('tx', this.psbt || this.rawHexTransaction); // use PSBT in fragment if available } return params.toString(); } diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 615b9cc89..f0280448c 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1289,7 +1289,7 @@ function decodePsbt(psbtBuffer: Uint8Array): { rawTx: Uint8Array; inputs: { key: return { rawTx, inputs }; } -export function decodeRawTransaction(input: string, network: string): { tx: Transaction, hex: string } { +export function decodeRawTransaction(input: string, network: string): { tx: Transaction, hex: string, psbt?: string } { if (!input.length) { throw new Error('Empty input'); } @@ -1305,7 +1305,7 @@ export function decodeRawTransaction(input: string, network: string): { tx: Tran if (buffer[0] === 0x70 && buffer[1] === 0x73 && buffer[2] === 0x62 && buffer[3] === 0x74) { // PSBT magic bytes const { rawTx, inputs } = decodePsbt(buffer); - return fromBuffer(rawTx, network, inputs); + return { ...fromBuffer(rawTx, network, inputs), psbt: uint8ArrayToHexString(buffer) }; } return fromBuffer(buffer, network); From af82f7d39944bf32a565ac695b57f7174af7598c Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 30 Jun 2025 17:44:02 +0200 Subject: [PATCH 286/534] Fix redeem witness script filling in tx preview --- frontend/src/app/shared/transaction.utils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index f0280448c..e8f29672f 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -938,7 +938,7 @@ export function addInnerScriptsToVin(vin: Vin): void { if (vin.prevout.scriptpubkey_type === 'p2sh') { const redeemScript = vin.scriptsig_asm.split(' ').reverse()[0]; vin.inner_redeemscript_asm = convertScriptSigAsm(redeemScript); - if (vin.witness && vin.witness.length) { + if (vin.witness && vin.witness.length > 2) { const witnessScript = vin.witness[vin.witness.length - 1]; vin.inner_witnessscript_asm = convertScriptSigAsm(witnessScript); } @@ -1134,9 +1134,11 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar } vin.scriptsig = (vin.scriptsig || '') + uint8ArrayToHexString(pushOpcode) + uint8ArrayToHexString(redeemScript); vin.scriptsig_asm = convertScriptSigAsm(vin.scriptsig); + vin.inner_redeemscript_asm = vin.scriptsig_asm.split(' ').reverse()[0]; } if (groups.witnessScript && !finalizedWitness) { vin.witness = (vin.witness || []).concat(uint8ArrayToHexString(groups.witnessScript.value)); + vin.inner_witnessscript_asm = convertScriptSigAsm(vin.witness[vin.witness.length - 1]); } From 2fa7405d466d702af1bf6c5370dd20ed0ef5928f Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 1 Jul 2025 17:09:57 +0200 Subject: [PATCH 287/534] nit changes on psbt signatures pre-filling --- frontend/src/app/shared/transaction.utils.ts | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index e8f29672f..bb4dc8f68 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1141,25 +1141,28 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar vin.inner_witnessscript_asm = convertScriptSigAsm(vin.witness[vin.witness.length - 1]); } - // Fill partial signatures for (const record of groups.partialSigs) { + const signature = record.value; const scriptpubkey_type = vin.prevout?.scriptpubkey_type; - if (scriptpubkey_type === 'v0_p2wsh' && !finalizedWitness) { - vin.witness = vin.witness || []; - vin.witness.unshift(uint8ArrayToHexString(record.value)); + if (scriptpubkey_type === 'multisig' && !finalizedScriptSig) { + if (signature.length > 74) { + throw new Error("Signature must be <= 74 bytes"); + } + const pushOpcode = new Uint8Array([signature.length]); + vin.scriptsig = uint8ArrayToHexString(pushOpcode) + uint8ArrayToHexString(signature) + (vin.scriptsig || ''); + vin.scriptsig_asm = convertScriptSigAsm(vin.scriptsig); } if (scriptpubkey_type === 'p2sh') { const redeemScriptStr = vin.scriptsig_asm ? vin.scriptsig_asm.split(' ').reverse()[0] : ''; if (redeemScriptStr.startsWith('00') && redeemScriptStr.length === 68 && vin.witness?.length) { if (!finalizedWitness) { - vin.witness.unshift(uint8ArrayToHexString(record.value)); + vin.witness.unshift(uint8ArrayToHexString(signature)); } } else { if (!finalizedScriptSig) { - const signature = record.value; - if (signature.length > 73) { - throw new Error("Signature must be <= 73 bytes"); + if (signature.length > 74) { + throw new Error("Signature must be <= 74 bytes"); } const pushOpcode = new Uint8Array([signature.length]); vin.scriptsig = uint8ArrayToHexString(pushOpcode) + uint8ArrayToHexString(signature) + (vin.scriptsig || ''); @@ -1167,6 +1170,10 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar } } } + if (scriptpubkey_type === 'v0_p2wsh' && !finalizedWitness) { + vin.witness = vin.witness || []; + vin.witness.unshift(uint8ArrayToHexString(signature)); + } } } } From efaeacc24950bcefd3898442e6279260c9acb36e Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 1 Jul 2025 17:12:52 +0200 Subject: [PATCH 288/534] PSBT support for script and signature pre-filling in P2TR inputs --- frontend/src/app/shared/transaction.utils.ts | 68 +++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index bb4dc8f68..17e47fcb8 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1052,7 +1052,10 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar finalScriptWitness: null, redeemScript: null, witnessScript: null, - partialSigs: [] + partialSigs: [], + tapLeafScripts: [], + tapScriptSigs: [], + tapInternalKey: null, }; for (const record of inputRecords) { @@ -1078,6 +1081,14 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar case 0x02: groups.partialSigs.push(record); break; + case 0x14: + groups.tapScriptSigs.push(record); + break; + case 0x15: + groups.tapLeafScripts.push(record); + break; + case 0x17: + groups.tapInternalKey = record; } } @@ -1175,6 +1186,61 @@ function fromBuffer(buffer: Uint8Array, network: string, inputs?: { key: Uint8Ar vin.witness.unshift(uint8ArrayToHexString(signature)); } } + + if (groups.tapLeafScripts.length && groups.tapInternalKey && !finalizedWitness) { + // If no signature is present, assume key spend *except* if internal key is provably unspendable + if (!groups.tapScriptSigs.length) { + if (uint8ArrayToHexString(groups.tapInternalKey.value) === '50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0') { + // unspendable internal key, use the first tap leaf script provided + const record = groups.tapLeafScripts[0]; + const controlBlock = uint8ArrayToHexString(record.key.slice(1)); + const tapLeaf = uint8ArrayToHexString(record.value.slice(0, -1)); + vin.witness = vin.witness || []; + vin.witness.unshift(tapLeaf, controlBlock); + vin.inner_witnessscript_asm = convertScriptSigAsm(tapLeaf); + } + } else { + // get the hash with the most signatures + const leafScriptSignatures: { [leafHash: string]: number } = {}; + let maxSignatures = 0; + let scriptMostSigs = ''; + + for (const record of groups.tapScriptSigs) { + const leafHash = uint8ArrayToHexString(record.key.slice(33)); + if (!leafScriptSignatures[leafHash]) { + leafScriptSignatures[leafHash] = 0; + } + leafScriptSignatures[leafHash]++; + if (leafScriptSignatures[leafHash] > maxSignatures) { + maxSignatures = leafScriptSignatures[leafHash]; + scriptMostSigs = leafHash; + } + } + + // find the script with most signatures + for (const record of groups.tapLeafScripts) { + const leafVersion = uint8ArrayToHexString(record.value.slice(-1)); + const script = uint8ArrayToHexString(record.value.slice(0, -1)); + const scriptSize = uint8ArrayToHexString(compactSize(record.value.length - 1)); + if (taggedHash('TapLeaf', leafVersion + scriptSize + script) === scriptMostSigs) { + // add the script + const controlBlock = uint8ArrayToHexString(record.key.slice(1)); + const tapLeaf = uint8ArrayToHexString(record.value.slice(0, -1)); + vin.witness = vin.witness || []; + vin.witness.unshift(tapLeaf, controlBlock); + vin.inner_witnessscript_asm = convertScriptSigAsm(tapLeaf); + // add the signatures that are part of this script + for (const sigRecord of groups.tapScriptSigs) { + const sigLeafHash = uint8ArrayToHexString(sigRecord.key.slice(33)); + if (sigLeafHash === scriptMostSigs) { + vin.witness.unshift(uint8ArrayToHexString(sigRecord.value)); + } + } + break; + } + } + } + } } } From ccc5ce8ad96daf4ecfd64503dc2228389bfb4019 Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 3 Jul 2025 22:35:44 -1000 Subject: [PATCH 289/534] ops: Add more mempool servers to elements.conf --- production/elements.conf | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/production/elements.conf b/production/elements.conf index 14838a5ae..dcbb1856c 100644 --- a/production/elements.conf +++ b/production/elements.conf @@ -11,6 +11,10 @@ txindex=1 [liquidv1] validatepegin=1 mainchainrpcport=8332 +#addnode=[2401:b140::92:201]:7042 +#addnode=[2401:b140::92:202]:7042 +#addnode=[2401:b140::92:203]:7042 +#addnode=[2401:b140::92:204]:7042 #addnode=[2401:b140:1::92:201]:7042 #addnode=[2401:b140:1::92:202]:7042 #addnode=[2401:b140:1::92:203]:7042 @@ -35,6 +39,10 @@ mainchainrpcport=8332 #addnode=[2401:b140:4::92:204]:7042 #addnode=[2401:b140:4::92:205]:7042 #addnode=[2401:b140:4::92:206]:7042 +#addnode=[2401:b140:5::92:201]:7042 +#addnode=[2401:b140:5::92:202]:7042 +#addnode=[2401:b140:5::92:203]:7042 +#addnode=[2401:b140:5::92:204]:7042 [liquidtestnet] rpcport=7040 @@ -58,6 +66,10 @@ signblockscript=51210217e403ddb181872c32a0cd468c710040b2f53d8cac69f18dad07985ee3 evbparams=dynafed:0::: addnode=liquid-testnet.blockstream.com:18892 addnode=liquidtestnet.com:18891 +#addnode=[2401:b140::92:201]:18891 +#addnode=[2401:b140::92:202]:18891 +#addnode=[2401:b140::92:203]:18891 +#addnode=[2401:b140::92:204]:18891 #addnode=[2401:b140:1::92:201]:18891 #addnode=[2401:b140:1::92:202]:18891 #addnode=[2401:b140:1::92:203]:18891 @@ -82,3 +94,7 @@ addnode=liquidtestnet.com:18891 #addnode=[2401:b140:4::92:204]:18891 #addnode=[2401:b140:4::92:205]:18891 #addnode=[2401:b140:4::92:206]:18891 +#addnode=[2401:b140:5::92:201]:18891 +#addnode=[2401:b140:5::92:202]:18891 +#addnode=[2401:b140:5::92:203]:18891 +#addnode=[2401:b140:5::92:204]:18891 From 78987f11c67e40fcf7851842992996752159385a Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 4 Jul 2025 00:03:18 -1000 Subject: [PATCH 290/534] ops: Bump elements to v23.3.0 --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index 92945c310..1318ab369 100755 --- a/production/install +++ b/production/install @@ -376,7 +376,7 @@ ELEMENTS_REPO_URL=https://github.com/ElementsProject/elements ELEMENTS_REPO_NAME=elements ELEMENTS_REPO_BRANCH=master #ELEMENTS_LATEST_RELEASE=$(curl -s https://api.github.com/repos/ElementsProject/elements/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -ELEMENTS_LATEST_RELEASE=elements-23.2.7 +ELEMENTS_LATEST_RELEASE=elements-23.3.0 echo -n '.' BITCOIN_ELECTRS_REPO_URL=https://github.com/mempool/electrs From f4edc35fb9a800898c37540592cc51424bbde180 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 6 Jul 2025 03:46:28 +0000 Subject: [PATCH 291/534] Fix median fee calculation in underfilled blocks --- backend/src/api/blocks.ts | 4 +- backend/src/api/common.ts | 8 +- backend/src/api/database-migration.ts | 9 ++- backend/src/indexer.ts | 2 + backend/src/mempool.interfaces.ts | 1 + backend/src/repositories/BlocksRepository.ts | 81 +++++++++++++++++++- 6 files changed, 95 insertions(+), 10 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index d475470db..aa1fa9751 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -244,7 +244,7 @@ class Blocks { */ private async $getBlockExtended(block: IEsploraApi.Block, transactions: TransactionExtended[]): Promise { const coinbaseTx = transactionUtils.stripCoinbaseTransaction(transactions[0]); - + const blk: Partial = Object.assign({}, block); const extras: Partial = {}; @@ -296,7 +296,7 @@ class Blocks { extras.medianFeeAmt = extras.feePercentiles[3]; } } - + extras.virtualSize = block.weight / 4.0; if (coinbaseTx?.vout.length > 0) { extras.coinbaseAddress = coinbaseTx.vout[0].scriptpubkey_address ?? null; diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 80542edb4..348c28465 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -892,14 +892,16 @@ export class Common { } } - static calcEffectiveFeeStatistics(transactions: { weight: number, fee: number, effectiveFeePerVsize?: number, txid: string, acceleration?: boolean }[]): EffectiveFeeStats { + static calcEffectiveFeeStatistics(transactions: { weight: number, fee?: number, effectiveFeePerVsize?: number, txid: string, acceleration?: boolean }[]): EffectiveFeeStats { const sortedTxs = transactions.map(tx => { return { txid: tx.txid, weight: tx.weight, rate: tx.effectiveFeePerVsize || ((tx.fee || 0) / (tx.weight / 4)) }; }).sort((a, b) => a.rate - b.rate); + const totalWeight = transactions.reduce((acc, tx) => acc + tx.weight, 0); - let weightCount = 0; + // include any unused space + let weightCount = config.MEMPOOL.BLOCK_WEIGHT_UNITS - totalWeight; let medianFee = 0; let medianWeight = 0; - // calculate the "medianFee" as the average fee rate of the middle 0.25% weight units of transactions + // calculate the "medianFee" as the average fee rate of the middle 0.25% weight units of the conceptual block const halfWidth = config.MEMPOOL.BLOCK_WEIGHT_UNITS / 800; const leftBound = Math.floor((config.MEMPOOL.BLOCK_WEIGHT_UNITS / 2) - halfWidth); const rightBound = Math.ceil((config.MEMPOOL.BLOCK_WEIGHT_UNITS / 2) + halfWidth); diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 99af80a0e..a10f65a00 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 = 99; + private static currentVersion = 100; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -1160,6 +1160,13 @@ class DatabaseMigration { await this.$executeQuery('ALTER TABLE statistics ADD COLUMN vsize_0 int(11) NOT NULL DEFAULT 0'); await this.updateToSchemaVersion(99); } + + // Add "block indexed at version" index_version column to the blocks table + // to be used for lazy migrations & reindexing tasks + if (databaseSchemaVersion < 100) { + await this.$executeQuery('ALTER TABLE `blocks` ADD index_version INT NOT NULL DEFAULT 0'); + await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `index_version` (`index_version`)'); + } } /** diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index dfd7f1317..d46fb14bc 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -11,6 +11,7 @@ import auditReplicator from './replication/AuditReplication'; import statisticsReplicator from './replication/StatisticsReplication'; import AccelerationRepository from './repositories/AccelerationRepository'; import BlocksAuditsRepository from './repositories/BlocksAuditsRepository'; +import BlocksRepository from './repositories/BlocksRepository'; export interface CoreIndex { name: string; @@ -194,6 +195,7 @@ class Indexer { await statisticsReplicator.$sync(); await AccelerationRepository.$indexPastAccelerations(); await BlocksAuditsRepository.$migrateAuditsV0toV1(); + await BlocksRepository.$migrateBlocks(); // 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 7808fec7f..0dfce6b1f 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -337,6 +337,7 @@ export interface BlockExtension { export interface BlockExtended extends IEsploraApi.Block { extras: BlockExtension; canonical?: string; + indexVersion?: number; } export interface BlockSummary { diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index f673e574b..1935ed4e2 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -18,6 +18,7 @@ import { parseDATUMTemplateCreator } from '../utils/bitcoin-script'; import poolsUpdater from '../tasks/pools-updater'; interface DatabaseBlock { + index_version: number; id: string; height: number; version: number; @@ -62,6 +63,7 @@ interface DatabaseBlock { } const BLOCK_DB_FIELDS = ` + blocks.index_version AS indexVersion, blocks.hash AS id, blocks.height, blocks.version, @@ -106,6 +108,8 @@ const BLOCK_DB_FIELDS = ` `; class BlocksRepository { + static version = 1; + /** * Save indexed block data in the database */ @@ -124,7 +128,7 @@ class BlocksRepository { coinbase_signature, utxoset_size, utxoset_change, avg_tx_size, total_inputs, total_outputs, total_input_amt, total_output_amt, fee_percentiles, segwit_total_txs, segwit_total_size, segwit_total_weight, - median_fee_amt, coinbase_signature_ascii, definition_hash + median_fee_amt, coinbase_signature_ascii, definition_hash, index_version ) VALUE ( ?, ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, @@ -135,7 +139,7 @@ class BlocksRepository { ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - ?, ?, ? + ?, ?, ?, ? )`; const poolDbId = await PoolsRepository.$getPoolByUniqueId(block.extras.pool.id); @@ -182,7 +186,8 @@ class BlocksRepository { block.extras.segwitTotalWeight, block.extras.medianFeeAmt, truncatedCoinbaseSignatureAscii, - poolsUpdater.currentSha + poolsUpdater.currentSha, + BlocksRepository.version ]; await DB.query(query, params); @@ -1067,7 +1072,7 @@ class BlocksRepository { blk.weight = dbBlk.weight; blk.previousblockhash = dbBlk.previousblockhash; blk.mediantime = dbBlk.mediantime; - + blk.indexVersion = dbBlk.index_version; // BlockExtension extras.totalFees = dbBlk.totalFees; extras.medianFee = dbBlk.medianFee; @@ -1155,6 +1160,74 @@ class BlocksRepository { blk.extras = extras; return blk; } + + // Execute reindexing tasks & lazy schema migrations + public async $migrateBlocks(): Promise { + let blocksMigrated = 0; + blocksMigrated = await this.$migrateBlocksToV1(); + if (blocksMigrated > 0) { + // return early, run the next migration on the next indexing loop + return blocksMigrated; + } + return 0; + } + + // migration to fix median fee bug + private async $migrateBlocksToV1(): Promise { + let blocksMigrated = 0; + try { + // median fee bug only affects mmre-than-half but less-than-completely full blocks + const minWeight = config.MEMPOOL.BLOCK_WEIGHT_UNITS / 2 - (config.MEMPOOL.BLOCK_WEIGHT_UNITS / 800); + const maxWeight = config.MEMPOOL.BLOCK_WEIGHT_UNITS - (config.MEMPOOL.BLOCK_WEIGHT_UNITS / 400); + const [rows]: any[] = await DB.query(` + SELECT height, hash, index_version + FROM blocks + WHERE index_version < 1 + AND weight >= ? + AND weight <= ? + ORDER BY height DESC + `, [minWeight, maxWeight]); + const blocksToMigrate = rows.length; + + let timer = Date.now() / 1000; + const startedAt = Date.now() / 1000; + + for (const row of rows) { + // fetch block summary + const transactions = await blocks.$getStrippedBlockTransactions(row.hash); + // recalculate effective fee statistics using latest methodology + const feeStats = Common.calcEffectiveFeeStatistics(transactions.map(tx => ({ + weight: tx.vsize * 4, + effectiveFeePerVsize: tx.rate, + txid: tx.txid, + acceleration: tx.acc, + }))); + + // update block db + await DB.query(` + UPDATE blocks SET index_version = 1, median_fee = ?, fee_span = ? + WHERE hash = ?`, + [feeStats.medianFee, JSON.stringify(feeStats.feeRange), row.hash] + ); + + const elapsedSeconds = (Date.now() / 1000) - timer; + if (elapsedSeconds > 5) { + const runningFor = (Date.now() / 1000) - startedAt; + const blockPerSeconds = blocksMigrated / elapsedSeconds; + const progress = Math.round(blocksMigrated / blocksToMigrate * 10000) / 100; + logger.debug(`Migrating blocks to version 1 | ~${blockPerSeconds.toFixed(2)} blocks/sec | height: ${row.height} | total: ${blocksMigrated}/${blocksToMigrate} (${progress}%) | elapsed: ${runningFor.toFixed(2)} seconds`); + timer = Date.now() / 1000; + } + + blocksMigrated++; + } + logger.notice(`Migrating blocks to version 1 completed: migrated ${blocksMigrated} blocks`); + } catch (e) { + logger.err(`Migrating blocks to version 1 failed. Trying again later. Reason: ${(e instanceof Error ? e.message : e)}`); + throw e; + } + return blocksMigrated; + } } export default new BlocksRepository(); From 6123c4ff150c9ccd160ad0a5f3eede7a3540abab Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 7 Jul 2025 00:36:04 -1000 Subject: [PATCH 292/534] ops: Bump bitcoin to v29.0 --- production/install | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/production/install b/production/install index 1318ab369..47a4ca5ce 100755 --- a/production/install +++ b/production/install @@ -356,7 +356,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=v28.1 +BITCOIN_LATEST_RELEASE=v29.0 echo -n '.' CKPOOL_REPO_URL=https://github.com/mempool/ckpool @@ -416,9 +416,9 @@ DEBIAN_UNFURL_PKG+=(libxdamage-dev libxrandr-dev libgbm-dev libpango1.0-dev liba FREEBSD_PKG=() FREEBSD_PKG+=(zsh sudo git screen curl wget calc neovim) FREEBSD_PKG+=(openssh-portable py311-pip rust llvm17 jq base64 libzmq4) -FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc gcc13 libevent libtool pkgconf) +FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc gcc13 libevent libtool pkgconf cmake) FREEBSD_PKG+=(nginx rsync py311-certbot-nginx mariadb1011-server) -FREEBSD_PKG+=(redis) +FREEBSD_PKG+=(redis sqlite3 libzmq4) FREEBSD_PKG+=(libepoll-shim) FREEBSD_UNFURL_PKG=() @@ -1183,12 +1183,22 @@ if [ "${BITCOIN_INSTALL}" = ON ];then osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_REPO_NAME} && git checkout ${BITCOIN_LATEST_RELEASE}" echo "[*] Building Bitcoin from source repo" - osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && ./autogen.sh --quiet" - osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && MAKE=gmake CC=cc CXX=c++ CPPFLAGS=-I/usr/local/include ./configure --with-gui=no --disable-wallet --disable-tests" - osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && gmake -j${NPROC}" - echo "[*] Installing Bitcoin binaries into OS" - osSudo "${ROOT_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_REPO_NAME} && gmake install" + # use cmake if > v28 + if [ "${BITCOIN_LATEST_RELEASE:1:2}" -gt "28" ];then + osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && cmake -B build -DWITH_GUI=OFF -DENABLE_WALLET=OFF -DBUILD_BITCOIN_TESTS=OFF" + osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && cmake --build build -j${NPROC}" + + echo "[*] Installing Bitcoin binaries into OS" + osSudo "${ROOT_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_REPO_NAME}/build && cmake --install ." + else # use gmake if <= v28 + osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && ./autogen.sh --quiet" + osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && MAKE=gmake CC=cc CXX=c++ CPPFLAGS=-I/usr/local/include ./configure --with-gui=no --disable-wallet --disable-tests" + osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_REPO_NAME} && gmake -j${NPROC}" + + echo "[*] Installing Bitcoin binaries into OS" + osSudo "${ROOT_USER}" sh -c "cd ${BITCOIN_HOME}/${BITCOIN_REPO_NAME} && gmake install" + fi echo "[*] Installing Bitcoin configuration" osSudo "${ROOT_USER}" install -c -o "${BITCOIN_USER}" -g "${BITCOIN_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/bitcoin.conf" "${BITCOIN_HOME}/bitcoin.conf" From 6842965d59cf2d7f0d5a33ac2e1582577e4a9caa Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 2 Jul 2025 13:16:16 +0200 Subject: [PATCH 293/534] Tx preview: fill missing signature weight in unsigned transactions --- .../transaction-raw.component.html | 20 ++- .../transaction-raw.component.scss | 5 + .../transaction/transaction-raw.component.ts | 78 ++++++++- frontend/src/app/shared/transaction.utils.ts | 158 +++++++++++++++++- 4 files changed, 244 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 40c45bf45..7fc449ca4 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -54,7 +54,10 @@ Redirecting to transaction page... - + } @@ -159,11 +162,17 @@ - + - + - +
    ScriptPubKey (ASM) + +
    + ... + +
    +
    ScriptPubKey (HEX){{ vout.scriptpubkey }} + @if (vout.scriptpubkey.length > 1000) { + @if (!showFullScriptPubkeyHex[vindex]) { + {{ vout.scriptpubkey | slice:0:1000 }} + } @else { + {{ vout.scriptpubkey }} + } + } @else { + {{ vout.scriptpubkey }} + } +
    + ... + +
    +
    OP_RETURN data{{ vout.scriptpubkey_asm | hex2ascii }} + @if (vout.scriptpubkey_asm.length > 1000) { + @if (!showFullOpReturnData[vindex]) { + {{ (vout.scriptpubkey_asm | slice:0:1000 | hex2ascii) }} + } @else { + {{ vout.scriptpubkey_asm | hex2ascii }} + } + } @else { + {{ vout.scriptpubkey_asm | hex2ascii }} + } +
    + ... + +
    +
    Type
    Fee span - -
    Median fee
    Fee span - + - - +
    ScriptPubKey (HEX) - @if (vout.scriptpubkey.length > 1000) { - @if (!showFullScriptPubkeyHex[vindex]) { - {{ vout.scriptpubkey | slice:0:1000 }} - } @else { - {{ vout.scriptpubkey }} - } + @if (!showFullScriptPubkeyHex[vindex]) { + {{ vout.scriptpubkey | slice:0:1000 }} } @else { {{ vout.scriptpubkey }} } @@ -419,16 +415,12 @@
    OP_RETURN data - @if (vout.scriptpubkey_asm.length > 1000) { - @if (!showFullOpReturnData[vindex]) { - {{ (vout.scriptpubkey_asm | slice:0:1000 | hex2ascii) }} - } @else { - {{ vout.scriptpubkey_asm | hex2ascii }} - } + @if (!showFullOpReturnData[vindex]) { + {{ (vout.scriptpubkey_asm | hex2ascii | slice:0:1000) }} } @else { {{ vout.scriptpubkey_asm | hex2ascii }} } -
    +
    ...
    - +

    Details

    From fc06e1d7d24e7afb1d38d30e02ee02f02c28ca28 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 30 Dec 2024 17:21:16 +0000 Subject: [PATCH 274/534] add sp widget to custom dashboard --- frontend/custom-sv-config.json | 7 +- .../custom-dashboard.component.html | 14 +++ .../simpleproof-widget.component.html | 75 ++++++++++++ .../simpleproof-widget.component.scss | 114 ++++++++++++++++++ .../simpleproof-widget.component.ts | 86 +++++++++++++ frontend/src/app/master-page.module.ts | 8 ++ .../src/app/services/services-api.service.ts | 5 + frontend/src/app/shared/shared.module.ts | 3 + frontend/src/resources/sp.svg | 36 ++++++ 9 files changed, 347 insertions(+), 1 deletion(-) create mode 100644 frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.html create mode 100644 frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss create mode 100644 frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts create mode 100644 frontend/src/resources/sp.svg diff --git a/frontend/custom-sv-config.json b/frontend/custom-sv-config.json index 9a61704a2..1f2e393d2 100644 --- a/frontend/custom-sv-config.json +++ b/frontend/custom-sv-config.json @@ -39,7 +39,12 @@ } }, { - "component": "blocks" + "component": "simpleproof", + "mobileOrder": 6, + "props": { + "label": "Executive Decrees", + "key": "el_salvador_decretos" + } }, { "component": "walletTransactions", 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 defb7c068..9f31ef05f 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -307,6 +307,20 @@
    } + @case ('simpleproof') { + + } } } diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.html b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.html new file mode 100644 index 000000000..dc8f24ea1 --- /dev/null +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.html @@ -0,0 +1,75 @@ +
    +
    +

    {{ label }}

    +
    +
    + +
    + + @if (isLoading) { + loading! +
    +
    +
    + } @else if (error || !verified.length) { +
    + temporarily unavailable +
    + } @else { +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    FilenameHashVerifiedProof
    {{ item.file_name }}{{ item.sha256 }} + + + + + + + Verify + +
    + + + + + + + +
    + + + + + +
    +
    +
    +
    + } +
    diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss new file mode 100644 index 000000000..63e2fe046 --- /dev/null +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss @@ -0,0 +1,114 @@ +.spinner-wrapper, .error-wrapper { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; +} + +.spinner-border { + height: 25px; + width: 25px; + margin-top: -10px; + margin-left: -13px; + flex-shrink: 0; +} + +.container-xl { + max-width: 1400px; +} +.container-xl.widget { + padding-left: 0px; + padding-bottom: 0px; + padding-right: 0px; +} +.container-xl.legacy { + max-width: 1140px; +} + +.container { + max-width: 100%; +} + +tr, td, th { + border: 0px; + padding-top: 0.71rem !important; + padding-bottom: 0.7rem !important; +} + +.clear-link { + color: white; +} + +.disabled { + pointer-events: none; + opacity: 0.5; +} + +.progress { + background-color: var(--secondary); +} + +.filename { + width: 50%; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.hash { + width: 25%; + max-width: 700px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +td.hash { + font-family: monospace; +} +.widget .hash { + display: none; +} +@media (max-width: 1200px) { + .hash { + display: none; + } +} + +.verified { + width: 25%; +} +td.verified { + color: var(--tertiary); +} + +.proof { + width: 25%; +} + +.badge-verify { + font-size: 1.05em; + font-weight: normal; + background: var(--nav-bg); + color: white; + + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + width: auto; + + .icon { + margin: -0.25em; + margin-right: 0.5em; + + .icon-img { + width: 16px; + font-size: 16px; + } + } +} diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts new file mode 100644 index 000000000..6cfa31bdb --- /dev/null +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts @@ -0,0 +1,86 @@ +import { Component, Input, SecurityContext, SimpleChanges, OnChanges } from '@angular/core'; +import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { catchError, of } from 'rxjs'; + +export interface SimpleProof { + file_name: string; + sha256: string; + ots_verification: string; + block_height: number; + block_hash: string; + block_time: number; + simpleproof_url: string; + key?: string; + sanitized_url?: SafeResourceUrl; +} + +@Component({ + selector: 'app-simpleproof-widget', + templateUrl: './simpleproof-widget.component.html', + styleUrls: ['./simpleproof-widget.component.scss'], +}) +export class SimpleProofWidgetComponent implements OnChanges { + @Input() key: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof')?.props?.key ?? ''; + @Input() label: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof')?.props?.label ?? 'Verified Documents'; + @Input() widget: boolean = false; + @Input() width = 300; + @Input() height = 400; + + verified: SimpleProof[] = []; + verifiedPage: SimpleProof[] = []; + isLoading: boolean = true; + error: boolean = false; + page = 1; + lastPage = 1; + itemsPerPage = 15; + paginationMaxSize = window.innerWidth <= 767.98 ? 3 : 5; + + constructor( + private servicesApiService: ServicesApiServices, + public sanitizer: DomSanitizer, + ) {} + + ngOnInit(): void { + this.loadVerifications(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.widget) { + this.itemsPerPage = this.widget ? 6 : 15; + } + if (changes.key) { + this.loadVerifications(); + } + } + + loadVerifications(): void { + if (this.key) { + this.isLoading = true; + this.servicesApiService.getSimpleProofs$(this.key).pipe( + catchError(() => { + this.isLoading = false; + this.error = true; + return of({}); + }), + ).subscribe((data: Record) => { + if (Object.keys(data).length) { + this.verified = Object.keys(data).map(key => ({ + ...data[key], + file_name: data[key].file_name.replace('source-', '').replace('_', ' '), + key, + sanitized_url: this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL, data[key]['simpleproof-url']) ?? ''), + })).sort((a, b) => b.key.localeCompare(a.key)); + this.verifiedPage = this.verified.slice((this.page - 1) * this.itemsPerPage, this.page * this.itemsPerPage); + this.isLoading = false; + this.error = false; + } + }); + } + } + + pageChange(page: number): void { + this.page = page; + this.verifiedPage = this.verified.slice((this.page - 1) * this.itemsPerPage, this.page * this.itemsPerPage); + } +} diff --git a/frontend/src/app/master-page.module.ts b/frontend/src/app/master-page.module.ts index f0af944cc..4bbf4de2b 100644 --- a/frontend/src/app/master-page.module.ts +++ b/frontend/src/app/master-page.module.ts @@ -14,6 +14,7 @@ import { StratumList } from '@components/stratum/stratum-list/stratum-list.compo 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 { SimpleProofWidgetComponent } from './components/simpleproof-widget/simpleproof-widget.component'; const browserWindow = window || {}; // @ts-ignore @@ -141,6 +142,13 @@ if (window['__env']?.OFFICIAL_MEMPOOL_SPACE) { } } +if (window['__env']?.customize?.dashboard.widgets?.some(w => w.component ==='simpleproof')) { + routes[0].children.push({ + path: 'sp/verified', + component: SimpleProofWidgetComponent, + }); +} + @NgModule({ imports: [ RouterModule.forChild(routes) diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 828fe5663..1ee4047a7 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -8,6 +8,7 @@ import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMa 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 { SimpleProof } from '../components/simpleproof-widget/simpleproof-widget.component'; export interface IUser { username: string; @@ -221,4 +222,8 @@ export class ServicesApiServices { getPaymentStatus$(orderId: string): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/payments/bitcoin/check?order_id=${orderId}`, { observe: 'response' }); } + + getSimpleProofs$(key: string): Observable> { + return this.httpClient.get>(`${this.stateService.env.SERVICES_API}/sp/verified/${key}`); + } } diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 1e18425f2..73f595831 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -123,6 +123,7 @@ import { CalculatorComponent } from '@components/calculator/calculator.component import { BitcoinsatoshisPipe } from '@app/shared/pipes/bitcoinsatoshis.pipe'; import { HttpErrorComponent } from '@app/shared/components/http-error/http-error.component'; import { TwitterWidgetComponent } from '@components/twitter-widget/twitter-widget.component'; +import { SimpleProofWidgetComponent } from '@components/simpleproof-widget/simpleproof-widget.component'; import { FaucetComponent } from '@components/faucet/faucet.component'; import { TwitterLogin } from '@components/twitter-login/twitter-login.component'; import { BitcoinInvoiceComponent } from '@components/bitcoin-invoice/bitcoin-invoice.component'; @@ -246,6 +247,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c OrdDataComponent, HttpErrorComponent, TwitterWidgetComponent, + SimpleProofWidgetComponent, FaucetComponent, TwitterLogin, GithubLogin, @@ -383,6 +385,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c OrdDataComponent, HttpErrorComponent, TwitterWidgetComponent, + SimpleProofWidgetComponent, TwitterLogin, GithubLogin, BitcoinInvoiceComponent, diff --git a/frontend/src/resources/sp.svg b/frontend/src/resources/sp.svg new file mode 100644 index 000000000..e8ebb5a3c --- /dev/null +++ b/frontend/src/resources/sp.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + From b80cbddad4f10315d764e7145c9aac03216a2528 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 16 Jun 2025 07:07:11 +0000 Subject: [PATCH 275/534] add new sp widget to dashboard --- frontend/custom-sv-config.json | 6 +- .../custom-dashboard.component.html | 16 +- .../simpleproof-cubo-widget.component.html | 88 +++++++++++ .../simpleproof-cubo-widget.component.ts | 137 ++++++++++++++++++ .../simpleproof-widget.component.scss | 4 + frontend/src/app/master-page.module.ts | 8 + frontend/src/app/shared/shared.module.ts | 7 +- 7 files changed, 261 insertions(+), 5 deletions(-) create mode 100644 frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html create mode 100644 frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts diff --git a/frontend/custom-sv-config.json b/frontend/custom-sv-config.json index 1f2e393d2..820a300fa 100644 --- a/frontend/custom-sv-config.json +++ b/frontend/custom-sv-config.json @@ -39,11 +39,11 @@ } }, { - "component": "simpleproof", + "component": "simpleproof_cubo", "mobileOrder": 6, "props": { - "label": "Executive Decrees", - "key": "el_salvador_decretos" + "label": "CUBO+ Certificates", + "key": "cubo_certificates" } }, { 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 9f31ef05f..4a50a893c 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -312,7 +312,7 @@ } + @case ('simpleproof_cubo') { + + } } } diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html new file mode 100644 index 000000000..71c7624db --- /dev/null +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html @@ -0,0 +1,88 @@ +
    +
    +

    {{ label }}

    +
    +
    + +
    + + @if (isLoading) { + loading! +
    +
    +
    + } @else if (error || !verified.length) { +
    + temporarily unavailable +
    + } @else { +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Student NameIDProof
    {{ item.student_name }} + @if (item.sanitized_download_url) { + + {{ item.id_code }} + + + + + } @else { + {{ item.id_code }} + } + + + + + + Verify + +
    + + + + + +
    + + + + + +
    +
    +
    +
    + } +
    diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts new file mode 100644 index 000000000..afb6386b4 --- /dev/null +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts @@ -0,0 +1,137 @@ +import { Component, Input, SecurityContext, SimpleChanges, OnChanges } from '@angular/core'; +import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { catchError, of } from 'rxjs'; + +export interface SimpleProofCubo { + student_name: string; + id_code: string; + download_url: string; + simpleproof_url: string; + sanitized_download_url: SafeResourceUrl; + sanitized_simpleproof_url: SafeResourceUrl; + parsed?: { type: string; year: number; studentNumber: number }; +} + +@Component({ + selector: 'app-simpleproof-cubo-widget', + templateUrl: './simpleproof-cubo-widget.component.html', + styleUrls: ['./simpleproof-widget.component.scss'], +}) +export class SimpleProofCuboWidgetComponent implements OnChanges { + @Input() key: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof_cubo')?.props?.key ?? ''; + @Input() label: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof_cubo')?.props?.label ?? 'CUBO+ Certificates'; + @Input() widget: boolean = false; + @Input() width = 300; + @Input() height = 400; + + searchText: string = ''; + verified: SimpleProofCubo[] = []; + filteredVerified: SimpleProofCubo[] = []; + verifiedPage: SimpleProofCubo[] = []; + isLoading: boolean = true; + error: boolean = false; + page = 1; + lastPage = 1; + itemsPerPage = 15; + paginationMaxSize = window.innerWidth <= 767.98 ? 3 : 5; + + constructor( + private servicesApiService: ServicesApiServices, + public sanitizer: DomSanitizer, + ) {} + + ngOnInit(): void { + this.loadVerifications(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.widget) { + this.itemsPerPage = this.widget ? 5 : 15; + } + if (changes.key) { + this.loadVerifications(); + } + } + + loadVerifications(): void { + if (this.key) { + this.isLoading = true; + this.servicesApiService.getSimpleProofs$(this.key).pipe( + catchError(() => { + this.isLoading = false; + this.error = true; + return of({}); + }), + ).subscribe((data: Record) => { + if (Object.keys(data).length) { + const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); + this.verified = Object.keys(data).map(key => ({ + ...data[key], + key, + parsed: this.parseCuboKey(key), + sanitized_download_url: data[key]['download_url']?.length ? this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL, data[key]['download_url']) ?? '') : null, + sanitized_simpleproof_url: data[key]['simpleproof_url']?.length ? this.sanitizer.bypassSecurityTrustResourceUrl(this.sanitizer.sanitize(SecurityContext.URL, data[key]['simpleproof_url']) ?? '') : null, + })).sort((a, b) => { + // smarter sorting using the specific Cubo ID format, where possible + if (a.parsed && b.parsed) { + if (a.parsed.year !== b.parsed.year) { + return b.parsed.year - a.parsed.year; + } + if (a.parsed.type !== b.parsed.type) { + return a.parsed.type.localeCompare(b.parsed.type); + } + return a.parsed.studentNumber - b.parsed.studentNumber; + } + // fallback to lexicographic sorting + if (!a.parsed && !b.parsed) { + return collator.compare(b.key, a.key); + } + return a.parsed ? -1 : 1; + }); + this.applyFilter(); + this.isLoading = false; + this.error = false; + } + }); + } + } + + parseCuboKey(key: string): { type: string; year: number; studentNumber: number } | null { + const match = key.match(/^Cubo\+([A-Za-z]*)(\d{4})-(\d+)$/); + if (!match) { + return null; + } + const [, type, yearStr, studentNumberStr] = match; + return { + type: type || '', + year: parseInt(yearStr, 10), + studentNumber: parseInt(studentNumberStr, 10) + }; + } + + applyFilter(event?: Event): void { + let searchText = ''; + if (event) { + searchText = (event.target as HTMLInputElement).value; + } + if (searchText?.length > 0) { + this.filteredVerified = this.verified.filter(item => + item.student_name.toLowerCase().includes(searchText.toLowerCase()) || item.id_code.toLowerCase().includes(searchText.toLowerCase()) + ); + } else { + this.filteredVerified = this.verified; + } + this.page = 1; + this.updatePage(); + } + + updatePage(): void { + this.verifiedPage = this.filteredVerified.slice((this.page - 1) * this.itemsPerPage, this.page * this.itemsPerPage); + } + + pageChange(page: number): void { + this.page = page; + this.updatePage(); + } +} diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss index 63e2fe046..b018e87a3 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss @@ -79,6 +79,10 @@ td.hash { } } +.id { + width: 40%; +} + .verified { width: 25%; } diff --git a/frontend/src/app/master-page.module.ts b/frontend/src/app/master-page.module.ts index 4bbf4de2b..bb8c0ac0e 100644 --- a/frontend/src/app/master-page.module.ts +++ b/frontend/src/app/master-page.module.ts @@ -15,6 +15,7 @@ import { ServerHealthComponent } from '@components/server-health/server-health.c import { ServerStatusComponent } from '@components/server-health/server-status.component'; import { FaucetComponent } from '@components/faucet/faucet.component'; import { SimpleProofWidgetComponent } from './components/simpleproof-widget/simpleproof-widget.component'; +import { SimpleProofCuboWidgetComponent } from './components/simpleproof-widget/simpleproof-cubo-widget.component'; const browserWindow = window || {}; // @ts-ignore @@ -149,6 +150,13 @@ if (window['__env']?.customize?.dashboard.widgets?.some(w => w.component ==='sim }); } +if (window['__env']?.customize?.dashboard.widgets?.some(w => w.component ==='simpleproof_cubo')) { + routes[0].children.push({ + path: 'sp/cubo', + component: SimpleProofCuboWidgetComponent, + }); +} + @NgModule({ imports: [ RouterModule.forChild(routes) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 73f595831..8c4dc21c1 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -1,5 +1,6 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; import { NgbCollapseModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faCogs, faDatabase, faExchangeAlt, faInfoCircle, @@ -8,7 +9,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faTimeline, faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen, faPaperclip, faAddressCard, - faMedal, faBug } from '@fortawesome/free-solid-svg-icons'; + faMedal, faBug, faFilePdf } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -124,6 +125,7 @@ import { BitcoinsatoshisPipe } from '@app/shared/pipes/bitcoinsatoshis.pipe'; import { HttpErrorComponent } from '@app/shared/components/http-error/http-error.component'; import { TwitterWidgetComponent } from '@components/twitter-widget/twitter-widget.component'; import { SimpleProofWidgetComponent } from '@components/simpleproof-widget/simpleproof-widget.component'; +import { SimpleProofCuboWidgetComponent } from '@components/simpleproof-widget/simpleproof-cubo-widget.component'; import { FaucetComponent } from '@components/faucet/faucet.component'; import { TwitterLogin } from '@components/twitter-login/twitter-login.component'; import { BitcoinInvoiceComponent } from '@components/bitcoin-invoice/bitcoin-invoice.component'; @@ -248,6 +250,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c HttpErrorComponent, TwitterWidgetComponent, SimpleProofWidgetComponent, + SimpleProofCuboWidgetComponent, FaucetComponent, TwitterLogin, GithubLogin, @@ -386,6 +389,7 @@ import { GithubLogin } from '../components/github-login.component/github-login.c HttpErrorComponent, TwitterWidgetComponent, SimpleProofWidgetComponent, + SimpleProofCuboWidgetComponent, TwitterLogin, GithubLogin, BitcoinInvoiceComponent, @@ -473,5 +477,6 @@ export class SharedModule { library.addIcons(faMedal); library.addIcons(faAddressCard); library.addIcons(faBug); + library.addIcons(faFilePdf); } } From 15c03b9e4d5730a7d250e616b49e7ceebc0afddb Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 21 Jun 2025 00:53:20 +0000 Subject: [PATCH 276/534] add logo to sp widget --- .../custom-dashboard.component.html | 5 ++++- .../simpleproof-cubo-widget.component.html | 5 ++++- frontend/src/resources/cubo.svg | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 frontend/src/resources/cubo.svg 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 4a50a893c..0027237eb 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -326,7 +326,10 @@
    -
    {{ widget.props?.label }}
    +
    + + {{ widget.props?.label }} +
     
    diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html index 71c7624db..0139fc41e 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html @@ -1,6 +1,9 @@
    -

    {{ label }}

    +

    + + {{ label }} +

    diff --git a/frontend/src/resources/cubo.svg b/frontend/src/resources/cubo.svg new file mode 100644 index 000000000..7e054f8a1 --- /dev/null +++ b/frontend/src/resources/cubo.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + \ No newline at end of file From cf9cc33b2b41bdc812875bdbf6d9956381413400 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 25 Jun 2025 09:32:29 +0200 Subject: [PATCH 277/534] use relative pathname for /api/v1/services/sp/verified/$key --- frontend/src/app/services/services-api.service.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 1ee4047a7..89f1fd882 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -224,6 +224,8 @@ export class ServicesApiServices { } getSimpleProofs$(key: string): Observable> { - return this.httpClient.get>(`${this.stateService.env.SERVICES_API}/sp/verified/${key}`); + // Need to use relative path here to avoid CORS errors, since this won't be used from mempool.space website + const pathname = new URL(this.stateService.env.SERVICES_API + '/sp/verified').pathname; + return this.httpClient.get>(`${pathname}/${key}`); } } From f33c84a57892ecced79a0a7e969b7180a106bef3 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 25 Jun 2025 09:01:56 +0000 Subject: [PATCH 278/534] adjust cubo search bar to align rows --- .../custom-dashboard.component.html | 2 +- .../simpleproof-cubo-widget.component.html | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) 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 0027237eb..543c8eedb 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -325,7 +325,7 @@
    +
    + +
    +
    {{ item.student_name }} @@ -51,7 +64,7 @@ } - + From 05457135028837e97cfd1736289069cf89d0973b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 26 Jun 2025 08:53:50 +0000 Subject: [PATCH 279/534] tweak chart colors --- frontend/src/app/app.constants.ts | 5 +++-- .../hashrates-chart-pools/hashrate-chart-pools.component.ts | 2 +- .../app/components/pool-ranking/pool-ranking.component.ts | 2 +- .../treasuries-graph/treasuries-graph.component.ts | 2 +- .../treasuries/treasuries-pie/treasuries-pie.component.ts | 2 +- .../src/app/components/treasuries/treasuries.component.ts | 2 +- .../nodes-per-country-chart.component.ts | 2 +- .../nodes-per-isp-chart/nodes-per-isp-chart.component.ts | 2 +- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/app.constants.ts b/frontend/src/app/app.constants.ts index 85a4d35d8..53c7b06c1 100644 --- a/frontend/src/app/app.constants.ts +++ b/frontend/src/app/app.constants.ts @@ -1,5 +1,5 @@ export const defaultMempoolFeeColors = [ - '557d00', + '497d2b', '557d00', '5d7d01', '637d02', @@ -41,7 +41,7 @@ export const defaultMempoolFeeColors = [ ]; export const contrastMempoolFeeColors = [ - '0082e6', + '007be9', '0082e6', '0984df', '1285d9', @@ -123,6 +123,7 @@ export const chartColors = [ "#263238", "#801313", ]; +export const originalChartColors = chartColors.slice(1); export const poolsColor = { 'unknown': '#FDD835', 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 f93cf460d..002fdbc07 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 @@ -5,7 +5,7 @@ import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/op 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/app.constants'; +import { originalChartColors as 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'; 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 de7f9b2e0..971fdd382 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -8,7 +8,7 @@ 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 { originalChartColors as 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'; diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 2073ecc8f..52f3d0851 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -7,7 +7,7 @@ import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { StateService } from '@app/services/state.service'; import { SeriesOption } from 'echarts'; import { WalletStats } from '@app/shared/wallet-stats'; -import { chartColors } from '@app/app.constants'; +import { originalChartColors as chartColors } from '@app/app.constants'; import { Treasury } from '../../../interfaces/node-api.interface'; diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index 6c5336502..b0daae4bb 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -6,7 +6,7 @@ import { download } from '@app/shared/graphs.utils'; import { isMobile } from '@app/shared/common.utils'; import { WalletStats } from '@app/shared/wallet-stats'; import { AddressTxSummary } from '@interfaces/electrs.interface'; -import { chartColors } from '@app/app.constants'; +import { originalChartColors as chartColors } from '@app/app.constants'; import { formatNumber } from '@angular/common'; import { Treasury } from '@interfaces/node-api.interface'; diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index ac8b6581c..bce684727 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -6,7 +6,7 @@ import { StateService } from '@app/services/state.service'; import { catchError, map, scan, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; import { WalletStats } from '@app/shared/wallet-stats'; import { Router } from '@angular/router'; -import { chartColors } from '@app/app.constants'; +import { originalChartColors as chartColors } from '@app/app.constants'; import { Treasury } from '@interfaces/node-api.interface'; @Component({ selector: 'app-treasuries', 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 986484d8a..10d8535b8 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 @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone } from import { Router } from '@angular/router'; import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { map, Observable, share, tap } from 'rxjs'; -import { chartColors } from '@app/app.constants'; +import { originalChartColors as 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'; 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 56a03a524..76f9cd6ab 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 @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone, Input import { Router } from '@angular/router'; import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { combineLatest, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs'; -import { chartColors } from '@app/app.constants'; +import { originalChartColors as 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'; From ad151fb252bebd4d8330ad728687553956822ff2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 27 Jun 2025 03:50:40 +0000 Subject: [PATCH 280/534] fix cubo mobile layout --- .../simpleproof-widget/simpleproof-widget.component.scss | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss index b018e87a3..ad0bf96dd 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss @@ -53,7 +53,7 @@ tr, td, th { } .filename { - width: 50%; + width: 35%; max-width: 300px; overflow: hidden; text-overflow: ellipsis; @@ -61,7 +61,7 @@ tr, td, th { } .hash { - width: 25%; + width: 20%; max-width: 700px; overflow: hidden; text-overflow: ellipsis; @@ -81,10 +81,12 @@ td.hash { .id { width: 40%; + overflow: hidden; + text-overflow: ellipsis; } .verified { - width: 25%; + width: 20%; } td.verified { color: var(--tertiary); @@ -92,6 +94,7 @@ td.verified { .proof { width: 25%; + padding-left: 0; } .badge-verify { From 844b64c127334942f7b029d0b7caf6f90dce215d Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 29 Jun 2025 21:25:21 +0200 Subject: [PATCH 281/534] Bump base-x from 4.0.0 to 4.0.1 in /backend Bumps [base-x](https://github.com/cryptocoinjs/base-x) from 4.0.0 to 4.0.1. - [Commits](https://github.com/cryptocoinjs/base-x/compare/v4.0.0...v4.0.1) --- updated-dependencies: - dependency-name: base-x dependency-version: 4.0.1 dependency-type: indirect ... --- backend/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index aa10a1a11..0c501b485 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -2453,9 +2453,9 @@ "dev": true }, "node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" }, "node_modules/bech32": { "version": "2.0.0", @@ -9596,9 +9596,9 @@ "dev": true }, "base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" }, "bech32": { "version": "2.0.0", From 3b92ba3c1e3b12ca4d6551f05d6a5851e76facbb Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 29 Jun 2025 21:41:00 +0200 Subject: [PATCH 282/534] bump package-lock.json version (mismatch with package.json) --- backend/package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 0c501b485..7a0b4bd08 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "mempool-backend", - "version": "3.2.0-dev", + "version": "3.3-dev", "hasInstallScript": true, "license": "GNU Affero General Public License v3.0", "dependencies": { From 4a8074422a11f82c9dcc88e51121dcad3e32e7c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Jun 2025 19:49:24 +0000 Subject: [PATCH 283/534] Bump mysql2 from 3.13.0 to 3.14.1 in /backend Bumps [mysql2](https://github.com/sidorares/node-mysql2) from 3.13.0 to 3.14.1. - [Release notes](https://github.com/sidorares/node-mysql2/releases) - [Changelog](https://github.com/sidorares/node-mysql2/blob/master/Changelog.md) - [Commits](https://github.com/sidorares/node-mysql2/compare/v3.13.0...v3.14.1) --- updated-dependencies: - dependency-name: mysql2 dependency-version: 3.14.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 17 ++++++++--------- backend/package.json | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 0c501b485..ae600a843 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "mempool-backend", - "version": "3.2.0-dev", + "version": "3.3-dev", "hasInstallScript": true, "license": "GNU Affero General Public License v3.0", "dependencies": { @@ -17,7 +17,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.13.0", + "mysql2": "~3.14.1", "redis": "^4.7.0", "rust-gbt": "file:./rust-gbt", "socks-proxy-agent": "~7.0.0", @@ -6173,10 +6173,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mysql2": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz", - "integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==", - "license": "MIT", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -12337,9 +12336,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql2": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.13.0.tgz", - "integrity": "sha512-M6DIQjTqKeqXH5HLbLMxwcK5XfXHw30u5ap6EZmu7QVmcF/gnh2wS/EOiQ4MTbXz/vQeoXrmycPlVRM00WSslg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", "requires": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", diff --git a/backend/package.json b/backend/package.json index ab24e9596..049e0c0a8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -46,7 +46,7 @@ "crypto-js": "~4.2.0", "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.13.0", + "mysql2": "~3.14.1", "rust-gbt": "file:./rust-gbt", "redis": "^4.7.0", "socks-proxy-agent": "~7.0.0", From dc4767279d06911abf6e6563eec7040f7c2a248b Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 30 Jun 2025 14:22:58 +0200 Subject: [PATCH 284/534] Fix duplicate transaction decoding in tx preview --- .../src/app/components/transaction/transaction-raw.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index d48706588..d244ff15d 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -91,7 +91,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { if (offline) { this.offlineMode = offline === 'true'; } - if (hex && this.pushTxForm.get('txRaw').value) { + if (hex && this.pushTxForm.get('txRaw').value && !this.transaction) { this.decodeTransaction(); } } From 2c10791aa8d04adc0e41f72213e558dfcb95664f Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 30 Jun 2025 14:49:48 +0200 Subject: [PATCH 285/534] Use PSBT in tx preview fragment when possible --- .../app/components/pool/pool.component.html | 2 +- .../stratum-list/stratum-list.component.html | 2 +- .../transaction/transaction-raw.component.ts | 21 +++++++++++-------- frontend/src/app/shared/transaction.utils.ts | 4 ++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index cc9e85a07..2ee25f001 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -220,7 +220,7 @@
    - + Coinbase tag   diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html index 406db5461..9fcaf64c3 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.html @@ -45,7 +45,7 @@ - + {{ row.job.height }}
    Size + + +
    Virtual size + + +
    Adjusted vsize @@ -175,7 +184,10 @@
    Weight + + +
    diff --git a/frontend/src/app/components/transaction/transaction-raw.component.scss b/frontend/src/app/components/transaction/transaction-raw.component.scss index a4b386cee..8d5402ca0 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.scss +++ b/frontend/src/app/components/transaction/transaction-raw.component.scss @@ -199,4 +199,9 @@ margin-left: 0; margin-top: 5px; } +} + +.icon-symbol { + color: rgba(255, 255, 255, 0.4); + margin-left: 5px; } \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index b3559769c..c77029530 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -1,8 +1,11 @@ import { Component, OnInit, HostListener, ViewChild, ElementRef, OnDestroy } from '@angular/core'; +import { BytesPipe } from '../../shared/pipes/bytes-pipe/bytes.pipe'; +import { VbytesPipe } from '../../shared/pipes/bytes-pipe/vbytes.pipe'; +import { WuBytesPipe } from '../../shared/pipes/bytes-pipe/wubytes.pipe'; import { Transaction, Vout } from '@interfaces/electrs.interface'; import { StateService } from '../../services/state.service'; import { Filter, toFilters } from '../../shared/filters.utils'; -import { decodeRawTransaction, getTransactionFlags, addInnerScriptsToVin, countSigops } from '../../shared/transaction.utils'; +import { decodeRawTransaction, getTransactionFlags, addInnerScriptsToVin, countSigops, fillUnsignedInput } from '../../shared/transaction.utils'; import { catchError, firstValueFrom, Subscription, switchMap, tap, throwError, timer } from 'rxjs'; import { WebsocketService } from '../../services/websocket.service'; import { ActivatedRoute, Router } from '@angular/router'; @@ -40,6 +43,12 @@ export class TransactionRawComponent implements OnInit, OnDestroy { isCoinbase: boolean; broadcastSubscription: Subscription; fragmentSubscription: Subscription; + weightFromMissingSig: number = 0; + sizeFromMissingSig: number = 0; + missingSignatures: boolean; + tooltipSize: string; + tooltipVsize: string; + tooltipWeight: string; isMobile: boolean; @ViewChild('graphContainer') @@ -71,6 +80,9 @@ export class TransactionRawComponent implements OnInit, OnDestroy { public seoService: SeoService, public apiService: ApiService, public relativeUrlPipe: RelativeUrlPipe, + public bytesPipe: BytesPipe, + public vbytesPipe: VbytesPipe, + public wuBytesPipe: WuBytesPipe, ) {} ngOnInit(): void { @@ -105,6 +117,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { try { const { tx, hex, psbt } = decodeRawTransaction(this.pushTxForm.get('txRaw').value.trim(), this.stateService.network); await this.fetchPrevouts(tx); + this.checkSignatures(tx, hex); await this.fetchCpfpInfo(tx); this.processTransaction(tx, hex, psbt); } catch (error) { @@ -157,6 +170,45 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.isLoadingPrevouts = false; } } + } + + checkSignatures(transaction: Transaction, hex: string): void { + let missingWitnessBytes = 0; + let missingNonWitnessBytes = 0; + + let isSegwitTransaction = hex.substring(8, 10) === '00' && hex.substring(10, 12) === '01'; + let segwitFlagSet = false; + + transaction.vin.forEach(vin => { + addInnerScriptsToVin(vin); + const result = fillUnsignedInput(vin); + vin['_missingSigs'] = result.missingSigs; + if (result.addToWitness) { + missingWitnessBytes += result.bytes; + } else { + missingNonWitnessBytes += result.bytes; + } + if (!isSegwitTransaction && result.addToWitness) { + segwitFlagSet = true; + isSegwitTransaction = true; + } + }); + + if (segwitFlagSet) { // we just added witness to a legacy transaction: need to add weight corresponding to segwit flag and compact sizes + missingWitnessBytes += 2; // marker and flag + missingWitnessBytes += transaction.vin.length; // 1 byte compact size per input (assume witness stack count < 253) + } + + this.sizeFromMissingSig = missingWitnessBytes + missingNonWitnessBytes; + this.weightFromMissingSig = missingWitnessBytes + 4 * missingNonWitnessBytes; + + if (this.weightFromMissingSig) { + this.tooltipSize = `Includes ${this.bytesPipe.transform(this.sizeFromMissingSig, 2, undefined, undefined, true)} added for missing signatures`; + this.tooltipVsize = `Includes ${this.vbytesPipe.transform(this.weightFromMissingSig / 4, 2, undefined, undefined, true)} added for missing signatures`; + this.tooltipWeight = `Includes ${this.wuBytesPipe.transform(this.weightFromMissingSig, 2, undefined, undefined, true)} added for missing signatures`; + } + + this.missingSignatures = transaction.vin.some(input => input['_missingSigs'] > 0); if (this.hasPrevouts) { transaction.fee = transaction.vin.some(input => input.is_coinbase) @@ -164,11 +216,16 @@ export class TransactionRawComponent implements OnInit, OnDestroy { : transaction.vin.reduce((fee, input) => { return fee + (input.prevout?.value || 0); }, 0) - transaction.vout.reduce((sum, output) => sum + output.value, 0); - transaction.feePerVsize = transaction.fee / (transaction.weight / 4); + transaction.feePerVsize = transaction.fee / ((transaction.weight + this.weightFromMissingSig) / 4); + transaction.sigops = countSigops(transaction); + this.adjustedVsize = Math.max((transaction.weight + this.weightFromMissingSig) / 4, transaction.sigops * 5); + const adjustedFeePerVsize = transaction.fee / this.adjustedVsize; + if (adjustedFeePerVsize !== transaction.feePerVsize) { + transaction.effectiveFeePerVsize = adjustedFeePerVsize; + this.cpfpInfo = { ancestors: [], effectiveFeePerVsize: adjustedFeePerVsize }; + this.hasEffectiveFeeRate = true; + } } - - transaction.vin.forEach(addInnerScriptsToVin); - transaction.sigops = countSigops(transaction); } async fetchCpfpInfo(transaction: Transaction): Promise { @@ -178,7 +235,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.isLoadingCpfpInfo = true; const cpfpInfo: CpfpInfo[] = await firstValueFrom(this.apiService.getCpfpLocalTx$([{ txid: transaction.txid, - weight: transaction.weight, + weight: transaction.weight + this.weightFromMissingSig, sigops: transaction.sigops, fee: transaction.fee, vin: transaction.vin, @@ -215,9 +272,6 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.transaction.flags = getTransactionFlags(this.transaction, this.cpfpInfo, null, null, this.stateService.network); this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; - if (this.transaction.sigops >= 0) { - this.adjustedVsize = Math.max(this.transaction.weight / 4, this.transaction.sigops * 5); - } this.setupGraph(); this.setFlowEnabled(); @@ -286,6 +340,12 @@ export class TransactionRawComponent implements OnInit, OnDestroy { this.filters = []; this.hasPrevouts = false; this.missingPrevouts = []; + this.weightFromMissingSig = 0; + this.sizeFromMissingSig = 0; + this.missingSignatures = false; + this.tooltipSize = null; + this.tooltipVsize = null; + this.tooltipWeight = null; this.stateService.markBlock$.next({}); this.mempoolBlocksSubscription?.unsubscribe(); this.broadcastSubscription?.unsubscribe(); diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 17e47fcb8..b98067238 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1,5 +1,5 @@ import { TransactionFlags } from '@app/shared/filters.utils'; -import { getVarIntLength, parseMultisigScript, isPoint } from '@app/shared/script.utils'; +import { getVarIntLength, parseMultisigScript, isPoint, parseTapscriptMultisig, parseTapscriptUnanimousMultisig } from '@app/shared/script.utils'; import { Transaction, Vin } from '@interfaces/electrs.interface'; import { CpfpInfo, RbfInfo, TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; @@ -287,12 +287,12 @@ export function processInputSignatures(vin: Vin): SigInfo[] { signatures = extractDERSignaturesWitness(vin.witness || []); break; case 'v1_p2tr': { - const hasAnnex = vin.witness.length > 1 &&vin.witness[vin.witness.length - 1].startsWith('50'); - const isKeyspend = vin.witness.length === (hasAnnex ? 2 : 1); + const hasAnnex = vin.witness?.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + const isKeyspend = vin.witness?.length === (hasAnnex ? 2 : 1); if (isKeyspend) { signatures = extractSchnorrSignatures(vin.witness); } else { - const stackItems = vin.witness.slice(0, hasAnnex ? -3 : -2); + const stackItems = vin.witness?.slice(0, hasAnnex ? -3 : -2); signatures = extractSchnorrSignatures(stackItems); } } break; @@ -303,6 +303,156 @@ export function processInputSignatures(vin: Vin): SigInfo[] { return signatures; } +/* + * returns the number of missing signatures, the number of bytes to add to the transaction + * and whether these should benefit from witness discounting + * - Add a DER sig in scriptsig/witness: 71 bytes signature + 1 push or witness size byte = 72 bytes + * - Add a public key in scriptsig/witness: 33 bytes pubkey + 1 push or witness size byte = 34 bytes + * - Add a Schnorr sig in witness: 64 bytes signature + 1 witness size byte = 65 bytes +*/ +export function fillUnsignedInput(vin: Vin): { missingSigs: number, bytes: number, addToWitness: boolean } { + let missingSigs = 0; + let bytes = 0; + let addToWitness = false; + + const addressType = vin.prevout?.scriptpubkey_type as AddressType; + let signatures: SigInfo[] = []; + let multisig: { m: number, n: number } | null = null; + switch (addressType) { + case 'p2pk': + signatures = extractDERSignaturesASM(vin.scriptsig_asm); + if (!signatures.length) { + missingSigs = 1; + bytes = 72; + } + break; + case 'multisig': + signatures = extractDERSignaturesASM(vin.scriptsig_asm); + multisig = parseMultisigScript(vin.prevout.scriptpubkey_asm); + if (multisig && multisig.m - signatures.length > 0) { + missingSigs = multisig.m - signatures.length; + bytes = 72 * missingSigs + 1; // add empty stack item required for OP_CHECKMULTISIG + const scriptsigLength = vin.scriptsig.length / 2; + const newLength = scriptsigLength + bytes; + if (scriptsigLength < 253 && newLength >= 253) { + bytes += 2; // Increase scriptsig's compact size from 1 to 3 bytes + } + } + break; + case 'p2pkh': + signatures = extractDERSignaturesASM(vin.scriptsig_asm); + if (!signatures.length) { + missingSigs = 1; + bytes = 106; // 72 + 34 (sig + public key) + } + break; + case 'p2sh': + // Check for P2SH multisig + multisig = parseMultisigScript(vin.inner_redeemscript_asm); + if (multisig) { + signatures = extractDERSignaturesASM(vin.scriptsig_asm); + if (multisig.m - signatures.length > 0) { + missingSigs = multisig.m - signatures.length; + bytes = 72 * missingSigs + 1; // empty push required for OP_CHECKMULTISIG + const scriptsigLength = vin.scriptsig.length / 2; + const newLength = scriptsigLength + bytes; + if (scriptsigLength < 253 && newLength >= 253) { + bytes += 2; // Increase scriptsig's compact size from 1 to 3 bytes + } + } + } + + // P2SH-P2WSH + if (/OP_0 OP_PUSHBYTES_32 [a-fA-F0-9]{64}/.test(vin.inner_redeemscript_asm) && vin.inner_witnessscript_asm) { + // Check for P2WSH multisig + multisig = parseMultisigScript(vin.inner_witnessscript_asm); + if (multisig) { + signatures = extractDERSignaturesWitness(vin.witness || []); + if (multisig.m - signatures.length > 0) { + missingSigs = multisig.m - signatures.length; + bytes = 72 * missingSigs + 1; // empty push required for OP_CHECKMULTISIG + addToWitness = true; + } + } + } + + // P2SH-P2WPKH + if (/OP_0 OP_PUSHBYTES_20 [a-fA-F0-9]{40}/.test(vin.inner_redeemscript_asm)) { + signatures = extractDERSignaturesWitness(vin.witness || []); + if (!signatures.length) { + missingSigs = 1; + bytes = 106; // 72 + 34 (sig + public key) + addToWitness = true; + } + } + break; + case 'v0_p2wpkh': + signatures = extractDERSignaturesWitness(vin.witness || []); + if (!signatures.length) { + missingSigs = 1; + bytes = 106; // 72 + 34 (sig + public key) + addToWitness = true; + } + break; + case 'v0_p2wsh': + signatures = extractDERSignaturesWitness(vin.witness || []); + multisig = parseMultisigScript(vin.inner_witnessscript_asm); + if (multisig) { + signatures = extractDERSignaturesWitness(vin.witness || []); + if (multisig.m - signatures.length > 0) { + missingSigs = multisig.m - signatures.length; + bytes = 72 * missingSigs + 1; // empty push required for OP_CHECKMULTISIG + addToWitness = true; + } + } + break; + case 'v1_p2tr': + const hasAnnex = vin.witness?.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + if (vin.inner_witnessscript_asm) { + const stackItems = vin.witness.slice(0, hasAnnex ? -3 : -2); + if (/^OP_PUSHBYTES_32 [a-fA-F0-9]{64} OP_CHECKSIG$/.test(vin.inner_witnessscript_asm)) { + signatures = extractSchnorrSignatures(stackItems); + if (!signatures.length) { + missingSigs = 1; + bytes = 65; + addToWitness = true; + } + } + + multisig = parseTapscriptMultisig(vin.inner_witnessscript_asm); + if (multisig) { + signatures = extractSchnorrSignatures(stackItems); + if (multisig.m - signatures.length > 0) { + missingSigs = multisig.m - signatures.length; + bytes = 65 * missingSigs + (multisig.n - multisig.m); // empty witness items for each non-signing keys + addToWitness = true; + } + } + + let unanimousMultisig = parseTapscriptUnanimousMultisig(vin.inner_witnessscript_asm); + if (unanimousMultisig) { + signatures = extractSchnorrSignatures(stackItems); + if (unanimousMultisig - signatures.length > 0) { + missingSigs = unanimousMultisig - signatures.length; + bytes = 65 * missingSigs; + addToWitness = true; + } + } + } else { // Assume keyspend + signatures = extractSchnorrSignatures(vin.witness?.slice(0, hasAnnex ? -1 : undefined) || []); + if (!signatures.length) { + missingSigs = 1; + bytes = 65; + addToWitness = true; + } + } + break; + default: + break; + } + return { missingSigs, bytes, addToWitness }; +} + /** * Validates most standardness rules * From eab594432575125a77dadda8c0b9542647541d74 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 10 Jul 2025 08:41:21 +0000 Subject: [PATCH 294/534] standardize ephemeral dust --- backend/src/api/common.ts | 22 ++++++++++++++++++- .../components/tracker/tracker.component.ts | 2 +- .../transaction/transaction-raw.component.ts | 2 +- .../transaction/transaction.component.ts | 2 +- frontend/src/app/shared/transaction.utils.ts | 22 ++++++++++++++++++- 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 80542edb4..dbbb11583 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -328,7 +328,7 @@ export class Common { } if (vout.value < (dustSize * DUST_RELAY_TX_FEE)) { // under minimum output size - return true; + return !Common.isStandardEphemeralDust(tx, height); } } } @@ -407,6 +407,26 @@ export class Common { return false; } + // Ephemeral dust is a new concept that allows a single dust output in a transaction, provided the transaction is zero fee + static EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 90_500, + 'testnet': 4_550_000, + 'signet': 260_000, + '': 905_000, + }; + static isStandardEphemeralDust(tx: TransactionExtended, height?: number): boolean { + if ( + tx.fee === 0 + && (height == null || ( + this.EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + && height >= this.EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + )) + ) { + return true; + } + return false; + } + static getNonWitnessSize(tx: TransactionExtended): number { let weight = tx.weight; let hasWitness = false; diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 857d6444c..3c5cebdbc 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -750,7 +750,7 @@ export class TrackerComponent implements OnInit, OnDestroy { checkAccelerationEligibility() { if (this.tx) { - this.tx.flags = getTransactionFlags(this.tx, null, null, this.tx.status?.block_time, this.stateService.network); + this.tx.flags = getTransactionFlags(this.tx, null, null, this.tx.status?.block_height || (this.stateService.latestBlockHeight + 1), 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/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index d48706588..7ca607749 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -211,7 +211,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { replaceUrl: true }); - this.transaction.flags = getTransactionFlags(this.transaction, this.cpfpInfo, null, null, this.stateService.network); + this.transaction.flags = getTransactionFlags(this.transaction, this.cpfpInfo, null, this.transaction.status?.block_height || (this.stateService.latestBlockHeight + 1), this.stateService.network); this.filters = this.transaction.flags ? toFilters(this.transaction.flags).filter(f => f.txPage) : []; if (this.transaction.sigops >= 0) { this.adjustedVsize = Math.max(this.transaction.weight / 4, this.transaction.sigops * 5); diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 423c86530..e70cb673a 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -930,7 +930,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, null, null, this.tx.status?.block_time, this.stateService.network); + this.tx.flags = getTransactionFlags(this.tx, null, null, this.tx.status?.block_height || (this.stateService.latestBlockHeight + 1), this.stateService.network); this.filters = this.tx.flags ? toFilters(this.tx.flags).filter(f => f.txPage) : []; this.checkAccelerationEligibility(); } else { diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 615b9cc89..7ed5ffe63 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -437,7 +437,7 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string } if (vout.value < (dustSize * DUST_RELAY_TX_FEE)) { // under minimum output size - return true; + return !isStandardEphemeralDust(tx, height, network); } } } @@ -497,6 +497,26 @@ function isNonStandardAnchor(tx: Transaction, height?: number, network?: string) return false; } +// Ephemeral dust is a new concept that allows a single dust output in a transaction, provided the transaction is zero fee +const EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 90_500, + 'testnet': 4_550_000, + 'signet': 260_000, + '': 905_000, +}; +function isStandardEphemeralDust(tx: Transaction, height?: number, network?: string): boolean { + if ( + tx.fee === 0 + && (height == null || ( + EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT[network] + && height >= EPHEMERAL_DUST_STANDARDNESS_ACTIVATION_HEIGHT[network] + )) + ) { + return true; + } + return false; +} + // A witness program is any valid scriptpubkey that consists of a 1-byte push opcode // followed by a data push between 2 and 40 bytes. // https://github.com/bitcoin/bitcoin/blob/2c79abc7ad4850e9e3ba32a04c530155cda7f980/src/script/script.cpp#L224-L240 From f88527bff81b25ef56917366a555b2a5fa8641db Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 12 Jul 2025 03:58:09 +0000 Subject: [PATCH 295/534] handle sub-1-sat-vb in audits --- backend/src/api/audit.ts | 2 +- frontend/src/app/components/block/block.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/api/audit.ts b/backend/src/api/audit.ts index e09234cdc..7b90c516e 100644 --- a/backend/src/api/audit.ts +++ b/backend/src/api/audit.ts @@ -55,7 +55,7 @@ class Audit { } else if (mempool[txid]?.lastBoosted != null && (now - (mempool[txid]?.lastBoosted || 0)) <= PROPAGATION_MARGIN) { // tx was recently cpfp'd, miner may not have the latest effective rate fresh.push(txid); - } else { + } else if (mempool[txid].effectiveFeePerVsize >= 1) { // transactions paying < 1 sat/vbyte are never considered censored isCensored[txid] = true; } displacedWeight += mempool[txid]?.weight || 0; diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index ddcf023ed..779739ddc 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -600,7 +600,7 @@ export class BlockComponent implements OnInit, OnDestroy { // set transaction statuses for (const tx of blockAudit.template) { tx.context = 'projected'; - if (isCensored[tx.txid]) { + if (isCensored[tx.txid] && tx.rate >= 1) { tx.status = 'censored'; } else if (inBlock[tx.txid]) { tx.status = 'found'; From 65d34b35e54d2aad3793459664fa7e4d76f12624 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 12 Jul 2025 04:15:58 +0000 Subject: [PATCH 296/534] fix frontend goggles annex detection --- frontend/src/app/shared/transaction.utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 615b9cc89..c511d6802 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -634,8 +634,8 @@ export function getTransactionFlags(tx: Transaction, cpfpInfo?: CpfpInfo, replac // created before taproot activation don't need to have any witness data // (see https://mempool.space/tx/b10c007c60e14f9d087e0291d4d0c7869697c6681d979c6639dbd960792b4d41) if (vin.witness?.length) { - // in taproot, if the last witness item begins with 0x50, it's an annex - const hasAnnex = vin.witness?.[vin.witness.length - 1].startsWith('50'); + // in taproot, if there are at least two witness elements, and the first byte of the last element is 0x50, that last element is an annex + const hasAnnex = vin.witness?.length > 1 && vin.witness?.[vin.witness.length - 1].startsWith('50'); // script spends have more than one witness item, not counting the annex (if present) if (vin.witness.length > (hasAnnex ? 2 : 1)) { // the script itself is the second-to-last witness item, not counting the annex From 7b9c89bda057a5c857cf111f406be4e5323bad8b Mon Sep 17 00:00:00 2001 From: adambor Date: Sat, 12 Jul 2025 11:14:41 +0200 Subject: [PATCH 297/534] Add adambor to contributors --- contributors/adambor.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 contributors/adambor.txt diff --git a/contributors/adambor.txt b/contributors/adambor.txt new file mode 100644 index 000000000..14c78ea9c --- /dev/null +++ b/contributors/adambor.txt @@ -0,0 +1,3 @@ +I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of July 12, 2025. + +Signed: adambor From 3d5c7bf21f9b9faf7e20798faf424e3f968c4ec7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 14 Jul 2025 10:30:10 +0000 Subject: [PATCH 298/534] cubo widget tweaks --- .../custom-dashboard.component.html | 1 + .../simpleproof-cubo-widget.component.html | 59 +++++++++++++----- .../simpleproof-cubo-widget.component.ts | 62 +++++++++++++++++++ .../simpleproof-widget.component.scss | 56 +++++++++++++++-- 4 files changed, 158 insertions(+), 20 deletions(-) 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 543c8eedb..02c860cae 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -334,6 +334,7 @@ + diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html index dc82e7215..fd16910b5 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html @@ -29,10 +29,22 @@ i18n-placeholder="simpleproof.search_placeholder" > - +
    - - + + @@ -50,19 +62,34 @@ - - + @if (widget) { + + } @else { + + + } `; + } else if (node.value?.script?.type === 'inner_simplicityscript') { + const hex = node.value.script.hex.slice(0, 300); + asmContent = ` +
    +
    + `; } let hiddenScriptsMessage = ''; 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 9925d5bd8..98b4465ea 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -233,20 +233,34 @@ - - - - - + @if (isLiquid && vin.inner_simplicityscript) { + + + } @else { + + + + + + } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index b7d6eb5aa..6ce827c17 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -28,6 +28,7 @@ import { SighashFlag } from '../../shared/transaction.utils'; export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { network = ''; nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId; + isLiquid = this.stateService.network === 'liquid' || this.stateService.network === 'liquidtestnet'; showMoreIncrement = 1000; @Input() transactions: Transaction[]; @@ -93,7 +94,10 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { ngOnInit(): void { this.latestBlock$ = this.stateService.blocks$.pipe(map((blocks) => blocks[0])); - this.networkSubscription = this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.networkSubscription = this.stateService.networkChanged$.subscribe((network) => { + this.network = network; + this.isLiquid = network === 'liquid' || network === 'liquidtestnet'; + }); this.signaturesSubscription = this.stateService.signaturesMode$.subscribe((mode) => { this.signaturesPreference = mode; @@ -331,6 +335,21 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { } } tx['_showSignatures'] = this.shouldShowSignatures(tx); + } else { // check for simplicity script spends + for (const vin of tx.vin) { + if (vin.prevout.scriptpubkey_type === 'v1_p2tr' && vin.inner_witnessscript_asm) { + const hasAnnex = vin.witness?.[vin.witness.length - 1].startsWith('50'); + // script spend + if (vin.witness.length > (hasAnnex ? 2 : 1)) { + const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; + const script = vin.witness[vin.witness.length - (hasAnnex ? 3 : 2)]; + // simplicity tapleaf version + if (controlBlock.startsWith('be') || controlBlock.startsWith('bf')) { + vin.inner_simplicityscript = script; + } + } + } + } } tx.largeInput = tx.largeInput || tx.vin.some(vin => (vin?.prevout?.value > 1000000000)); diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index aa2a05a2f..04fa0e21d 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -78,6 +78,8 @@ export interface Vin { lazy?: boolean; // Ord isInscription?: boolean; + // temporary field for extracted raw simplicity scripts + inner_simplicityscript?: string; } interface Issuance { diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index bc8e12981..6a53b8578 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -162,7 +162,15 @@ export class AddressTypeInfo { const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; - this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); + + if ((this.network === 'liquid' || this.network === 'liquidtestnet') + && (controlBlock.startsWith('be') || controlBlock.startsWith('bf')) + ) { + v.inner_simplicityscript = scriptHex; + this.processScript(new ScriptInfo('inner_simplicityscript', scriptHex, null, v.witness, controlBlock, vinIds?.[i])); + } else { + this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); + } } } // for single-script types, if we've seen one input we've seen them all diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index 85a2fe5ba..dcd81b899 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -152,6 +152,7 @@ export type ScriptType = 'scriptpubkey' | 'scriptsig' | 'inner_witnessscript' | 'inner_redeemscript' + | 'inner_simplicityscript' export interface ScriptTemplate { type: string; From 4a9eebe59e31eab9169570d90964dd10990ae3ac Mon Sep 17 00:00:00 2001 From: mononaut <83316221+mononaut@users.noreply.github.com> Date: Thu, 24 Jul 2025 06:55:54 +0000 Subject: [PATCH 321/534] add missing optional chaining Co-authored-by: natsoni <46578910+natsoni@users.noreply.github.com> --- .../components/transactions-list/transactions-list.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 6ce827c17..9c6ac5ca7 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -337,7 +337,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { tx['_showSignatures'] = this.shouldShowSignatures(tx); } else { // check for simplicity script spends for (const vin of tx.vin) { - if (vin.prevout.scriptpubkey_type === 'v1_p2tr' && vin.inner_witnessscript_asm) { + if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.inner_witnessscript_asm) { const hasAnnex = vin.witness?.[vin.witness.length - 1].startsWith('50'); // script spend if (vin.witness.length > (hasAnnex ? 2 : 1)) { From 6abf90855c8b34a463344622e986db47267a0076 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 24 Jul 2025 08:11:41 +0000 Subject: [PATCH 322/534] refactor simplicity tapleaf detection --- .../taproot-address-scripts.component.ts | 2 +- .../transactions-list.component.html | 2 +- .../transactions-list.component.ts | 17 +++++++++-------- frontend/src/app/shared/address-utils.ts | 18 ++++++++++-------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index cbe02d0f5..8407347ee 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -320,7 +320,7 @@ export class TaprootAddressScriptsComponent implements OnChanges { const hex = node.value.script.hex.slice(0, 300); asmContent = `
    -
    + `; } 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 98b4465ea..70c559c33 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -234,7 +234,7 @@ @if (isLiquid && vin.inner_simplicityscript) { - + - + + + + - diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 65b0c64d2..fce33b0dd 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -689,13 +689,13 @@ export class BlockComponent implements OnInit, OnDestroy { this.staleStats.totalWeight = Math.min(this.staleStats.totalWeight, 4_000_000); this.canonicalStats.totalWeight = Math.min(this.canonicalStats.totalWeight, 4_000_000); - this.staleStats.feeDelta = this.staleStats.totalFees > 0 ? (this.staleStats.totalFees - this.canonicalStats.totalFees) / this.staleStats.totalFees : 0; - this.staleStats.weightDelta = this.staleStats.totalWeight > 0 ? (this.staleStats.totalWeight - this.canonicalStats.totalWeight) / this.staleStats.totalWeight : 0; - this.staleStats.txDelta = this.staleStats.txCount > 0 ? (this.staleStats.txCount - this.canonicalStats.txCount) / this.staleStats.txCount : 0; + this.staleStats.feeDelta = this.canonicalStats.totalFees > 0 ? (this.staleStats.totalFees - this.canonicalStats.totalFees) / this.canonicalStats.totalFees : (this.canonicalStats.totalFees > 0 ? Infinity : -Infinity); + this.staleStats.weightDelta = this.canonicalStats.totalWeight > 0 ? (this.staleStats.totalWeight - this.canonicalStats.totalWeight) / this.canonicalStats.totalWeight : (this.canonicalStats.totalWeight > 0 ? Infinity : -Infinity); + this.staleStats.txDelta = this.canonicalStats.txCount > 0 ? (this.staleStats.txCount - this.canonicalStats.txCount) / this.canonicalStats.txCount : (this.canonicalStats.txCount > 0 ? Infinity : -Infinity); - this.canonicalStats.feeDelta = this.canonicalStats.totalFees > 0 ? (this.canonicalStats.totalFees - this.staleStats.totalFees) / this.canonicalStats.totalFees : 0; - this.canonicalStats.weightDelta = this.canonicalStats.totalWeight > 0 ? (this.canonicalStats.totalWeight - this.staleStats.totalWeight) / this.canonicalStats.totalWeight : 0; - this.canonicalStats.txDelta = this.canonicalStats.txCount > 0 ? (this.canonicalStats.txCount - this.staleStats.txCount) / this.canonicalStats.txCount : 0; + this.canonicalStats.feeDelta = this.staleStats.totalFees > 0 ? (this.canonicalStats.totalFees - this.staleStats.totalFees) / this.staleStats.totalFees : (this.staleStats.totalFees > 0 ? Infinity : -Infinity); + this.canonicalStats.weightDelta = this.staleStats.totalWeight > 0 ? (this.canonicalStats.totalWeight - this.staleStats.totalWeight) / this.staleStats.totalWeight : (this.staleStats.totalWeight > 0 ? Infinity : -Infinity); + this.canonicalStats.txDelta = this.staleStats.txCount > 0 ? (this.canonicalStats.txCount - this.staleStats.txCount) / this.staleStats.txCount : (this.staleStats.txCount > 0 ? Infinity : -Infinity); } setupBlockAudit(): void { From c67e7a92f35db8c28be47ba57ca691a0b1b9594b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 14 Oct 2025 05:13:03 +0000 Subject: [PATCH 440/534] fix block first seen time extraction --- backend/src/utils/file-read.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/src/utils/file-read.ts b/backend/src/utils/file-read.ts index ddf8660c4..11fa26ae2 100644 --- a/backend/src/utils/file-read.ts +++ b/backend/src/utils/file-read.ts @@ -24,7 +24,7 @@ function extractDateFromLogLine(line: string): number | undefined { const dateStr = dateMatch[0]; const date = new Date(dateStr); - let timestamp = Math.floor(date.getTime() / 1000); // Remove decimal (microseconds are added later) + const timestamp = Math.floor(date.getTime() / 1000); // Remove decimal (microseconds are added later) const timePart = dateStr.split('T')[1]; const microseconds = timePart.split('.')[1] || ''; @@ -41,14 +41,18 @@ export function getRecentFirstSeen(hash: string): number | undefined { if (debugLogPath) { try { // Read the last few lines of debug.log - const lines = readFile(debugLogPath, 2048); + const lines = readFile(debugLogPath, 4096).reverse(); - for (let i = lines.length - 1; i >= 0; i--) { - const line = lines[i]; - if (line && line.includes(`Saw new header hash=${hash}`)) { + let bestMatch: number | undefined; + for (const line of lines) { + if (line.includes(`Saw new header hash=${hash}`) || line.includes(`Saw new cmpctblock header hash=${hash}`)) { return extractDateFromLogLine(line); + } else if (line.includes(`UpdateTip: new best=${hash}`)) { + bestMatch = extractDateFromLogLine(line); } } + + return bestMatch; } catch (e) { logger.err(`Cannot parse block first seen time from Core logs. Reason: ` + (e instanceof Error ? e.message : e)); } From e358c90fc90257bad52688ffb66d4232c06a6d26 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 14 Oct 2025 10:34:13 +0200 Subject: [PATCH 441/534] Don't show overpaid fee rating in sub-sat blocks --- .../app/components/tx-fee-rating/tx-fee-rating.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts index 5eec72800..10ade165e 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts @@ -58,8 +58,8 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy { const feePervByte = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4); this.medianFeeNeeded = block?.extras?.medianFee; - // Block not filled - if (block.weight < this.stateService.env.BLOCK_WEIGHT_UNITS * 0.95) { + // Block not filled or sub-sat median fee + if (block.weight < this.stateService.env.BLOCK_WEIGHT_UNITS * 0.95 || this.medianFeeNeeded < 1) { this.medianFeeNeeded = 1; } From 14c632b40e0746c71ecd7c896956e6ba5552b69f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 14 Oct 2025 09:35:05 +0000 Subject: [PATCH 442/534] limit stale block indexing queue size --- backend/src/api/chain-tips.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 1400ebfa4..37bd07cae 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -33,9 +33,10 @@ class ChainTips { private blockCache: { [hash: string]: OrphanedBlock } = {}; private orphansByHeight: { [height: number]: OrphanedBlock[] } = {}; private indexingOrphanedBlocks = false; - private indexingQueue: { block: IEsploraApi.Block, tip: OrphanedBlock }[] = []; + private indexingQueue: { blockhash?: string, block?: IEsploraApi.Block, tip: OrphanedBlock }[] = []; private staleTipsCacheSize = 50; + private maxIndexingQueueSize = 100; public async updateOrphanedBlocks(): Promise { try { @@ -63,7 +64,12 @@ class ChainTips { prevhash: block.previousblockhash, }; this.blockCache[hash] = orphan; - this.indexingQueue.push({ block, tip: orphan }); + if (this.indexingQueue.length < this.maxIndexingQueueSize) { + this.indexingQueue.push({ block, tip: orphan }); + } else { + // re-fetch blocks lazily if the queue is big to keep memory usage sane + this.indexingQueue.push({ blockhash: hash, tip: orphan }); + } } } if (orphan) { @@ -114,8 +120,14 @@ class ChainTips { } this.indexingOrphanedBlocks = true; while (this.indexingQueue.length > 0) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const { block, tip } = this.indexingQueue.shift()!; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, prefer-const + let { blockhash, block, tip } = this.indexingQueue.shift()!; + if (!block && !blockhash) { + continue; + } + if (blockhash && !block) { + block = await bitcoinCoreApi.$getBlock(blockhash); + } if (!block) { continue; } From 98b21fd72a35fbce1e05c4dddde115ddbcdb6d9f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 16 Oct 2025 09:15:48 +0000 Subject: [PATCH 443/534] hotfix difficulty adjustment bug --- backend/src/api/blocks.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 702485d8b..075389196 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -974,6 +974,7 @@ class Blocks { await this.updateQuarterEpochBlockTime(); } else { this.currentBlockHeight++; + await this.updateQuarterEpochBlockTime(); logger.debug(`New block found (#${this.currentBlockHeight})!`); } From 8f38233dd70a89d29b54c50fc13a2dcf0300ce9f Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Fri, 17 Oct 2025 22:27:00 -0700 Subject: [PATCH 444/534] Tag only release Docker builds as latest --- .github/workflows/on-tag.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 18da775b3..cbebb2cb4 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -117,10 +117,10 @@ jobs: tag-latest: needs: build - if: ${{ needs.build.result == 'success' }} + if: ${{ needs.build.result == 'success' && !contains(github.ref_name, '-') }} runs-on: ubuntu-latest timeout-minutes: 30 - name: Tag images as latest + name: Tag release build as latest strategy: matrix: service: @@ -145,8 +145,8 @@ jobs: - name: Login to Docker Hub run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - - name: Tag multi-arch image as latest for ${{ matrix.service }} + - name: Tag as latest for ${{ matrix.service }} run: | docker buildx imagetools create \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ - ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ No newline at end of file + ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG From 5555a08aa53fe81883890a0b9e73aed0eacd6a5d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 19 Oct 2025 09:42:35 +0000 Subject: [PATCH 445/534] fix chain validation with partial block index --- backend/src/repositories/BlocksRepository.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 445bb147f..922f96ada 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -681,7 +681,16 @@ class BlocksRepository { // iterate back to genesis, resetting canonical status where necessary let hash = tip; const tipHeight = blocksByHash[hash].height || (await bitcoinApi.$getBlock(hash))?.height; - for (let height = tipHeight; height > 0; height--) { + + // stop at the last canonical block we're supposed to have indexed already + let lastIndexedBlockHeight = minHeight; + const indexedBlockAmount = Math.min(config.MEMPOOL.INDEXING_BLOCKS_AMOUNT, tipHeight); + if (indexedBlockAmount > 0) { + lastIndexedBlockHeight = Math.max(0, tipHeight - indexedBlockAmount + 1); + } + + + for (let height = tipHeight; height > lastIndexedBlockHeight; height--) { const block = blocksByHash[hash]; if (!block) { // block hasn't been indexed From 01c903c2f2a7bec2bee4560fa6c1899f490f6007 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 19 Oct 2025 09:57:27 +0000 Subject: [PATCH 446/534] limit stale block index by INDEXING_BLOCKS_AMOUNT --- backend/src/api/chain-tips.ts | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 37bd07cae..28fb0dd80 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -1,7 +1,8 @@ +import config from '../config'; import logger from '../logger'; import { BlockExtended } from '../mempool.interfaces'; import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository'; -import { bitcoinCoreApi } from './bitcoin/bitcoin-api-factory'; +import bitcoinApi, { bitcoinCoreApi } from './bitcoin/bitcoin-api-factory'; import bitcoinClient from './bitcoin/bitcoin-client'; import { IEsploraApi } from './bitcoin/esplora-api.interface'; import blocks from './blocks'; @@ -42,6 +43,13 @@ class ChainTips { try { this.chainTips = await bitcoinClient.getChainTips(); + const activeTipHeight = this.chainTips.find(tip => tip.status === 'active')?.height || (await bitcoinApi.$getBlockHeightTip()); + let minIndexHeight = 0; + const indexedBlockAmount = Math.min(config.MEMPOOL.INDEXING_BLOCKS_AMOUNT, activeTipHeight); + if (indexedBlockAmount > 0) { + minIndexHeight = Math.max(0, activeTipHeight - indexedBlockAmount + 1); + } + const start = Date.now(); const breakAt = start + 10000; let newOrphans = 0; @@ -64,11 +72,14 @@ class ChainTips { prevhash: block.previousblockhash, }; this.blockCache[hash] = orphan; - if (this.indexingQueue.length < this.maxIndexingQueueSize) { - this.indexingQueue.push({ block, tip: orphan }); - } else { - // re-fetch blocks lazily if the queue is big to keep memory usage sane - this.indexingQueue.push({ blockhash: hash, tip: orphan }); + // don't index stale blocks below the INDEXING_BLOCKS_AMOUNT cutoff + if (block.height >= minIndexHeight) { + if (this.indexingQueue.length < this.maxIndexingQueueSize) { + this.indexingQueue.push({ block, tip: orphan }); + } else { + // re-fetch blocks lazily if the queue is big to keep memory usage sane + this.indexingQueue.push({ blockhash: hash, tip: orphan }); + } } } } From 7d91f6be664a5f28b5b754b5447906a6338a8726 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Oct 2025 09:38:28 +0000 Subject: [PATCH 447/534] don't fetch stale block data from outdated cache --- backend/src/api/blocks.ts | 10 ++++++---- backend/src/api/chain-tips.ts | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 075389196..d33e8fda6 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1272,11 +1272,13 @@ class Blocks { /** * Get one block by its hash */ - public async $getBlock(hash: string): Promise { + public async $getBlock(hash: string, skipMemoryCache: boolean = false): Promise { // Check the memory cache - const blockByHash = this.getBlocks().find((b) => b.id === hash); - if (blockByHash) { - return blockByHash; + if (!skipMemoryCache) { + const blockByHash = this.getBlocks().find((b) => b.id === hash); + if (blockByHash) { + return blockByHash; + } } // Not Bitcoin network, return the block as it from the bitcoin backend diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 28fb0dd80..5e2795096 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -152,7 +152,7 @@ class ChainTips { // don't DDOS core by indexing too fast await Common.sleep$(5000); } else if (needToCache) { - staleBlock = await blocks.$getBlock(block.id) as BlockExtended; + staleBlock = await blocks.$getBlock(block.id, true) as BlockExtended; } if (staleBlock && needToCache) { From 11e0c22eb1fb330f3066fc6ac904236b6f042a0d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 22 Oct 2025 09:41:49 +0000 Subject: [PATCH 448/534] Update cached blocks with new stale data --- backend/src/api/chain-tips.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 5e2795096..b42a83c7e 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -81,6 +81,16 @@ class ChainTips { this.indexingQueue.push({ blockhash: hash, tip: orphan }); } } + // make sure the cached canonical block at this height is correct & up to date + if (block.height >= (activeTipHeight - (config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4))) { + const cachedBlocks = blocks.getBlocks(); + for (const cachedBlock of cachedBlocks) { + if (cachedBlock.height === block.height) { + // ensure this stale block is included in the orphans list + cachedBlock.extras.orphans = Array.from(new Set([...(cachedBlock.extras.orphans || []), orphan])); + } + } + } } } if (orphan) { From eb44bebc2737b0a35a8b45394aa24548611fc919 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:19:39 +0000 Subject: [PATCH 449/534] Bump dtolnay/rust-toolchain Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a to 6d653acede28d24f02e3cd41383119e8b1b35921. - [Release notes](https://github.com/dtolnay/rust-toolchain/releases) - [Commits](https://github.com/dtolnay/rust-toolchain/compare/d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a...6d653acede28d24f02e3cd41383119e8b1b35921) --- updated-dependencies: - dependency-name: dtolnay/rust-toolchain dependency-version: 6d653acede28d24f02e3cd41383119e8b1b35921 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3118ecec..bd6611652 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -63,7 +63,7 @@ jobs: - name: Install ${{ steps.gettoolchain.outputs.toolchain }} Rust toolchain # Latest version available on this commit is 1.71.1 # Commit date is Aug 3, 2023 - uses: dtolnay/rust-toolchain@d8352f6b1d2e870bc5716e7a6d9b65c4cc244a1a + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 with: toolchain: ${{ steps.gettoolchain.outputs.toolchain }} From b2e3729c39be6dcd6f391d203ef5854e7409b790 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 29 Oct 2025 08:50:51 +0000 Subject: [PATCH 450/534] Add support for subsat & fractional fee recommendations --- backend/src/api/bitcoin/bitcoin.routes.ts | 11 +++++ backend/src/api/fee-api.ts | 56 +++++++++++++++-------- backend/src/config.ts | 2 + 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index bdc4445f9..e6075ffa2 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -36,6 +36,7 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'cpfp/:txId', this.$getCpfpInfo) .get(config.MEMPOOL.API_URL_PREFIX + 'difficulty-adjustment', this.getDifficultyChange) .get(config.MEMPOOL.API_URL_PREFIX + 'fees/recommended', this.getRecommendedFees) + .get(config.MEMPOOL.API_URL_PREFIX + 'fees/precise', this.getPreciseRecommendedFees) .get(config.MEMPOOL.API_URL_PREFIX + 'fees/mempool-blocks', this.getMempoolBlocks) .get(config.MEMPOOL.API_URL_PREFIX + 'backend-info', this.getBackendInfo) .get(config.MEMPOOL.API_URL_PREFIX + 'init-data', this.getInitData) @@ -122,6 +123,16 @@ class BitcoinRoutes { res.json(result); } + private getPreciseRecommendedFees(req: Request, res: Response) { + if (!mempool.isInSync()) { + res.statusCode = 503; + res.send('Service Unavailable'); + return; + } + const result = feeApi.getPreciseRecommendedFee(); + res.json(result); + } + private getMempoolBlocks(req: Request, res: Response) { try { const result = mempoolBlocks.getMempoolBlocks(); diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 8efb8f605..12b56595e 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -17,7 +17,7 @@ interface RecommendedFees { class FeeApi { constructor() { } - defaultFee = isLiquid ? 0.1 : 1; + defaultFee = isLiquid ? 0.1 : config.MEMPOOL.MIN_RECOMMENDED_FEE; minimumIncrement = isLiquid ? 0.1 : 1; public getRecommendedFee(): RecommendedFees { @@ -27,24 +27,36 @@ class FeeApi { return this.calculateRecommendedFee(pBlocks, mPool); } - public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo): RecommendedFees { - const minimumFee = this.roundUpToNearest(mPool.mempoolminfee * 100000, this.minimumIncrement); - const defaultMinFee = Math.max(minimumFee, this.defaultFee); + public getPreciseRecommendedFee(): RecommendedFees { + const pBlocks = projectedBlocks.getMempoolBlocks(); + const mPool = mempool.getMempoolInfo(); + + // minimum non-zero minrelaytxfee / incrementalrelayfee is 1 sat/kvB = 0.001 sat/vB + return this.calculateRecommendedFee(pBlocks, mPool, 0.001); + } + + public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minIncrement: number = this.minimumIncrement): RecommendedFees { + const purgeRate = this.roundUpToNearest(mPool.mempoolminfee * 100000, minIncrement); + const minimumFee = Math.max(purgeRate, config.MEMPOOL.MIN_RECOMMENDED_FEE, minIncrement); if (!pBlocks.length) { return { - 'fastestFee': defaultMinFee, - 'halfHourFee': defaultMinFee, - 'hourFee': defaultMinFee, + 'fastestFee': minimumFee, + 'halfHourFee': minimumFee, + 'hourFee': minimumFee, 'economyFee': minimumFee, 'minimumFee': minimumFee, }; } - const firstMedianFee = this.optimizeMedianFee(pBlocks[0], pBlocks[1]); - const secondMedianFee = pBlocks[1] ? this.optimizeMedianFee(pBlocks[1], pBlocks[2], firstMedianFee) : this.defaultFee; - const thirdMedianFee = pBlocks[2] ? this.optimizeMedianFee(pBlocks[2], pBlocks[3], secondMedianFee) : this.defaultFee; + const firstMedianFee = this.optimizeMedianFee(pBlocks[0], pBlocks[1], undefined, minimumFee, minIncrement); + const secondMedianFee = pBlocks[1] ? this.optimizeMedianFee(pBlocks[1], pBlocks[2], firstMedianFee, minimumFee, minIncrement) : minimumFee; + const thirdMedianFee = pBlocks[2] ? this.optimizeMedianFee(pBlocks[2], pBlocks[3], secondMedianFee, minimumFee, minIncrement) : minimumFee; + // explicitly enforce a minimum of ceil(mempoolminfee) on all recommendations. + // simply rounding up recommended rates is insufficient, as the purging rate + // can exceed the median rate of projected blocks in some extreme scenarios + // (see https://bitcoin.stackexchange.com/a/120024) let fastestFee = Math.max(minimumFee, firstMedianFee); let halfHourFee = Math.max(minimumFee, secondMedianFee); let hourFee = Math.max(minimumFee, thirdMedianFee); @@ -55,10 +67,6 @@ class FeeApi { halfHourFee = Math.max(halfHourFee, hourFee, economyFee); hourFee = Math.max(hourFee, economyFee); - // explicitly enforce a minimum of ceil(mempoolminfee) on all recommendations. - // simply rounding up recommended rates is insufficient, as the purging rate - // can exceed the median rate of projected blocks in some extreme scenarios - // (see https://bitcoin.stackexchange.com/a/120024) return { 'fastestFee': fastestFee, 'halfHourFee': halfHourFee, @@ -68,20 +76,30 @@ class FeeApi { }; } - private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number): number { + private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number, minFee: number = this.defaultFee, minIncrement: number = this.minimumIncrement): number { const useFee = previousFee ? (pBlock.medianFee + previousFee) / 2 : pBlock.medianFee; if (pBlock.blockVSize <= 500000 || pBlock.medianFee < 1) { - return this.defaultFee; + return minFee; } if (pBlock.blockVSize <= 950000 && !nextBlock) { const multiplier = (pBlock.blockVSize - 500000) / 500000; - return Math.max(Math.round(useFee * multiplier), this.defaultFee); + return Math.max(this.roundToNearest(useFee * multiplier, minIncrement), minFee); } - return this.roundUpToNearest(useFee, this.minimumIncrement); + return Math.max(this.roundUpToNearest(useFee, minIncrement), minFee); } private roundUpToNearest(value: number, nearest: number): number { - return Math.ceil(value / nearest) * nearest; + if (nearest !== 0) { + return Math.ceil(value / nearest) * nearest; + } + return value; + } + + private roundToNearest(value: number, nearest: number): number { + if (nearest !== 0) { + return Math.round(value / nearest) * nearest; + } + return value; } } diff --git a/backend/src/config.ts b/backend/src/config.ts index 3fe3db2ee..f3260e788 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -43,6 +43,7 @@ interface IConfig { ALLOW_UNREACHABLE: boolean; PRICE_UPDATES_PER_HOUR: number; MAX_TRACKED_ADDRESSES: number; + MIN_RECOMMENDED_FEE: number; }; ESPLORA: { REST_API_URL: string; @@ -214,6 +215,7 @@ const defaults: IConfig = { 'ALLOW_UNREACHABLE': true, 'PRICE_UPDATES_PER_HOUR': 1, 'MAX_TRACKED_ADDRESSES': 1, + 'MIN_RECOMMENDED_FEE': 1, }, 'ESPLORA': { 'REST_API_URL': 'http://127.0.0.1:3000', From 5f051c7d0da61586b575d615024b3e947fdac69a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 29 Oct 2025 08:52:01 +0000 Subject: [PATCH 451/534] Enable subsat fee recommendations in prod --- production/mempool-config.mainnet.json | 3 ++- production/mempool-config.signet.json | 3 ++- production/mempool-config.testnet.json | 3 ++- production/mempool-config.testnet4.json | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 87f58f916..301bd0f3f 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -23,7 +23,8 @@ "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, "PRICE_UPDATES_PER_HOUR": 12, - "MAX_TRACKED_ADDRESSES": 10 + "MAX_TRACKED_ADDRESSES": 10, + "MIN_RECOMMENDED_TX_FEE": 0.1 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.signet.json b/production/mempool-config.signet.json index 952845ae9..d4c45d133 100644 --- a/production/mempool-config.signet.json +++ b/production/mempool-config.signet.json @@ -16,7 +16,8 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10 + "MAX_TRACKED_ADDRESSES": 10, + "MIN_RECOMMENDED_TX_FEE": 0.1 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.testnet.json b/production/mempool-config.testnet.json index 5f9f3abb9..54be5c20e 100644 --- a/production/mempool-config.testnet.json +++ b/production/mempool-config.testnet.json @@ -16,7 +16,8 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10 + "MAX_TRACKED_ADDRESSES": 10, + "MIN_RECOMMENDED_TX_FEE": 0.1 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.testnet4.json b/production/mempool-config.testnet4.json index 2e79309ed..98f255c68 100644 --- a/production/mempool-config.testnet4.json +++ b/production/mempool-config.testnet4.json @@ -16,7 +16,8 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10 + "MAX_TRACKED_ADDRESSES": 10, + "MIN_RECOMMENDED_FEE": 0.1 }, "SYSLOG" : { "MIN_PRIORITY": "debug" From fd60913f540102dfacbcc5e6b78ae11547720055 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 29 Oct 2025 10:12:28 +0000 Subject: [PATCH 452/534] Add min fee query param to precise fee API --- backend/src/api/bitcoin/bitcoin.routes.ts | 12 +++++++++++- backend/src/api/fee-api.ts | 10 +++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index e6075ffa2..9e6de5dd1 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -129,7 +129,17 @@ class BitcoinRoutes { res.send('Service Unavailable'); return; } - const result = feeApi.getPreciseRecommendedFee(); + let minFee = 1; + if (req.query.min) { + try { + minFee = parseFloat(req.query.min as string); + } catch (e) { + res.statusCode = 400; + res.send('Invalid minimum fee'); + return; + } + } + const result = feeApi.getPreciseRecommendedFee(minFee); res.json(result); } diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 12b56595e..489f6a067 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -27,17 +27,17 @@ class FeeApi { return this.calculateRecommendedFee(pBlocks, mPool); } - public getPreciseRecommendedFee(): RecommendedFees { + public getPreciseRecommendedFee(minimum: number = 0): RecommendedFees { const pBlocks = projectedBlocks.getMempoolBlocks(); const mPool = mempool.getMempoolInfo(); // minimum non-zero minrelaytxfee / incrementalrelayfee is 1 sat/kvB = 0.001 sat/vB - return this.calculateRecommendedFee(pBlocks, mPool, 0.001); + return this.calculateRecommendedFee(pBlocks, mPool, minimum, 0.001); } - public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minIncrement: number = this.minimumIncrement): RecommendedFees { + public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minimumRecommendation: number = this.defaultFee, minIncrement: number = this.minimumIncrement): RecommendedFees { const purgeRate = this.roundUpToNearest(mPool.mempoolminfee * 100000, minIncrement); - const minimumFee = Math.max(purgeRate, config.MEMPOOL.MIN_RECOMMENDED_FEE, minIncrement); + const minimumFee = Math.max(purgeRate, minimumRecommendation, config.MEMPOOL.MIN_RECOMMENDED_FEE, minIncrement); if (!pBlocks.length) { return { @@ -78,7 +78,7 @@ class FeeApi { private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number, minFee: number = this.defaultFee, minIncrement: number = this.minimumIncrement): number { const useFee = previousFee ? (pBlock.medianFee + previousFee) / 2 : pBlock.medianFee; - if (pBlock.blockVSize <= 500000 || pBlock.medianFee < 1) { + if (pBlock.blockVSize <= 500000 || pBlock.medianFee < minFee) { return minFee; } if (pBlock.blockVSize <= 950000 && !nextBlock) { From ee1a4ae6e250587e9314e30e20d4f9aeb475b1de Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 29 Oct 2025 11:24:13 +0000 Subject: [PATCH 453/534] fix fee config --- backend/src/__fixtures__/mempool-config.template.json | 3 ++- backend/src/__tests__/config.test.ts | 1 + docker/backend/mempool-config.json | 3 ++- docker/backend/start.sh | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 0ca5654a5..93f66ca12 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -38,7 +38,8 @@ "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, "PRICE_UPDATES_PER_HOUR": 1, - "MAX_TRACKED_ADDRESSES": 1 + "MAX_TRACKED_ADDRESSES": 1, + "MIN_RECOMMENDED_FEE": 1 }, "CORE_RPC": { "HOST": "__CORE_RPC_HOST__", diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index e0437941f..bb21e8509 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -52,6 +52,7 @@ describe('Mempool Backend Config', () => { ALLOW_UNREACHABLE: true, PRICE_UPDATES_PER_HOUR: 1, MAX_TRACKED_ADDRESSES: 1, + MIN_RECOMMENDED_FEE: 1, }); expect(config.ELECTRUM).toStrictEqual({ HOST: '127.0.0.1', PORT: 3306, TLS_ENABLED: true }); diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index ee8e329a6..08b684f82 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -38,7 +38,8 @@ "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__ + "MAX_TRACKED_ADDRESSES": __MEMPOOL_MAX_TRACKED_ADDRESSES__, + "MIN_RECOMMENDED_FEE": __MEMPOOL_MIN_RECOMMENDED_FEE__ }, "CORE_RPC": { "HOST": "__CORE_RPC_HOST__", diff --git a/docker/backend/start.sh b/docker/backend/start.sh index ae0bc616f..88f4b3161 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -40,6 +40,7 @@ __MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT__=${MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT:=4000000} __MEMPOOL_ALLOW_UNREACHABLE__=${MEMPOOL_ALLOW_UNREACHABLE:=true} __MEMPOOL_PRICE_UPDATES_PER_HOUR__=${MEMPOOL_PRICE_UPDATES_PER_HOUR:=1} __MEMPOOL_MAX_TRACKED_ADDRESSES__=${MEMPOOL_MAX_TRACKED_ADDRESSES:=1} +__MEMPOOL_MIN_RECOMMENDED_FEE__=${MEMPOOL_MIN_RECOMMENDED_FEE:=1} # CORE_RPC __CORE_RPC_HOST__=${CORE_RPC_HOST:=127.0.0.1} @@ -204,6 +205,7 @@ sed -i "s!__MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT__!${__MEMPOOL_MAX_PUSH_TX_SIZE_WEIGH sed -i "s!__MEMPOOL_ALLOW_UNREACHABLE__!${__MEMPOOL_ALLOW_UNREACHABLE__}!g" mempool-config.json sed -i "s!__MEMPOOL_PRICE_UPDATES_PER_HOUR__!${__MEMPOOL_PRICE_UPDATES_PER_HOUR__}!g" mempool-config.json sed -i "s!__MEMPOOL_MAX_TRACKED_ADDRESSES__!${__MEMPOOL_MAX_TRACKED_ADDRESSES__}!g" mempool-config.json +sed -i "s!__MEMPOOL_MIN_RECOMMENDED_FEE__!${__MEMPOOL_MIN_RECOMMENDED_FEE__}!g" mempool-config.json sed -i "s!__CORE_RPC_HOST__!${__CORE_RPC_HOST__}!g" mempool-config.json sed -i "s!__CORE_RPC_PORT__!${__CORE_RPC_PORT__}!g" mempool-config.json From 38c192405708e05c80c0681becc2ec052d5750b7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 30 Oct 2025 10:36:08 +0000 Subject: [PATCH 454/534] round precise fee recommendations to 3.d.p --- backend/src/api/fee-api.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 489f6a067..2a1a26efe 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -68,11 +68,11 @@ class FeeApi { hourFee = Math.max(hourFee, economyFee); return { - 'fastestFee': fastestFee, - 'halfHourFee': halfHourFee, - 'hourFee': hourFee, - 'economyFee': economyFee, - 'minimumFee': minimumFee, + 'fastestFee': this.roundToNearest(fastestFee, minIncrement), + 'halfHourFee': this.roundToNearest(halfHourFee, minIncrement), + 'hourFee': this.roundToNearest(hourFee, minIncrement), + 'economyFee': this.roundToNearest(economyFee, minIncrement), + 'minimumFee': this.roundToNearest(minimumFee, minIncrement), }; } From 89ff47eaa92ec1229c001c65ff364dd3f981de1e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 30 Oct 2025 10:43:55 +0000 Subject: [PATCH 455/534] remove default value for ?min fee recommendation query param --- backend/src/api/bitcoin/bitcoin.routes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 9e6de5dd1..69d42f570 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -129,7 +129,7 @@ class BitcoinRoutes { res.send('Service Unavailable'); return; } - let minFee = 1; + let minFee = 0; if (req.query.min) { try { minFee = parseFloat(req.query.min as string); From 416f7b45654669f815714b3672c8a44a5d0131ba Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 30 Oct 2025 10:32:51 +0000 Subject: [PATCH 456/534] remove config.MEMPOOL.MIN_RECOMMENDED_FEE --- backend/src/__fixtures__/mempool-config.template.json | 3 +-- backend/src/__tests__/config.test.ts | 3 +-- backend/src/api/fee-api.ts | 7 +++---- backend/src/config.ts | 2 -- docker/backend/mempool-config.json | 3 +-- docker/backend/start.sh | 2 -- production/mempool-config.mainnet.json | 3 +-- production/mempool-config.signet.json | 3 +-- production/mempool-config.testnet.json | 3 +-- production/mempool-config.testnet4.json | 3 +-- 10 files changed, 10 insertions(+), 22 deletions(-) diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 93f66ca12..0ca5654a5 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -38,8 +38,7 @@ "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, "PRICE_UPDATES_PER_HOUR": 1, - "MAX_TRACKED_ADDRESSES": 1, - "MIN_RECOMMENDED_FEE": 1 + "MAX_TRACKED_ADDRESSES": 1 }, "CORE_RPC": { "HOST": "__CORE_RPC_HOST__", diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index bb21e8509..23b3dd346 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -51,8 +51,7 @@ describe('Mempool Backend Config', () => { MAX_PUSH_TX_SIZE_WEIGHT: 400000, ALLOW_UNREACHABLE: true, PRICE_UPDATES_PER_HOUR: 1, - MAX_TRACKED_ADDRESSES: 1, - MIN_RECOMMENDED_FEE: 1, + MAX_TRACKED_ADDRESSES: 1 }); expect(config.ELECTRUM).toStrictEqual({ HOST: '127.0.0.1', PORT: 3306, TLS_ENABLED: true }); diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 2a1a26efe..2edb8c0e4 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -17,7 +17,6 @@ interface RecommendedFees { class FeeApi { constructor() { } - defaultFee = isLiquid ? 0.1 : config.MEMPOOL.MIN_RECOMMENDED_FEE; minimumIncrement = isLiquid ? 0.1 : 1; public getRecommendedFee(): RecommendedFees { @@ -35,9 +34,9 @@ class FeeApi { return this.calculateRecommendedFee(pBlocks, mPool, minimum, 0.001); } - public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minimumRecommendation: number = this.defaultFee, minIncrement: number = this.minimumIncrement): RecommendedFees { + public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minimumRecommendation: number = 0, minIncrement: number = this.minimumIncrement): RecommendedFees { const purgeRate = this.roundUpToNearest(mPool.mempoolminfee * 100000, minIncrement); - const minimumFee = Math.max(purgeRate, minimumRecommendation, config.MEMPOOL.MIN_RECOMMENDED_FEE, minIncrement); + const minimumFee = Math.max(purgeRate, minimumRecommendation, minIncrement); if (!pBlocks.length) { return { @@ -76,7 +75,7 @@ class FeeApi { }; } - private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number, minFee: number = this.defaultFee, minIncrement: number = this.minimumIncrement): number { + private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee: number | undefined, minFee: number, minIncrement: number = this.minimumIncrement): number { const useFee = previousFee ? (pBlock.medianFee + previousFee) / 2 : pBlock.medianFee; if (pBlock.blockVSize <= 500000 || pBlock.medianFee < minFee) { return minFee; diff --git a/backend/src/config.ts b/backend/src/config.ts index f3260e788..3fe3db2ee 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -43,7 +43,6 @@ interface IConfig { ALLOW_UNREACHABLE: boolean; PRICE_UPDATES_PER_HOUR: number; MAX_TRACKED_ADDRESSES: number; - MIN_RECOMMENDED_FEE: number; }; ESPLORA: { REST_API_URL: string; @@ -215,7 +214,6 @@ const defaults: IConfig = { 'ALLOW_UNREACHABLE': true, 'PRICE_UPDATES_PER_HOUR': 1, 'MAX_TRACKED_ADDRESSES': 1, - 'MIN_RECOMMENDED_FEE': 1, }, 'ESPLORA': { 'REST_API_URL': 'http://127.0.0.1:3000', diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 08b684f82..ee8e329a6 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -38,8 +38,7 @@ "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__, - "MIN_RECOMMENDED_FEE": __MEMPOOL_MIN_RECOMMENDED_FEE__ + "MAX_TRACKED_ADDRESSES": __MEMPOOL_MAX_TRACKED_ADDRESSES__ }, "CORE_RPC": { "HOST": "__CORE_RPC_HOST__", diff --git a/docker/backend/start.sh b/docker/backend/start.sh index 88f4b3161..ae0bc616f 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -40,7 +40,6 @@ __MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT__=${MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT:=4000000} __MEMPOOL_ALLOW_UNREACHABLE__=${MEMPOOL_ALLOW_UNREACHABLE:=true} __MEMPOOL_PRICE_UPDATES_PER_HOUR__=${MEMPOOL_PRICE_UPDATES_PER_HOUR:=1} __MEMPOOL_MAX_TRACKED_ADDRESSES__=${MEMPOOL_MAX_TRACKED_ADDRESSES:=1} -__MEMPOOL_MIN_RECOMMENDED_FEE__=${MEMPOOL_MIN_RECOMMENDED_FEE:=1} # CORE_RPC __CORE_RPC_HOST__=${CORE_RPC_HOST:=127.0.0.1} @@ -205,7 +204,6 @@ sed -i "s!__MEMPOOL_MAX_PUSH_TX_SIZE_WEIGHT__!${__MEMPOOL_MAX_PUSH_TX_SIZE_WEIGH sed -i "s!__MEMPOOL_ALLOW_UNREACHABLE__!${__MEMPOOL_ALLOW_UNREACHABLE__}!g" mempool-config.json sed -i "s!__MEMPOOL_PRICE_UPDATES_PER_HOUR__!${__MEMPOOL_PRICE_UPDATES_PER_HOUR__}!g" mempool-config.json sed -i "s!__MEMPOOL_MAX_TRACKED_ADDRESSES__!${__MEMPOOL_MAX_TRACKED_ADDRESSES__}!g" mempool-config.json -sed -i "s!__MEMPOOL_MIN_RECOMMENDED_FEE__!${__MEMPOOL_MIN_RECOMMENDED_FEE__}!g" mempool-config.json sed -i "s!__CORE_RPC_HOST__!${__CORE_RPC_HOST__}!g" mempool-config.json sed -i "s!__CORE_RPC_PORT__!${__CORE_RPC_PORT__}!g" mempool-config.json diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 301bd0f3f..87f58f916 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -23,8 +23,7 @@ "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, "PRICE_UPDATES_PER_HOUR": 12, - "MAX_TRACKED_ADDRESSES": 10, - "MIN_RECOMMENDED_TX_FEE": 0.1 + "MAX_TRACKED_ADDRESSES": 10 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.signet.json b/production/mempool-config.signet.json index d4c45d133..952845ae9 100644 --- a/production/mempool-config.signet.json +++ b/production/mempool-config.signet.json @@ -16,8 +16,7 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10, - "MIN_RECOMMENDED_TX_FEE": 0.1 + "MAX_TRACKED_ADDRESSES": 10 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.testnet.json b/production/mempool-config.testnet.json index 54be5c20e..5f9f3abb9 100644 --- a/production/mempool-config.testnet.json +++ b/production/mempool-config.testnet.json @@ -16,8 +16,7 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10, - "MIN_RECOMMENDED_TX_FEE": 0.1 + "MAX_TRACKED_ADDRESSES": 10 }, "SYSLOG" : { "MIN_PRIORITY": "debug" diff --git a/production/mempool-config.testnet4.json b/production/mempool-config.testnet4.json index 98f255c68..2e79309ed 100644 --- a/production/mempool-config.testnet4.json +++ b/production/mempool-config.testnet4.json @@ -16,8 +16,7 @@ "DISK_CACHE_BLOCK_INTERVAL": 1, "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, "ALLOW_UNREACHABLE": true, - "MAX_TRACKED_ADDRESSES": 10, - "MIN_RECOMMENDED_FEE": 0.1 + "MAX_TRACKED_ADDRESSES": 10 }, "SYSLOG" : { "MIN_PRIORITY": "debug" From fbb9ecc75bda350365206f3831f020a9cf60f4ed Mon Sep 17 00:00:00 2001 From: softsimon Date: Sat, 1 Nov 2025 16:55:30 +0800 Subject: [PATCH 457/534] npm audit fix --- frontend/package-lock.json | 925 ++++++++++++++++++++++--------------- 1 file changed, 565 insertions(+), 360 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2ac14c8d5..aa90042c0 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -39,7 +39,6 @@ "ngx-infinite-scroll": "^17.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", - "start-server-and-test": "~2.1.0", "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", @@ -780,11 +779,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.1.tgz", - "integrity": "sha512-c3tp5zC5zp6XpK9w8wJf3d4Dyw9BNbmg/VEoXtePGivp4hzks6zuMAFknNRwdK7roOlH0HyM5No4WUZHBFpOmw==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.17.tgz", + "integrity": "sha512-ZXsIJXZm0I0dNu1BqmjfEtQhnzqoupUHHZb4GHm5NeQHBFZctQlkkNxLUU27GVeBUwFgEmP7kFgSLlMPTGSL5g==", + "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.1", + "@angular-devkit/core": "17.3.17", "jsonc-parser": "3.2.1", "magic-string": "0.30.8", "ora": "5.4.1", @@ -796,6 +796,67 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@angular-devkit/schematics/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular/animations": { "version": "17.3.1", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.1.tgz", @@ -811,14 +872,15 @@ } }, "node_modules/@angular/cli": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.1.tgz", - "integrity": "sha512-IVnnbRi53BZvZ3LE0PCfFefoB2uHlO1sHtilZf/xCpdV4E1Mkz0/hHln5CRHwAXErdSiY57VoMsF5tffxAfaBQ==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.17.tgz", + "integrity": "sha512-FgOvf9q5d23Cpa7cjP1FYti/v8S1FTm8DEkW3TY8lkkoxh3isu28GFKcLD1p/XF3yqfPkPVHToOFla5QwsEgBQ==", + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1703.1", - "@angular-devkit/core": "17.3.1", - "@angular-devkit/schematics": "17.3.1", - "@schematics/angular": "17.3.1", + "@angular-devkit/architect": "0.1703.17", + "@angular-devkit/core": "17.3.17", + "@angular-devkit/schematics": "17.3.17", + "@schematics/angular": "17.3.17", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.2", @@ -843,6 +905,64 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { + "version": "0.1703.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.17.tgz", + "integrity": "sha512-LD6po8lGP2FI7WbnsSxtvpiIi+FYL0aNfteunkT+7po9jUNflBEYHA64UWNO56u7ryKNdbuiN8/TEh7FEUnmCw==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "17.3.17", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@angular/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -886,6 +1006,24 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/@angular/cli/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@angular/cli/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@angular/cli/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -1327,9 +1465,10 @@ } }, "node_modules/@angular/ssr": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.1.tgz", - "integrity": "sha512-K/2FGTSC3xJOUJEvqRNVhhhoNGMDFMXUKJqnLXe6cNE8xNkOzO52tWTc0ZZr4ZYvFSwtVMuFY4E65HUxbhGTvA==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.17.tgz", + "integrity": "sha512-hRszFhFPh74n17cjhbRuR0igSwHm4ssB0LgkE4A5tBgYTSoWomRM6nmiyrk10OdQHlLOTFwdTIZ3aPDM5174Ow==", + "license": "MIT", "dependencies": { "critters": "0.0.22", "tslib": "^2.3.0" @@ -1340,12 +1479,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" @@ -1712,17 +1853,19 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "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.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -1749,36 +1892,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -2940,13 +3073,14 @@ } }, "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.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2996,13 +3130,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.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -4223,9 +4357,10 @@ } }, "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4555,12 +4690,13 @@ ] }, "node_modules/@schematics/angular": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.1.tgz", - "integrity": "sha512-B3TkpjDjZhxX+tUc2ySEHU33x82Da0sssq/EMqQ1PQBHeRMa0ecyCeExjFEs2y57ZuC+QeVTaUt+TW45lLSjQw==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.17.tgz", + "integrity": "sha512-S5HwYem5Yjeceb5OLvforNcjfTMh2qsHnTP1BAYL81XPpqeg2udjAkJjKBxCwxMZSqdCMw3ne0eKppEYTaEZ+A==", + "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.1", - "@angular-devkit/schematics": "17.3.1", + "@angular-devkit/core": "17.3.17", + "@angular-devkit/schematics": "17.3.17", "jsonc-parser": "3.2.1" }, "engines": { @@ -4569,6 +4705,67 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.13.0 || >=20.9.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@schematics/angular/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@schematics/angular/node_modules/picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -4751,9 +4948,10 @@ } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5175,10 +5373,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5633,17 +5832,6 @@ "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -6185,9 +6373,10 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6997,9 +7186,10 @@ } }, "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -7165,19 +7355,6 @@ "node": ">=4" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -7403,19 +7580,6 @@ "node": ">=6" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -7960,9 +8124,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -8296,9 +8461,10 @@ } }, "node_modules/cypress/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", "optional": true, "engines": { "node": ">=14.14" @@ -8721,9 +8887,9 @@ } }, "node_modules/eazy-logger": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", - "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.1.0.tgz", + "integrity": "sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==", "devOptional": true, "dependencies": { "chalk": "4.1.2" @@ -8838,9 +9004,10 @@ "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "node_modules/elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -9832,9 +9999,10 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -9855,7 +10023,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -9870,6 +10038,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -10686,14 +10858,6 @@ "node": ">=0.10.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -11064,9 +11228,10 @@ } }, "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -11661,7 +11826,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.14.0", @@ -11922,16 +12088,14 @@ } }, "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", "optional": true, "peer": true, - "dependencies": { - "rimraf": "^3.0.0" - }, "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/keyv": { @@ -13092,15 +13256,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13311,9 +13476,10 @@ } }, "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -14043,9 +14209,10 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -14150,9 +14317,10 @@ "optional": true }, "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.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -14801,9 +14969,10 @@ } }, "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -15448,9 +15617,10 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -16330,17 +16500,6 @@ "minimist": "^1.1.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -16704,14 +16863,6 @@ } ] }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -18839,15 +18990,51 @@ } }, "@angular-devkit/schematics": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.1.tgz", - "integrity": "sha512-c3tp5zC5zp6XpK9w8wJf3d4Dyw9BNbmg/VEoXtePGivp4hzks6zuMAFknNRwdK7roOlH0HyM5No4WUZHBFpOmw==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.17.tgz", + "integrity": "sha512-ZXsIJXZm0I0dNu1BqmjfEtQhnzqoupUHHZb4GHm5NeQHBFZctQlkkNxLUU27GVeBUwFgEmP7kFgSLlMPTGSL5g==", "requires": { - "@angular-devkit/core": "17.3.1", + "@angular-devkit/core": "17.3.17", "jsonc-parser": "3.2.1", "magic-string": "0.30.8", "ora": "5.4.1", "rxjs": "7.8.1" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + } } }, "@angular/animations": { @@ -18859,14 +19046,14 @@ } }, "@angular/cli": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.1.tgz", - "integrity": "sha512-IVnnbRi53BZvZ3LE0PCfFefoB2uHlO1sHtilZf/xCpdV4E1Mkz0/hHln5CRHwAXErdSiY57VoMsF5tffxAfaBQ==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.17.tgz", + "integrity": "sha512-FgOvf9q5d23Cpa7cjP1FYti/v8S1FTm8DEkW3TY8lkkoxh3isu28GFKcLD1p/XF3yqfPkPVHToOFla5QwsEgBQ==", "requires": { - "@angular-devkit/architect": "0.1703.1", - "@angular-devkit/core": "17.3.1", - "@angular-devkit/schematics": "17.3.1", - "@schematics/angular": "17.3.1", + "@angular-devkit/architect": "0.1703.17", + "@angular-devkit/core": "17.3.17", + "@angular-devkit/schematics": "17.3.17", + "@schematics/angular": "17.3.17", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.2", @@ -18883,6 +19070,39 @@ "yargs": "17.7.2" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.1703.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.17.tgz", + "integrity": "sha512-LD6po8lGP2FI7WbnsSxtvpiIi+FYL0aNfteunkT+7po9jUNflBEYHA64UWNO56u7ryKNdbuiN8/TEh7FEUnmCw==", + "requires": { + "@angular-devkit/core": "17.3.17", + "rxjs": "7.8.1" + } + }, + "@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -18914,6 +19134,16 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + }, "semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -19190,21 +19420,22 @@ } }, "@angular/ssr": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.1.tgz", - "integrity": "sha512-K/2FGTSC3xJOUJEvqRNVhhhoNGMDFMXUKJqnLXe6cNE8xNkOzO52tWTc0ZZr4ZYvFSwtVMuFY4E65HUxbhGTvA==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.17.tgz", + "integrity": "sha512-hRszFhFPh74n17cjhbRuR0igSwHm4ssB0LgkE4A5tBgYTSoWomRM6nmiyrk10OdQHlLOTFwdTIZ3aPDM5174Ow==", "requires": { "critters": "0.0.22", "tslib": "^2.3.0" } }, "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "requires": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, "@babel/compat-data": { @@ -19481,14 +19712,14 @@ } }, "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" }, "@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.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" }, "@babel/helper-validator-option": { "version": "7.23.5", @@ -19506,30 +19737,21 @@ } }, "@babel/helpers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", - "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - } - }, - "@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" } }, "@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==" + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "requires": { + "@babel/types": "^7.28.5" + } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.24.1", @@ -20282,13 +20504,13 @@ } }, "@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.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { @@ -20331,13 +20553,12 @@ } }, "@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.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" } }, "@browserify/envify": { @@ -21123,9 +21344,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -21316,13 +21537,49 @@ "optional": true }, "@schematics/angular": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.1.tgz", - "integrity": "sha512-B3TkpjDjZhxX+tUc2ySEHU33x82Da0sssq/EMqQ1PQBHeRMa0ecyCeExjFEs2y57ZuC+QeVTaUt+TW45lLSjQw==", + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.17.tgz", + "integrity": "sha512-S5HwYem5Yjeceb5OLvforNcjfTMh2qsHnTP1BAYL81XPpqeg2udjAkJjKBxCwxMZSqdCMw3ne0eKppEYTaEZ+A==", "requires": { - "@angular-devkit/core": "17.3.1", - "@angular-devkit/schematics": "17.3.1", + "@angular-devkit/core": "17.3.17", + "@angular-devkit/schematics": "17.3.17", "jsonc-parser": "3.2.1" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "17.3.17", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", + "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.1", + "picomatch": "4.0.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "picomatch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + } } }, "@sideway/address": { @@ -21485,9 +21742,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -21832,9 +22089,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -22192,14 +22449,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -22611,9 +22860,9 @@ "requires": {} }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -23253,9 +23502,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -23363,16 +23612,6 @@ "type-detect": "^4.0.8" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", @@ -23518,19 +23757,6 @@ "shallow-clone": "^3.0.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -23957,9 +24183,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -24184,9 +24410,9 @@ } }, "tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "optional": true } } @@ -24530,9 +24756,9 @@ } }, "eazy-logger": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", - "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.1.0.tgz", + "integrity": "sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==", "devOptional": true, "requires": { "chalk": "4.1.2" @@ -24626,9 +24852,9 @@ "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "elliptic": { - "version": "6.5.7", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", - "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -25407,9 +25633,9 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -25430,7 +25656,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -26042,11 +26268,6 @@ } } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -26298,9 +26519,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -26934,14 +27155,11 @@ "peer": true }, "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "optional": true, - "peer": true, - "requires": { - "rimraf": "^3.0.0" - } + "peer": true } } }, @@ -27831,9 +28049,9 @@ } }, "nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" }, "natural-compare": { "version": "1.4.0", @@ -28001,9 +28219,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -28535,9 +28753,9 @@ } }, "path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "path-type": { "version": "4.0.0", @@ -28620,9 +28838,9 @@ "optional": 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.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "picomatch": { "version": "2.3.1", @@ -29042,9 +29260,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } @@ -29549,9 +29767,9 @@ } }, "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "requires": { "randombytes": "^2.1.0" } @@ -30225,14 +30443,6 @@ "minimist": "^1.1.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -30498,11 +30708,6 @@ } } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", From ecc4925c4e47fad1ba59af492861d3e2fe9f1aab Mon Sep 17 00:00:00 2001 From: Aaron Dewes Date: Fri, 31 Oct 2025 09:23:26 +0100 Subject: [PATCH 458/534] Replace Citadel with Nirvati --- .../app/components/about/about.component.html | 4 ++-- frontend/src/resources/profile/nirvati.svg | 1 + frontend/src/resources/profile/runcitadel.svg | 17 ----------------- 3 files changed, 3 insertions(+), 19 deletions(-) create mode 100644 frontend/src/resources/profile/nirvati.svg delete mode 100644 frontend/src/resources/profile/runcitadel.svg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 5484342d0..7c0a3ead5 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -277,8 +277,8 @@ RoninDojo - - + + Citadel diff --git a/frontend/src/resources/profile/nirvati.svg b/frontend/src/resources/profile/nirvati.svg new file mode 100644 index 000000000..3089d1d4c --- /dev/null +++ b/frontend/src/resources/profile/nirvati.svg @@ -0,0 +1 @@ + diff --git a/frontend/src/resources/profile/runcitadel.svg b/frontend/src/resources/profile/runcitadel.svg deleted file mode 100644 index 242575343..000000000 --- a/frontend/src/resources/profile/runcitadel.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - From ee270f37528b7647c834a3406b2bb18e3255f24f Mon Sep 17 00:00:00 2001 From: Aaron Dewes Date: Fri, 31 Oct 2025 09:26:26 +0100 Subject: [PATCH 459/534] Accept CLA for AaronDewes --- contributors/AaronDewes.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 contributors/AaronDewes.txt diff --git a/contributors/AaronDewes.txt b/contributors/AaronDewes.txt new file mode 100644 index 000000000..5628ffd75 --- /dev/null +++ b/contributors/AaronDewes.txt @@ -0,0 +1,3 @@ +I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of October 31, 2025. + +Signed: AaronDewes From 2679395e11297c614bcd04e319130e90af99492a Mon Sep 17 00:00:00 2001 From: Aaron Dewes Date: Sun, 2 Nov 2025 09:31:09 +0100 Subject: [PATCH 460/534] Apply suggestions from code review Co-authored-by: mononaut <83316221+mononaut@users.noreply.github.com> --- frontend/src/app/components/about/about.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 7c0a3ead5..1f4aab850 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -277,9 +277,9 @@ RoninDojo - + - Citadel + Nirvati From 84cda07062b77cef0e2d4771b60b06ea69f62419 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Tue, 4 Nov 2025 18:09:42 +0100 Subject: [PATCH 461/534] [accelerator] use /accelerator/accelerations/:txid in transaction component --- .../transaction/transaction.component.ts | 40 +++++++++---------- .../src/app/services/services-api.service.ts | 4 ++ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 12992084b..1a789956b 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -343,12 +343,12 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.setIsAccelerated(); }), switchMap((blockHeight: number) => { - 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 this.servicesApiService.getAccelerationDataForTxid$(this.txId).pipe( + switchMap((accelerationData: Acceleration) => { + if (this.tx.acceleration && !accelerationData) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry return throwError('retry'); } - return of(accelerationHistory); + return of(accelerationData); }), retry({ count: 3, delay: 2000 }), catchError(() => { @@ -356,25 +356,21 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { }) ); }), - ).subscribe((accelerationHistory) => { - for (const acceleration of accelerationHistory) { - 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(); - } + ).subscribe((acceleration: Acceleration) => { + 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(); }); this.miningSubscription = this.fetchMiningInfo$.pipe( diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index d0b04cf79..d85698e42 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -163,6 +163,10 @@ export class ServicesApiServices { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/history`, { params: { ...params } }); } + getAccelerationDataForTxid$(txid: string) { + return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/${txid}`); + } + 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( From 074d64ac8f5ecba6c2fc5e12834eb6028a3c1392 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 5 Nov 2025 06:23:10 +0000 Subject: [PATCH 462/534] add /accelerator/accelerations/:txid backend route --- .../api/acceleration/acceleration.routes.ts | 14 ++++++++++ .../repositories/AccelerationRepository.ts | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/backend/src/api/acceleration/acceleration.routes.ts b/backend/src/api/acceleration/acceleration.routes.ts index 082d53330..dc2ce697b 100644 --- a/backend/src/api/acceleration/acceleration.routes.ts +++ b/backend/src/api/acceleration/acceleration.routes.ts @@ -11,6 +11,7 @@ class AccelerationRoutes { public initRoutes(app: Application): void { app .get(config.MEMPOOL.API_URL_PREFIX + 'services/accelerator/accelerations', this.$getAcceleratorAccelerations.bind(this)) + .get(config.MEMPOOL.API_URL_PREFIX + 'services/accelerator/accelerations/:txid', this.$getAcceleratorAcceleration.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'services/accelerator/accelerations/history', this.$getAcceleratorAccelerationsHistory.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'services/accelerator/accelerations/history/aggregated', this.$getAcceleratorAccelerationsHistoryAggregated.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'services/accelerator/accelerations/stats', this.$getAcceleratorAccelerationsStats.bind(this)) @@ -23,6 +24,19 @@ class AccelerationRoutes { res.status(200).send(Object.values(accelerations)); } + private async $getAcceleratorAcceleration(req: Request, res: Response): Promise { + if (req.params.txid) { + const acceleration = await AccelerationRepository.$getAccelerationInfoForTxid(req.params.txid); + if (acceleration) { + res.status(200).send(acceleration); + } else { + res.status(404).send('Acceleration not found'); + } + } else { + res.status(400).send('txid is required'); + } + } + private async $getAcceleratorAccelerationsHistory(req: Request, res: Response): Promise { const history = await AccelerationRepository.$getAccelerationInfo(null, req.query.blockHeight ? parseInt(req.query.blockHeight as string, 10) : null); res.status(200).send(history.map(accel => ({ diff --git a/backend/src/repositories/AccelerationRepository.ts b/backend/src/repositories/AccelerationRepository.ts index 9c1ae2f90..aa39c8929 100644 --- a/backend/src/repositories/AccelerationRepository.ts +++ b/backend/src/repositories/AccelerationRepository.ts @@ -60,6 +60,32 @@ class AccelerationRepository { } } + public async $getAccelerationInfoForTxid(txid: string): Promise { + const [rows] = await DB.query(` + SELECT *, UNIX_TIMESTAMP(requested) as requested_timestamp, UNIX_TIMESTAMP(added) as block_timestamp FROM accelerations + JOIN pools on pools.unique_id = accelerations.pool + WHERE txid = ? + `, [txid]) as RowDataPacket[][]; + if (rows?.length) { + const row = rows[0]; + return { + txid: row.txid, + height: row.height, + added: row.requested_timestamp || row.block_timestamp, + pool: { + id: row.id, + slug: row.slug, + name: row.name, + }, + effective_vsize: row.effective_vsize, + effective_fee: row.effective_fee, + boost_rate: row.boost_rate, + boost_cost: row.boost_cost, + }; + } + return null; + } + public async $getAccelerationInfo(poolSlug: string | null = null, height: number | null = null, interval: string | null = null): Promise { if (!interval || !['24h', '3d', '1w', '1m'].includes(interval)) { interval = '1m'; From a4ceb3c843fa484b2069ac42c5c6135be2e977fa Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 5 Nov 2025 06:59:03 +0000 Subject: [PATCH 463/534] reduce unnecessary acceleration history requests --- .../block/block-preview.component.ts | 2 +- .../app/components/block/block.component.ts | 2 +- .../transaction/transaction.component.ts | 43 ++++++++++++------- 3 files changed, 30 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index f5b31e846..29a13308c 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -138,7 +138,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { return of(transactions); }) ), - this.stateService.env.ACCELERATOR === true && block.height > 819500 + this.stateService.env.ACCELERATOR === true && block.height > 819500 && this.stateService.network === '' ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe( catchError(() => { diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index fce33b0dd..c3ad82b8e 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -384,7 +384,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.accelerationsSubscription = this.block$.pipe( switchMap((block) => { - return this.stateService.env.ACCELERATOR === true && block.height > 819500 + return this.stateService.env.ACCELERATOR === true && block.height > 819500 && this.stateService.network === '' ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe(catchError(() => { return of([]); diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 1a789956b..fb59e8256 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -16,7 +16,7 @@ import { take } from 'rxjs/operators'; import { Transaction } from '@interfaces/electrs.interface'; -import { of, merge, Subscription, Observable, Subject, from, throwError, combineLatest, BehaviorSubject } from 'rxjs'; +import { of, merge, Subscription, Observable, Subject, from, throwError, combineLatest, BehaviorSubject, timer } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; import { WebsocketService } from '@app/services/websocket.service'; @@ -343,28 +343,41 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.setIsAccelerated(); }), switchMap((blockHeight: number) => { - return this.servicesApiService.getAccelerationDataForTxid$(this.txId).pipe( - switchMap((accelerationData: Acceleration) => { - if (this.tx.acceleration && !accelerationData) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry - return throwError('retry'); - } - return of(accelerationData); - }), - retry({ count: 3, delay: 2000 }), - catchError(() => { - return of([]); - }) - ); + if (this.stateService.network === '' && this.stateService.env.ACCELERATOR && blockHeight >= 819500 ) { + return this.servicesApiService.getAccelerationDataForTxid$(this.txId).pipe( + switchMap((accelerationData: Acceleration) => { + if (this.tx.acceleration && !accelerationData) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry + return throwError(() => 'retry'); + } + return of(accelerationData); + }), + retry({ + count: 3, + delay: (error) => { + if (error === 'retry') { + return timer(2000); + } + return throwError(() => error); + } + }), + catchError(() => { + return of(null); + }) + ); + } else { + return of(null); + } }), + filter((acceleration: Acceleration) => !!acceleration), ).subscribe((acceleration: Acceleration) => { - if ((acceleration.status === 'completed' || acceleration.status === 'completed_provisional') && acceleration.pools.includes(acceleration.minedByPoolUniqueId)) { + 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; this.tx.acceleratedAt = acceleration.added; this.accelerationInfo = acceleration; } - if (acceleration.status === 'failed' || acceleration.status === 'failed_provisional') { + if (acceleration.txid === this.txId && (acceleration.status === 'failed' || acceleration.status === 'failed_provisional')) { this.accelerationCanceled = true; this.tx.acceleratedAt = acceleration.added; this.accelerationInfo = acceleration; From 03023b106c4c40ef46b0ff58d74997703c02473e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 5 Nov 2025 07:00:09 +0000 Subject: [PATCH 464/534] update tracker acceleration history pipeline --- .../components/tracker/tracker.component.ts | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index f78b7a2a9..185fcddc2 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -10,10 +10,11 @@ import { mergeMap, tap, map, - startWith + startWith, + retry } from 'rxjs/operators'; import { Transaction } from '@interfaces/electrs.interface'; -import { of, merge, Subscription, Observable, Subject, throwError, combineLatest, BehaviorSubject } from 'rxjs'; +import { of, merge, Subscription, Observable, Subject, throwError, combineLatest, BehaviorSubject, timer } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; import { WebsocketService } from '@app/services/websocket.service'; @@ -101,7 +102,7 @@ export class TrackerComponent implements OnInit, OnDestroy { fetchCpfp$ = new Subject(); fetchRbfHistory$ = new Subject(); fetchCachedTx$ = new Subject(); - fetchAcceleration$ = new Subject(); + fetchAcceleration$ = new Subject(); fetchMiningInfo$ = new Subject<{ hash: string, height: number, txid: string }>(); 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 @@ -284,24 +285,48 @@ export class TrackerComponent implements OnInit, OnDestroy { filter(() => this.stateService.env.ACCELERATOR === true), tap(() => { this.accelerationInfo = null; + this.setIsAccelerated(); }), - switchMap((blockHash: string) => { - 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') && 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.accelerationInfo = acceleration; - this.setIsAccelerated(); + switchMap((blockHeight: number) => { + if (this.stateService.network === '' && this.stateService.env.ACCELERATOR && blockHeight >= 819500 ) { + return this.servicesApiService.getAccelerationDataForTxid$(this.txId).pipe( + switchMap((accelerationData: Acceleration) => { + if (this.tx.acceleration && !accelerationData) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry + return throwError(() => 'retry'); + } + return of(accelerationData); + }), + retry({ + count: 3, + delay: (error) => { + if (error === 'retry') { + return timer(2000); + } + return throwError(() => error); // Don't retry, just rethrow + } + }), + catchError(() => { + return of(null); + }) + ); + } else { + return of(null); } + }), + filter((acceleration: Acceleration) => !!acceleration), + ).subscribe((acceleration: Acceleration) => { + 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; + this.tx.acceleratedAt = acceleration.added; + this.accelerationInfo = acceleration; } + if (acceleration.txid === this.txId && (acceleration.status === 'failed' || acceleration.status === 'failed_provisional')) { + this.tx.acceleratedAt = acceleration.added; + this.accelerationInfo = acceleration; + } + this.setIsAccelerated(); }); this.miningSubscription = this.fetchMiningInfo$.pipe( @@ -476,7 +501,7 @@ export class TrackerComponent implements OnInit, OnDestroy { } else { this.trackerStage = 'confirmed'; this.loadingPosition = false; - this.fetchAcceleration$.next(tx.status.block_hash); + this.fetchAcceleration$.next(tx.status.block_height); this.fetchMiningInfo$.next({ hash: tx.status.block_hash, height: tx.status.block_height, txid: tx.txid }); this.transactionTime = 0; } @@ -540,7 +565,7 @@ export class TrackerComponent implements OnInit, OnDestroy { } else { this.audioService.playSound('magic'); } - this.fetchAcceleration$.next(block.id); + this.fetchAcceleration$.next(block.height); this.fetchMiningInfo$.next({ hash: block.id, height: block.height, txid: this.tx.txid }); } }); From 306e9f0af0965af22d9b5f8e823979969fca15a0 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:06:46 -0800 Subject: [PATCH 465/534] Add method to disconnect database so tests don't hang --- backend/src/database.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/src/database.ts b/backend/src/database.ts index 6f59983ca..818878a68 100644 --- a/backend/src/database.ts +++ b/backend/src/database.ts @@ -180,6 +180,19 @@ import { execSync } from 'child_process'; } return this.pool; } + + /** + * Close the database connection pool + * This should only be called when the application is shutting down + * or at the end of test suites + */ + public async close(): Promise { + if (this.pool !== null) { + await this.pool.end(); + this.pool = null; + logger.debug('Database connection pool closed'); + } + } } export default new DB(); From dec5a95c36c491e525af8b69a7535439bd5a66c8 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:08:21 -0800 Subject: [PATCH 466/534] Remove circular dependency and allow clearing the timeout --- backend/src/api/mempool.ts | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 894261d2f..34a27f510 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -21,8 +21,7 @@ class Mempool { 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 mempoolInfo: IBitcoinApi.MempoolInfo; private mempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[]) => void) | undefined; private $asyncMempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, mempoolSize: number, newTransactions: MempoolTransactionExtended[], @@ -44,11 +43,36 @@ class Mempool { private timer = new Date().getTime(); private missingTxCount = 0; private mainLoopTimeout: number = 120000; + private txPerSecondInterval: NodeJS.Timeout | null = null; public limitGBT = config.MEMPOOL.USE_SECOND_NODE_FOR_MINFEE && config.MEMPOOL.LIMIT_GBT; constructor() { - setInterval(this.updateTxPerSecond.bind(this), 1000); + // Initialize mempoolInfo here to avoid circular dependency issues + // Use config directly instead of Common.isLiquid() to break circular dependency + const isLiquid = config.MEMPOOL.NETWORK === 'liquid' || config.MEMPOOL.NETWORK === 'liquidtestnet'; + this.mempoolInfo = { + loaded: false, + size: 0, + bytes: 0, + usage: 0, + total_fee: 0, + maxmempool: 300000000, + mempoolminfee: isLiquid ? 0.00000100 : 0.00001000, + minrelaytxfee: isLiquid ? 0.00000100 : 0.00001000 + }; + this.txPerSecondInterval = setInterval(this.updateTxPerSecond.bind(this), 1000); + } + + /** + * Cleanup resources (timers, etc.) + * This should only be called when shutting down or in test teardown + */ + public destroy(): void { + if (this.txPerSecondInterval) { + clearInterval(this.txPerSecondInterval); + this.txPerSecondInterval = null; + } } /** From 18ef1f81a191fcdf22bdfe09c0d1b6b45a9417d0 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:09:02 -0800 Subject: [PATCH 467/534] Allow logger to disconnect if needed --- backend/src/logger.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/backend/src/logger.ts b/backend/src/logger.ts index bce77c63f..27aa942e6 100644 --- a/backend/src/logger.ts +++ b/backend/src/logger.ts @@ -67,6 +67,8 @@ class Logger { } } this.client = dgram.createSocket('udp4'); + // Unref the socket so it doesn't prevent Node.js from exiting + this.client.unref(); this.network = this.getNetwork(); } @@ -153,6 +155,20 @@ class Logger { months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; return months[month] + ' ' + day + ' ' + hours + ':' + minutes + ':' + seconds; } + + /** + * Close the UDP socket used for syslog + * This should only be called when shutting down or in test teardown + */ + public close(): void { + if (this.client) { + // Unref allows Node.js to exit even if the socket is open + this.client.unref(); + this.client.close(() => { + // Socket closed callback + }); + } + } } export type LogLevel = 'emerg' | 'alert' | 'crit' | 'err' | 'warn' | 'notice' | 'info' | 'debug'; From c30b2eca0ab6ef8e456634fbbd55aba26319972c Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:09:37 -0800 Subject: [PATCH 468/534] Change isLiquid check --- backend/src/api/common.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index b0bb12d86..79cc65540 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -29,10 +29,9 @@ export class Common { static nativeAssetId = config.MEMPOOL.NETWORK === 'liquidtestnet' ? '144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49' : '6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d'; - static _isLiquid = config.MEMPOOL.NETWORK === 'liquid' || config.MEMPOOL.NETWORK === 'liquidtestnet'; static isLiquid(): boolean { - return this._isLiquid; + return config?.MEMPOOL?.NETWORK === 'liquid' || config?.MEMPOOL?.NETWORK === 'liquidtestnet'; } static median(numbers: number[]) { From 62a287b92edebc7e2f9e8206822229bde59ecca0 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:13:00 -0800 Subject: [PATCH 469/534] Ensure getMissingBlocksBetweenHeights is always sorted --- backend/src/repositories/BlocksRepository.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 922f96ada..2994dd8f4 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -272,7 +272,11 @@ class BlocksRepository { * Get all block height that have not been indexed between [startHeight, endHeight] */ public async $getMissingBlocksBetweenHeights(startHeight: number, endHeight: number): Promise { - if (startHeight < endHeight) { + // Ensure startHeight is the lower value and endHeight is the higher value + const minHeight = Math.min(startHeight, endHeight); + const maxHeight = Math.max(startHeight, endHeight); + + if (minHeight === maxHeight) { return []; } @@ -280,13 +284,13 @@ class BlocksRepository { const [rows]: any[] = await DB.query(` SELECT height FROM blocks - WHERE height <= ? AND height >= ? AND stale = 0 - ORDER BY height DESC; - `, [startHeight, endHeight]); + WHERE height >= ? AND height <= ? AND stale = 0 + ORDER BY height ASC; + `, [minHeight, maxHeight]); const indexedBlockHeights: number[] = []; rows.forEach((row: any) => { indexedBlockHeights.push(row.height); }); - const seekedBlocks: number[] = Array.from(Array(startHeight - endHeight + 1).keys(), n => n + endHeight).reverse(); + const seekedBlocks: number[] = Array.from(Array(maxHeight - minHeight + 1).keys(), n => n + minHeight); const missingBlocksHeights = seekedBlocks.filter(x => indexedBlockHeights.indexOf(x) === -1); return missingBlocksHeights; From c879ffb857c4af374090be4b206228205fa37487 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 6 Nov 2025 18:13:14 +0000 Subject: [PATCH 470/534] Update default theme to wiz and rename classic to softsimon --- frontend/angular.json | 4 +-- .../theme-selector.component.html | 4 +-- .../theme-selector.component.ts | 2 +- frontend/src/styles.scss | 34 +++++++++---------- .../{theme-wiz.scss => theme-softsimon.scss} | 34 +++++++++---------- 5 files changed, 39 insertions(+), 39 deletions(-) rename frontend/src/{theme-wiz.scss => theme-softsimon.scss} (84%) diff --git a/frontend/angular.json b/frontend/angular.json index c5da6a09a..2bf92c67c 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -181,8 +181,8 @@ "inject": false }, { - "input": "src/theme-wiz.scss", - "bundleName": "wiz", + "input": "src/theme-softsimon.scss", + "bundleName": "softsimon", "inject": false }, { diff --git a/frontend/src/app/components/theme-selector/theme-selector.component.html b/frontend/src/app/components/theme-selector/theme-selector.component.html index 9bacaa08b..c74e0c2c6 100644 --- a/frontend/src/app/components/theme-selector/theme-selector.component.html +++ b/frontend/src/app/components/theme-selector/theme-selector.component.html @@ -1,7 +1,7 @@
    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 ca9c5788d..14dbaf990 100644 --- a/frontend/src/app/components/theme-selector/theme-selector.component.ts +++ b/frontend/src/app/components/theme-selector/theme-selector.component.ts @@ -11,7 +11,7 @@ import { Subscription } from 'rxjs'; }) export class ThemeSelectorComponent implements OnInit { themeForm: UntypedFormGroup; - themes = ['default', 'contrast', 'wiz', 'bukele']; + themes = ['default', 'contrast', 'softsimon', 'bukele']; themeSubscription: Subscription; constructor( diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 54b5b8f21..123fd55c4 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -1,10 +1,10 @@ /* Theme */ -$bg: #1d1f31; -$active-bg: #11131f; +$bg: #11131f; +$active-bg: #000000; $hover-bg: #12131e; $fg: #fff; $nav-bg: $bg; -$title-fg: #4a68b9; +$title-fg: #2055e3; $taproot: #eba814; $taproot-light: #d5a90a; @@ -18,11 +18,11 @@ $gray-700: $fg; $nav-tabs-link-active-bg: $active-bg; -$primary: #105fb0; -$secondary: #2d3348; -$tertiary: #653b9c; -$success: #1a9436; -$info: #1bd8f4; +$primary: #007cfa; +$secondary: #272f4e; +$tertiary: #6225b2; +$success: #0aab2f; +$info: #00ddff; $h5-font-size: 1.15rem !default; @@ -79,13 +79,13 @@ $dropdown-link-active-bg: $active-bg; --skeleton-bg: #2e324e; --skeleton-bg-light: #5d6182; - --box-bg: #24273e; - --stat-box-bg: #181b2d; + --box-bg: #171c2a; + --stat-box-bg: #0b1018; --alert-bg: #3a1c61; --navbar-bg: #212121; - --transparent-fg: #ffffff66; - --fade-out-box-bg-start: rgba(36, 39, 62, 0); - --fade-out-box-bg-end: rgba(36, 39, 62, 1); + --transparent-fg: #ffffffbb; + --fade-out-box-bg-start: rgba(23, 28, 42, 0); + --fade-out-box-bg-end: rgba(23, 28, 42, 1); --opacity: 0.57; --testnet: #1d486f; @@ -102,12 +102,12 @@ $dropdown-link-active-bg: $active-bg; --taproot-light: #d5a90a; --taproot-dark: #9d7c05; - --green: #3bcc49; - --red: #dc3545; + --green: #83fd00; + --red: #ff3d00; --yellow: #fff000; - --grey: #6c757d; + --grey: #7e7e7e; --tooltip-grey: #b1b1b1; - --orange: #b86d12; + --orange: #ff9f00; --search-button: #4d2d77; --search-button-border: #472a6e; diff --git a/frontend/src/theme-wiz.scss b/frontend/src/theme-softsimon.scss similarity index 84% rename from frontend/src/theme-wiz.scss rename to frontend/src/theme-softsimon.scss index 2dd5eb67b..4e9b3e782 100644 --- a/frontend/src/theme-wiz.scss +++ b/frontend/src/theme-softsimon.scss @@ -1,10 +1,10 @@ /* Theme */ -$bg: #11131f; -$active-bg: #000000; +$bg: #1d1f31; +$active-bg: #11131f; $hover-bg: #12131e; $fg: #fff; $nav-bg: $bg; -$title-fg: #2055e3; +$title-fg: #4a68b9; $taproot: #eba814; $taproot-light: #d5a90a; @@ -18,11 +18,11 @@ $gray-700: $fg; $nav-tabs-link-active-bg: $active-bg; -$primary: #007cfa; -$secondary: #272f4e; -$tertiary: #6225b2; -$success: #0aab2f; -$info: #00ddff; +$primary: #105fb0; +$secondary: #2d3348; +$tertiary: #653b9c; +$success: #1a9436; +$info: #1bd8f4; $h5-font-size: 1.15rem !default; @@ -76,12 +76,12 @@ $dropdown-link-active-bg: $active-bg; --skeleton-bg: #2e324e; --skeleton-bg-light: #5d6182; - --box-bg: #171c2a; - --stat-box-bg: #0b1018; + --box-bg: #24273e; + --stat-box-bg: #181b2d; --alert-bg: #3a1c61; - --transparent-fg: #ffffffbb; - --fade-out-box-bg-start: rgba(23, 28, 42, 0); - --fade-out-box-bg-end: rgba(23, 28, 42, 1); + --transparent-fg: #ffffff66; + --fade-out-box-bg-start: rgba(36, 39, 62, 0); + --fade-out-box-bg-end: rgba(36, 39, 62, 1); --opacity: 0.57; --testnet: #1d486f; @@ -98,12 +98,12 @@ $dropdown-link-active-bg: $active-bg; --taproot-light: #d5a90a; --taproot-dark: #9d7c05; - --green: #83fd00; - --red: #ff3d00; + --green: #3bcc49; + --red: #dc3545; --yellow: #fff000; - --grey: #7e7e7e; + --grey: #6c757d; --tooltip-grey: #b1b1b1; - --orange: #ff9f00; + --orange: #b86d12; --search-button: #4d2d77; --search-button-border: #472a6e; From a9cab8f6a944667efcf561dd5385810d6cb8f0d8 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:15:53 -0800 Subject: [PATCH 471/534] Add the initial database migration and database lookup tests --- .github/workflows/backend-integration.yml | 142 +++++++++++++ backend/docker-compose.test.yml | 20 ++ backend/jest.config.ts | 4 + backend/jest.integration.config.ts | 21 ++ backend/jest.integration.setup.ts | 50 +++++ backend/jest.integration.teardown.ts | 81 ++++++++ backend/mempool-config.test.json | 163 +++++++++++++++ backend/package.json | 2 + backend/scripts/debug-integration-tests.sh | 40 ++++ backend/scripts/test-with-db.sh | 94 +++++++++ .../blocks-repository.test.ts | 134 ++++++++++++ .../database-connection.test.ts | 45 +++++ .../database-migration.test.ts | 97 +++++++++ .../pools-repository.test.ts | 122 +++++++++++ .../src/__integration_tests__/test-helpers.ts | 190 ++++++++++++++++++ backend/testSetup.integration.ts | 14 ++ 16 files changed, 1219 insertions(+) create mode 100644 .github/workflows/backend-integration.yml create mode 100644 backend/docker-compose.test.yml create mode 100644 backend/jest.integration.config.ts create mode 100644 backend/jest.integration.setup.ts create mode 100644 backend/jest.integration.teardown.ts create mode 100644 backend/mempool-config.test.json create mode 100755 backend/scripts/debug-integration-tests.sh create mode 100755 backend/scripts/test-with-db.sh create mode 100644 backend/src/__integration_tests__/blocks-repository.test.ts create mode 100644 backend/src/__integration_tests__/database-connection.test.ts create mode 100644 backend/src/__integration_tests__/database-migration.test.ts create mode 100644 backend/src/__integration_tests__/pools-repository.test.ts create mode 100644 backend/src/__integration_tests__/test-helpers.ts create mode 100644 backend/testSetup.integration.ts diff --git a/.github/workflows/backend-integration.yml b/.github/workflows/backend-integration.yml new file mode 100644 index 000000000..d9841e3dd --- /dev/null +++ b/.github/workflows/backend-integration.yml @@ -0,0 +1,142 @@ +name: Backend Integration Tests with MariaDB + +on: + pull_request: + types: [opened, review_requested, synchronize] + push: + branches: + - master + +jobs: + backend-integration: + if: "(github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ops') && !contains(github.head_ref, 'ops/')) || github.event_name == 'push'" + strategy: + matrix: + node: ["22.14.0"] + fail-fast: false + runs-on: ubuntu-latest + + name: Backend Integration Tests - node ${{ matrix.node }} + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + path: ${{ matrix.node }}/integration + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + registry-url: "https://registry.npmjs.org" + cache: 'npm' + cache-dependency-path: '${{ matrix.node }}/integration/backend/package-lock.json' + + - name: Cache node modules + uses: actions/cache@v4 + with: + path: ${{ matrix.node }}/integration/backend/node_modules + key: ${{ runner.os }}-backend-integration-node-${{ matrix.node }}-${{ hashFiles('${{ matrix.node }}/integration/backend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-backend-integration-node-${{ matrix.node }}- + ${{ runner.os }}-backend-integration- + + - name: Read rust-toolchain file from repository + id: gettoolchain + run: echo "::set-output name=toolchain::$(cat ./rust/gbt/rust-toolchain)" + working-directory: ${{ matrix.node }}/integration + + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ${{ matrix.node }}/integration/rust/gbt/target/ + key: ${{ runner.os }}-cargo-integration-${{ hashFiles('${{ matrix.node }}/integration/rust/gbt/**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-integration- + ${{ runner.os }}-cargo- + + - name: Install ${{ steps.gettoolchain.outputs.toolchain }} Rust toolchain + uses: dtolnay/rust-toolchain@6d653acede28d24f02e3cd41383119e8b1b35921 + with: + toolchain: ${{ steps.gettoolchain.outputs.toolchain }} + + - name: Install dependencies + run: npm ci + working-directory: ${{ matrix.node }}/integration/backend + + - name: Start MariaDB service + run: docker-compose -f docker-compose.test.yml up -d + working-directory: ${{ matrix.node }}/integration/backend + + - name: Wait for MariaDB to be ready + run: | + max_attempts=30 + attempt=0 + while [ $attempt -lt $max_attempts ]; do + if docker-compose -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then + echo "MariaDB is ready!" + break + fi + attempt=$((attempt + 1)) + echo "Attempt $attempt/$max_attempts - waiting for MariaDB..." + sleep 2 + done + if [ $attempt -eq $max_attempts ]; then + echo "MariaDB did not start in time" + exit 1 + fi + # Additional wait to ensure full initialization + sleep 5 + working-directory: ${{ matrix.node }}/integration/backend + + - name: Build backend + run: npm run build + working-directory: ${{ matrix.node }}/integration/backend + + - name: Run integration tests + run: npm run test:integration + working-directory: ${{ matrix.node }}/integration/backend + env: + MEMPOOL_CONFIG_FILE: ./mempool-config.test.json + + - name: Start backend server and verify connectivity + run: | + # Start server in background with timeout + timeout 30s node dist/index.js & + SERVER_PID=$! + + # Wait for server to start + echo "Waiting for server to start..." + sleep 10 + + # Check if server is still running + if ps -p $SERVER_PID > /dev/null 2>&1; then + echo "Server started successfully and connected to database!" + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + exit 0 + else + echo "Server failed to start or exited prematurely" + exit 1 + fi + working-directory: ${{ matrix.node }}/integration/backend + env: + MEMPOOL_CONFIG_FILE: ./mempool-config.test.json + + - name: Cleanup containers + if: always() + run: docker-compose -f docker-compose.test.yml down -v + working-directory: ${{ matrix.node }}/integration/backend + + - name: Display logs on failure + if: failure() + run: | + echo "=== MariaDB logs ===" + docker-compose -f docker-compose.test.yml logs db-test || true + working-directory: ${{ matrix.node }}/integration/backend + diff --git a/backend/docker-compose.test.yml b/backend/docker-compose.test.yml new file mode 100644 index 000000000..491fa3ec2 --- /dev/null +++ b/backend/docker-compose.test.yml @@ -0,0 +1,20 @@ +version: "3.7" + +services: + db-test: + image: mariadb:10.5.21 + environment: + MYSQL_DATABASE: "mempool_test" + MYSQL_USER: "mempool_test" + MYSQL_PASSWORD: "mempool_test" + MYSQL_ROOT_PASSWORD: "admin" + ports: + - "33306:3306" + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "mempool_test", "-pmempool_test"] + interval: 5s + timeout: 5s + retries: 10 + tmpfs: + - /var/lib/mysql + diff --git a/backend/jest.config.ts b/backend/jest.config.ts index 43246c518..ae4a6b3b2 100644 --- a/backend/jest.config.ts +++ b/backend/jest.config.ts @@ -16,5 +16,9 @@ const config: Config.InitialOptions = { setupFiles: [ "./testSetup.ts", ], + testPathIgnorePatterns: [ + "/node_modules/", + "/__integration_tests__/", + ], } export default config; diff --git a/backend/jest.integration.config.ts b/backend/jest.integration.config.ts new file mode 100644 index 000000000..f395e94be --- /dev/null +++ b/backend/jest.integration.config.ts @@ -0,0 +1,21 @@ +import type { Config } from "@jest/types" + +const config: Config.InitialOptions = { + preset: "ts-jest", + testEnvironment: "node", + verbose: true, + automock: false, + collectCoverage: false, + coverageProvider: "v8", + testMatch: [ + "**/__integration_tests__/**/*.test.ts" + ], + globalSetup: "./jest.integration.setup.ts", // Start database before all tests + setupFiles: [ + "./testSetup.integration.ts", + ], + globalTeardown: "./jest.integration.teardown.ts", // Stop database after all tests + maxWorkers: 1, // Force sequential execution +} +export default config; + diff --git a/backend/jest.integration.setup.ts b/backend/jest.integration.setup.ts new file mode 100644 index 000000000..16a33dc7f --- /dev/null +++ b/backend/jest.integration.setup.ts @@ -0,0 +1,50 @@ +// Setup that runs BEFORE setupFiles +// This ensures MEMPOOL_CONFIG_FILE is set before any modules are loaded +import * as path from 'path'; +import { execSync } from 'child_process'; + +// Set the config file path if not already set +if (!process.env.MEMPOOL_CONFIG_FILE) { + process.env.MEMPOOL_CONFIG_FILE = path.join(__dirname, 'mempool-config.test.json'); +} + +// Start the Docker test database container +module.exports = async () => { + console.log('Starting test database container...'); + try { + const composeFile = path.join(__dirname, 'docker-compose.test.yml'); + + // Start the container + execSync(`docker-compose -f "${composeFile}" up -d`, { + stdio: 'inherit', + cwd: __dirname + }); + + // Wait for database to be ready + console.log('Waiting for database to be ready...'); + let attempts = 0; + const maxAttempts = 30; + + while (attempts < maxAttempts) { + try { + execSync(`docker-compose -f "${composeFile}" exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent`, { + cwd: __dirname, + stdio: 'pipe' + }); + console.log('Database is ready!'); + break; + } catch (e) { + attempts++; + if (attempts >= maxAttempts) { + throw new Error('Database did not start in time'); + } + // Wait 1 second before retrying + await new Promise(resolve => setTimeout(resolve, 1000)); + } + } + } catch (error) { + console.error('Failed to start test database:', error instanceof Error ? error.message : error); + throw error; + } +}; + diff --git a/backend/jest.integration.teardown.ts b/backend/jest.integration.teardown.ts new file mode 100644 index 000000000..e8e94fcf9 --- /dev/null +++ b/backend/jest.integration.teardown.ts @@ -0,0 +1,81 @@ +import DB from './src/database'; +import logger from './src/logger'; +import mempool from './src/api/mempool'; +import { execSync } from 'child_process'; +import * as path from 'path'; + +module.exports = async () => { + try { + // Final cleanup after all tests + const tables = [ + 'blocks_audits', + 'blocks_summaries', + 'blocks_prices', + 'blocks_templates', + 'cpfp_clusters', + 'blocks', + 'difficulty_adjustments', + 'hashrates', + 'prices', + 'node_records', + 'nodes_sockets', + 'nodes', + 'lightning_stats', + 'transactions', + 'elements_pegs', + 'federation_txos', + 'pools' + ]; + + await DB.query('SET FOREIGN_KEY_CHECKS = 0'); + + for (const table of tables) { + try { + // Use 'silent' error logging to avoid noise for optional tables that don't exist + await DB.query(`TRUNCATE TABLE ${table}`, [], 'silent'); + } catch (e) { + // Table might not exist - silently ignore + } + } + + await DB.query('SET FOREIGN_KEY_CHECKS = 1'); + + logger.info('Integration tests cleanup completed'); + + // Close the database connection pool to prevent Jest from hanging + await DB.close(); + logger.info('Database connection pool closed'); + + // Clean up singleton resources that have timers or sockets + mempool.destroy(); + logger.info('Mempool resources cleaned up'); + + // Close logger's UDP socket last (after all logging is done) + logger.close(); + + // Stop and remove the Docker test database container + try { + const composeFile = path.join(__dirname, 'docker-compose.test.yml'); + execSync(`docker-compose -f "${composeFile}" down -v`, { + stdio: 'inherit', + cwd: __dirname + }); + console.log('Test database container stopped and removed'); + } catch (error) { + console.error('Failed to stop Docker container:', error instanceof Error ? error.message : error); + } + } catch (error) { + // Use console.error since logger might be closed + console.error('Failed to cleanup after integration tests:', error instanceof Error ? error.message : error); + } finally { + // Ensure we always try to close connections even if cleanup fails + try { + await DB.close(); + mempool.destroy(); + logger.close(); + } catch (e) { + // Ignore errors on close + } + } +}; + diff --git a/backend/mempool-config.test.json b/backend/mempool-config.test.json new file mode 100644 index 000000000..54e245e01 --- /dev/null +++ b/backend/mempool-config.test.json @@ -0,0 +1,163 @@ +{ + "MEMPOOL": { + "OFFICIAL": false, + "NETWORK": "mainnet", + "BACKEND": "none", + "ENABLED": true, + "HTTP_PORT": 8999, + "SPAWN_CLUSTER_PROCS": 0, + "API_URL_PREFIX": "/api/v1/", + "POLL_RATE_MS": 2000, + "CACHE_DIR": "./cache", + "CACHE_ENABLED": false, + "CLEAR_PROTECTION_MINUTES": 20, + "RECOMMENDED_FEE_PERCENTILE": 50, + "BLOCK_WEIGHT_UNITS": 4000000, + "INITIAL_BLOCKS_AMOUNT": 8, + "MEMPOOL_BLOCKS_AMOUNT": 8, + "INDEXING_BLOCKS_AMOUNT": 11000, + "BLOCKS_SUMMARIES_INDEXING": false, + "GOGGLES_INDEXING": false, + "USE_SECOND_NODE_FOR_MINFEE": false, + "EXTERNAL_ASSETS": [], + "EXTERNAL_MAX_RETRY": 1, + "EXTERNAL_RETRY_INTERVAL": 0, + "USER_AGENT": "mempool", + "STDOUT_LOG_MIN_PRIORITY": "debug", + "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": true, + "LIMIT_GBT": false, + "CPFP_INDEXING": false, + "DISK_CACHE_BLOCK_INTERVAL": 6, + "MAX_PUSH_TX_SIZE_WEIGHT": 4000000, + "ALLOW_UNREACHABLE": true, + "PRICE_UPDATES_PER_HOUR": 1, + "MAX_TRACKED_ADDRESSES": 100, + "UNIX_SOCKET_PATH": "" + }, + "CORE_RPC": { + "HOST": "127.0.0.1", + "PORT": 8332, + "USERNAME": "mempool", + "PASSWORD": "mempool", + "TIMEOUT": 60000, + "COOKIE": false, + "COOKIE_PATH": "/path/to/bitcoin/.cookie", + "DEBUG_LOG_PATH": "/path/to/bitcoin/debug.log" + }, + "ELECTRUM": { + "HOST": "127.0.0.1", + "PORT": 50002, + "TLS_ENABLED": true + }, + "ESPLORA": { + "REST_API_URL": "http://127.0.0.1:3000", + "UNIX_SOCKET_PATH": "/tmp/esplora-bitcoin-mainnet", + "BATCH_QUERY_BASE_SIZE": 1000, + "RETRY_UNIX_SOCKET_AFTER": 30000, + "REQUEST_TIMEOUT": 10000, + "FALLBACK_TIMEOUT": 5000, + "FALLBACK": [], + "MAX_BEHIND_TIP": 2 + }, + "SECOND_CORE_RPC": { + "HOST": "127.0.0.1", + "PORT": 8332, + "USERNAME": "mempool", + "PASSWORD": "mempool", + "TIMEOUT": 60000, + "COOKIE": false, + "COOKIE_PATH": "/path/to/bitcoin/.cookie" + }, + "DATABASE": { + "ENABLED": true, + "HOST": "127.0.0.1", + "PORT": 33306, + "SOCKET": "", + "DATABASE": "mempool_test", + "USERNAME": "mempool_test", + "PASSWORD": "mempool_test", + "TIMEOUT": 180000, + "PID_DIR": "" + }, + "SYSLOG": { + "ENABLED": false, + "HOST": "127.0.0.1", + "PORT": 514, + "MIN_PRIORITY": "info", + "FACILITY": "local7" + }, + "STATISTICS": { + "ENABLED": true, + "TX_PER_SECOND_SAMPLE_PERIOD": 150 + }, + "MAXMIND": { + "ENABLED": false, + "GEOLITE2_CITY": "/usr/local/share/GeoIP/GeoLite2-City.mmdb", + "GEOLITE2_ASN": "/usr/local/share/GeoIP/GeoLite2-ASN.mmdb", + "GEOIP2_ISP": "/usr/local/share/GeoIP/GeoIP2-ISP.mmdb" + }, + "LIGHTNING": { + "ENABLED": false, + "BACKEND": "lnd", + "STATS_REFRESH_INTERVAL": 600, + "GRAPH_REFRESH_INTERVAL": 600, + "LOGGER_UPDATE_INTERVAL": 30, + "FORENSICS_INTERVAL": 43200, + "FORENSICS_RATE_LIMIT": 20 + }, + "LND": { + "TLS_CERT_PATH": "tls.cert", + "MACAROON_PATH": "readonly.macaroon", + "REST_API_URL": "https://localhost:8080", + "TIMEOUT": 10000 + }, + "CLIGHTNING": { + "SOCKET": "lightning-rpc" + }, + "SOCKS5PROXY": { + "ENABLED": false, + "USE_ONION": true, + "HOST": "127.0.0.1", + "PORT": 9050, + "USERNAME": "", + "PASSWORD": "" + }, + "EXTERNAL_DATA_SERVER": { + "MEMPOOL_API": "https://mempool.space/api/v1", + "MEMPOOL_ONION": "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/api/v1", + "LIQUID_API": "https://liquid.network/api/v1", + "LIQUID_ONION": "http://liquidmom47f6s3m53ebfxn47p76a6tlnxib3wp6deux7wuzotdr6cyd.onion/api/v1" + }, + "REDIS": { + "ENABLED": false, + "UNIX_SOCKET_PATH": "/tmp/redis.sock", + "BATCH_QUERY_BASE_SIZE": 5000 + }, + "REPLICATION": { + "ENABLED": false, + "AUDIT": false, + "AUDIT_START_HEIGHT": 774000, + "STATISTICS": false, + "STATISTICS_START_TIME": 1481932800, + "SERVERS": [] + }, + "MEMPOOL_SERVICES": { + "API": "https://mempool.space/api/v1/services", + "ACCELERATIONS": false + }, + "STRATUM": { + "ENABLED": false, + "API": "http://localhost:1234" + }, + "FIAT_PRICE": { + "ENABLED": false, + "PAID": false, + "API_KEY": "" + } +} + diff --git a/backend/package.json b/backend/package.json index 5ac9262d5..aec9b94b3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -34,6 +34,8 @@ "reindex-all-blocks": "npm run start-production --update-pools --reindex-blocks", "test": "./node_modules/.bin/jest --coverage", "test:ci": "CI=true ./node_modules/.bin/jest --coverage", + "test:integration": "MEMPOOL_CONFIG_FILE=$(pwd)/mempool-config.test.json ./node_modules/.bin/jest --config=jest.integration.config.ts --runInBand --forceExit", + "test:with-db": "bash ./scripts/test-with-db.sh", "lint": "./node_modules/.bin/eslint . --ext .ts", "lint:fix": "./node_modules/.bin/eslint . --ext .ts --fix", "prettier": "./node_modules/.bin/prettier --write \"src/**/*.{js,ts}\"" diff --git a/backend/scripts/debug-integration-tests.sh b/backend/scripts/debug-integration-tests.sh new file mode 100755 index 000000000..15bba0f68 --- /dev/null +++ b/backend/scripts/debug-integration-tests.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Script to debug integration tests +# Usage: ./scripts/debug-integration-tests.sh [test-file-pattern] + +set -e + +# Colors +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +# Get the directory of this script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +BACKEND_DIR="$( cd "$SCRIPT_DIR/.." && pwd )" + +cd "$BACKEND_DIR" + +# Check if MariaDB is running +if ! docker-compose -f docker-compose.test.yml ps | grep -q "Up"; then + echo -e "${YELLOW}Starting MariaDB container...${NC}" + docker-compose -f docker-compose.test.yml up -d + + # Wait for MariaDB + echo -e "${YELLOW}Waiting for MariaDB...${NC}" + sleep 5 +fi + +# Run tests with pattern if provided +if [ -n "$1" ]; then + echo -e "${GREEN}Running tests matching: $1${NC}" + MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npx jest --config=jest.integration.config.ts --runInBand --verbose "$1" +else + echo -e "${GREEN}Running all integration tests${NC}" + MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npm run test:integration +fi + +echo -e "${GREEN}Tests completed${NC}" + diff --git a/backend/scripts/test-with-db.sh b/backend/scripts/test-with-db.sh new file mode 100755 index 000000000..15cb46797 --- /dev/null +++ b/backend/scripts/test-with-db.sh @@ -0,0 +1,94 @@ +#!/bin/bash + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo -e "${GREEN}Starting integration tests with MariaDB...${NC}" + +# Get the directory of this script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +BACKEND_DIR="$( cd "$SCRIPT_DIR/.." && pwd )" + +cd "$BACKEND_DIR" + +# Function to cleanup on exit +cleanup() { + echo -e "\n${YELLOW}Cleaning up...${NC}" + # Kill the backend server if it's running + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + fi + # Stop containers and remove volumes, but don't fail on network errors + docker-compose -f docker-compose.test.yml down -v 2>&1 | grep -v "Resource is still in use" || true +} + +# Set trap to cleanup on exit +trap cleanup EXIT INT TERM + +# Stop any existing test containers +echo -e "${YELLOW}Stopping any existing test containers...${NC}" +docker-compose -f docker-compose.test.yml down -v 2>/dev/null || true + +# Start MariaDB container +echo -e "${GREEN}Starting MariaDB container...${NC}" +docker-compose -f docker-compose.test.yml up -d + +# Wait for MariaDB to be ready +echo -e "${YELLOW}Waiting for MariaDB to be ready...${NC}" +max_attempts=30 +attempt=0 +while [ $attempt -lt $max_attempts ]; do + if docker-compose -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then + echo -e "${GREEN}MariaDB is ready!${NC}" + break + fi + attempt=$((attempt + 1)) + echo -e "${YELLOW}Attempt $attempt/$max_attempts - waiting for MariaDB...${NC}" + sleep 2 +done + +if [ $attempt -eq $max_attempts ]; then + echo -e "${RED}MariaDB did not start in time${NC}" + exit 1 +fi + +# Additional wait to ensure MariaDB is fully initialized +sleep 3 + +# Build the backend +echo -e "${GREEN}Building backend...${NC}" +npm run build + +# Run integration tests with absolute path to config +echo -e "${GREEN}Running integration tests...${NC}" +MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npm run test:integration + +# Start the backend server in the background +echo -e "${GREEN}Starting backend server...${NC}" +MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" node dist/index.js & +SERVER_PID=$! + +# Wait for server to start and verify connection +echo -e "${YELLOW}Waiting for server to start and connect to database...${NC}" +sleep 10 + +# Check if server is still running +if ps -p $SERVER_PID > /dev/null 2>&1; then + echo -e "${GREEN}Server started successfully and connected to database!${NC}" + + # Kill the server (it will be in the cleanup function too, but do it here as well) + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + SERVER_PID="" +else + echo -e "${RED}Server failed to start or exited prematurely${NC}" + exit 1 +fi + +echo -e "${GREEN}All tests passed successfully!${NC}" + diff --git a/backend/src/__integration_tests__/blocks-repository.test.ts b/backend/src/__integration_tests__/blocks-repository.test.ts new file mode 100644 index 000000000..b9f449538 --- /dev/null +++ b/backend/src/__integration_tests__/blocks-repository.test.ts @@ -0,0 +1,134 @@ +import BlocksRepository from '../repositories/BlocksRepository'; +import { setupTestDatabase, waitForDatabase, cleanupTestData, insertTestPool, insertTestBlock } from './test-helpers'; + +describe('BlocksRepository Integration Tests', () => { + let defaultPoolId: number; + + beforeAll(async () => { + await waitForDatabase(); + await setupTestDatabase(); + }, 120000); + + beforeEach(async () => { + await cleanupTestData(); + // Create a default pool for all blocks + defaultPoolId = await insertTestPool({ + name: 'Unknown', + slug: 'unknown', + addresses: '[]', + regexes: '[]' + }); + }); + + afterAll(async () => { + await cleanupTestData(); + }); + + test('should insert and retrieve a block', async () => { + const blockHash = '00000000000000000001a0e3e9b2e6d6e8a4b0e9b2e6d6e8a4b0e9b2e6d6e8a4'; + const height = 800000; + + await insertTestBlock({ + height: height, + hash: blockHash, + blockTimestamp: new Date('2023-07-16T00:00:00Z'), + size: 1500000, + weight: 3999000, + tx_count: 3000, + difficulty: 53911173001054.59, + poolId: defaultPoolId + }); + + const block = await BlocksRepository.$getBlockByHeight(height); + + expect(block).toBeDefined(); + expect(block!.height).toBe(height); + expect(block!.id).toBe(blockHash); + }); + + test('should get block by hash', async () => { + const blockHash = '00000000000000000002b0e3e9b2e6d6e8a4b0e9b2e6d6e8a4b0e9b2e6d6e8a4'; + const height = 800001; + + await insertTestBlock({ + height: height, + hash: blockHash, + tx_count: 2500, + poolId: defaultPoolId + }); + + const block = await BlocksRepository.$getBlockByHash(blockHash); + + expect(block).toBeDefined(); + expect(block!.id).toBe(blockHash); + expect(block!.height).toBe(height); + }); + + test('should handle non-existent block', async () => { + const block = await BlocksRepository.$getBlockByHeight(999999); + expect(block).toBeNull(); + }); + + test('should check for missing blocks in range', async () => { + // Insert blocks with a gap + await insertTestBlock({ + height: 800100, + hash: '0000000000000000000100000000000000000000000000000000000000000001', + poolId: defaultPoolId + }); + await insertTestBlock({ + height: 800102, + hash: '0000000000000000000100000000000000000000000000000000000000000003', + poolId: defaultPoolId + }); + + const missingBlocks = await BlocksRepository.$getMissingBlocksBetweenHeights(800100, 800102); + + expect(missingBlocks).toContain(800101); + }); + + test('should get latest block height', async () => { + await insertTestBlock({ + height: 800200, + hash: '0000000000000000000200000000000000000000000000000000000000000001', + poolId: defaultPoolId + }); + await insertTestBlock({ + height: 800201, + hash: '0000000000000000000200000000000000000000000000000000000000000002', + poolId: defaultPoolId + }); + + const height = await BlocksRepository.$mostRecentBlockHeight(); + + expect(height).toBe(800201); + }); + + test('should handle block with pool association', async () => { + // Insert a pool and get its auto-generated ID + const testPoolId = await insertTestPool({ + name: 'Test Pool', + slug: 'test-pool', + addresses: '[]', + regexes: '[]' + }); + + const blockHash = '0000000000000000000300000000000000000000000000000000000000000001'; + await insertTestBlock({ + height: 800300, + hash: blockHash, + poolId: testPoolId + }); + + const block = await BlocksRepository.$getBlockByHash(blockHash); + + expect(block).toBeDefined(); + expect(block).not.toBeNull(); + // The pool should be populated with the test pool's data + if (block && block.extras?.pool) { + expect(block.extras.pool.name).toBe('Test Pool'); + expect(block.extras.pool.slug).toBe('test-pool'); + } + }); +}); + diff --git a/backend/src/__integration_tests__/database-connection.test.ts b/backend/src/__integration_tests__/database-connection.test.ts new file mode 100644 index 000000000..9363b404f --- /dev/null +++ b/backend/src/__integration_tests__/database-connection.test.ts @@ -0,0 +1,45 @@ +import DB from '../database'; +import config from '../config'; +import { setupTestDatabase, waitForDatabase, getTestDatabaseConfig } from './test-helpers'; + +describe('Database Connection Integration Tests', () => { + beforeAll(async () => { + // Wait for database to be ready + await waitForDatabase(); + }, 60000); + + test('should connect to the test database', async () => { + const dbConfig = getTestDatabaseConfig(); + expect(dbConfig.enabled).toBe(true); + expect(dbConfig.database).toBe('mempool_test'); + expect(dbConfig.port).toBe(33306); + }); + + test('should execute a simple query', async () => { + const [result] = await DB.query('SELECT 1 as value'); + expect(result).toHaveLength(1); + expect(result[0].value).toBe(1); + }); + + test('should execute a query with parameters', async () => { + const [result] = await DB.query('SELECT ? as sum', [42]); + expect(result).toHaveLength(1); + expect(result[0].sum).toBe(42); + }); + + test('should check database connection', async () => { + await expect(DB.checkDbConnection()).resolves.not.toThrow(); + }); + + test('should handle query timeout configuration', async () => { + expect(config.DATABASE.TIMEOUT).toBeGreaterThan(0); + }); + + test('should have correct database configuration', () => { + expect(config.DATABASE.HOST).toBe('127.0.0.1'); + expect(config.DATABASE.USERNAME).toBe('mempool_test'); + expect(config.DATABASE.PASSWORD).toBe('mempool_test'); + expect(config.DATABASE.DATABASE).toBe('mempool_test'); + }); +}); + diff --git a/backend/src/__integration_tests__/database-migration.test.ts b/backend/src/__integration_tests__/database-migration.test.ts new file mode 100644 index 000000000..7b8a5dd74 --- /dev/null +++ b/backend/src/__integration_tests__/database-migration.test.ts @@ -0,0 +1,97 @@ +import DB from '../database'; +import { setupTestDatabase, waitForDatabase } from './test-helpers'; + +describe('Database Migration Integration Tests', () => { + beforeAll(async () => { + await waitForDatabase(); + await setupTestDatabase(); + }, 120000); + + test('should create state table', async () => { + const [result] = await DB.query( + `SELECT COUNT(*) as count + FROM information_schema.tables + WHERE table_schema = 'mempool_test' + AND table_name = 'state'` + ); + expect(result[0].count).toBe(1); + }); + + test('should have schema version in state table', async () => { + const [result] = await DB.query("SELECT number FROM state WHERE name = 'schema_version'"); + expect(result).toHaveLength(1); + expect(result[0].number).toBeGreaterThan(0); + }); + + test('should create blocks table', async () => { + const [result] = await DB.query( + `SELECT COUNT(*) as count + FROM information_schema.tables + WHERE table_schema = 'mempool_test' + AND table_name = 'blocks'` + ); + expect(result[0].count).toBe(1); + }); + + test('should create pools table', async () => { + const [result] = await DB.query( + `SELECT COUNT(*) as count + FROM information_schema.tables + WHERE table_schema = 'mempool_test' + AND table_name = 'pools'` + ); + expect(result[0].count).toBe(1); + }); + + test('should create hashrates table', async () => { + const [result] = await DB.query( + `SELECT COUNT(*) as count + FROM information_schema.tables + WHERE table_schema = 'mempool_test' + AND table_name = 'hashrates'` + ); + expect(result[0].count).toBe(1); + }); + + test('should create prices table', async () => { + const [result] = await DB.query( + `SELECT COUNT(*) as count + FROM information_schema.tables + WHERE table_schema = 'mempool_test' + AND table_name = 'prices'` + ); + expect(result[0].count).toBe(1); + }); + + test('blocks table should have required columns', async () => { + const [columns] = await DB.query( + `SELECT COLUMN_NAME + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = 'mempool_test' + AND TABLE_NAME = 'blocks'` + ); + + const columnNames = columns.map((col: any) => col.COLUMN_NAME); + expect(columnNames).toContain('height'); + expect(columnNames).toContain('hash'); + expect(columnNames).toContain('blockTimestamp'); + expect(columnNames).toContain('size'); + expect(columnNames).toContain('weight'); + expect(columnNames).toContain('tx_count'); + }); + + test('pools table should have required columns', async () => { + const [columns] = await DB.query( + `SELECT COLUMN_NAME + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = 'mempool_test' + AND TABLE_NAME = 'pools'` + ); + + const columnNames = columns.map((col: any) => col.COLUMN_NAME); + expect(columnNames).toContain('id'); + expect(columnNames).toContain('name'); + expect(columnNames).toContain('slug'); + }); +}); + diff --git a/backend/src/__integration_tests__/pools-repository.test.ts b/backend/src/__integration_tests__/pools-repository.test.ts new file mode 100644 index 000000000..7920e7f88 --- /dev/null +++ b/backend/src/__integration_tests__/pools-repository.test.ts @@ -0,0 +1,122 @@ +import PoolsRepository from '../repositories/PoolsRepository'; +import { setupTestDatabase, waitForDatabase, cleanupTestData, insertTestPool } from './test-helpers'; + +describe('PoolsRepository Integration Tests', () => { + beforeAll(async () => { + await waitForDatabase(); + await setupTestDatabase(); + }, 120000); + + beforeEach(async () => { + await cleanupTestData(); + }); + + afterAll(async () => { + await cleanupTestData(); + }); + + test('should insert and retrieve a pool', async () => { + const poolData = { + name: 'Foundry USA', + slug: 'foundryusa', + link: 'https://foundrydigital.com', + addresses: JSON.stringify(['bc1qxhmdufsvnuaaaer4ynz88fspdsxq2h9e9cetdj']), + regexes: JSON.stringify(['/Foundry USA Pool/']) + }; + + const poolId = await insertTestPool(poolData); + expect(poolId).toBeGreaterThan(0); + + const pools = await PoolsRepository.$getPools(); + const insertedPool = pools.find(p => p.id === poolId); + + expect(insertedPool).toBeDefined(); + expect(insertedPool?.name).toBe(poolData.name); + expect(insertedPool?.slug).toBe(poolData.slug); + }); + + test('should get pool by slug', async () => { + await insertTestPool({ + name: 'AntPool', + slug: 'antpool', + link: 'https://antpool.com' + }); + + const pool = await PoolsRepository.$getPool('antpool'); + + expect(pool).toBeDefined(); + expect(pool!.name).toBe('AntPool'); + expect(pool!.slug).toBe('antpool'); + }); + + test('should get all pools', async () => { + await insertTestPool({ + name: 'Pool 1', + slug: 'pool-1' + }); + await insertTestPool({ + name: 'Pool 2', + slug: 'pool-2' + }); + await insertTestPool({ + name: 'Pool 3', + slug: 'pool-3' + }); + + const pools = await PoolsRepository.$getPools(); + + expect(pools.length).toBeGreaterThanOrEqual(3); + }); + + test('should handle pool with addresses', async () => { + const addresses = ['bc1qtest1', 'bc1qtest2', '3TestAddress']; + await insertTestPool({ + name: 'Multi Address Pool', + slug: 'multi-address-pool', + addresses: JSON.stringify(addresses) + }); + + const pool = await PoolsRepository.$getPool('multi-address-pool', false); + + expect(pool).toBeDefined(); + const poolAddresses = JSON.parse(pool!.addresses); + expect(poolAddresses).toHaveLength(3); + expect(poolAddresses).toContain('bc1qtest1'); + }); + + test('should handle pool with regexes', async () => { + const regexes = ['/Pool Name/', '/Alternative Name/']; + await insertTestPool({ + name: 'Regex Pool', + slug: 'regex-pool', + regexes: JSON.stringify(regexes) + }); + + const pool = await PoolsRepository.$getPool('regex-pool', false); + + expect(pool).toBeDefined(); + const poolRegexes = JSON.parse(pool!.regexes); + expect(poolRegexes).toHaveLength(2); + expect(poolRegexes[0]).toBe('/Pool Name/'); + }); + + test('should handle non-existent pool', async () => { + const pool = await PoolsRepository.$getPool('non-existent-pool-slug'); + expect(pool).toBeNull(); + }); + + test('should update pool information', async () => { + const poolDbId = await insertTestPool({ + name: 'Original Pool Name', + slug: 'original-pool' + }); + + // Update the pool name + await PoolsRepository.$renameMiningPool(poolDbId, 'updated-pool', 'Updated Pool Name'); + + const pool = await PoolsRepository.$getPool('updated-pool'); + expect(pool).toBeDefined(); + expect(pool!.name).toBe('Updated Pool Name'); + }); +}); + diff --git a/backend/src/__integration_tests__/test-helpers.ts b/backend/src/__integration_tests__/test-helpers.ts new file mode 100644 index 000000000..74752d9d2 --- /dev/null +++ b/backend/src/__integration_tests__/test-helpers.ts @@ -0,0 +1,190 @@ +import DB from '../database'; +import config from '../config'; +import logger from '../logger'; +import databaseMigration from '../api/database-migration'; + +/** + * Initialize the test database with schema migrations + */ +export async function setupTestDatabase(): Promise { + try { + await DB.checkDbConnection(); + await databaseMigration.$initializeOrMigrateDatabase(); + } catch (error) { + logger.err('Failed to setup test database: ' + (error instanceof Error ? error.message : error)); + throw error; + } +} + +/** + * Clean up all data from test tables (but preserve schema) + * This runs between each test to ensure isolation + */ +export async function cleanupTestData(): Promise { + // Order matters: delete child tables before parent tables + const tables = [ + 'blocks_audits', + 'blocks_summaries', + 'blocks_prices', + 'blocks_templates', + 'cpfp_clusters', + 'blocks', // blocks references pools + 'difficulty_adjustments', + 'hashrates', + 'prices', + 'node_records', + 'nodes_sockets', + 'nodes', + 'lightning_stats', + 'transactions', + 'elements_pegs', + 'federation_txos', + 'pools' + ]; + + try { + // Disable foreign key checks temporarily for faster cleanup + await DB.query('SET FOREIGN_KEY_CHECKS = 0'); + + for (const table of tables) { + try { + // Use 'silent' error logging to avoid noise for optional tables that don't exist + await DB.query(`TRUNCATE TABLE ${table}`, [], 'silent'); + } catch (e) { + // Table might not exist, that's okay for optional tables + // Silently ignore - no need to log since these are expected for optional features + } + } + + // Re-enable foreign key checks + await DB.query('SET FOREIGN_KEY_CHECKS = 1'); + } catch (error) { + // Try to re-enable foreign keys even if cleanup failed + try { + await DB.query('SET FOREIGN_KEY_CHECKS = 1'); + } catch (e) { + // Ignore + } + logger.err('Failed to cleanup test data: ' + (error instanceof Error ? error.message : error)); + throw error; + } +} + +/** + * Wait for database to be ready + */ +export async function waitForDatabase(maxRetries = 30, retryInterval = 1000): Promise { + for (let i = 0; i < maxRetries; i++) { + try { + await DB.query('SELECT 1'); + logger.info('Database is ready'); + return; + } catch (error) { + logger.debug(`Waiting for database... attempt ${i + 1}/${maxRetries}`); + await new Promise(resolve => setTimeout(resolve, retryInterval)); + } + } + throw new Error('Database did not become ready in time'); +} + +/** + * Get database configuration for tests + */ +export function getTestDatabaseConfig() { + return { + host: config.DATABASE.HOST, + port: config.DATABASE.PORT, + database: config.DATABASE.DATABASE, + username: config.DATABASE.USERNAME, + enabled: config.DATABASE.ENABLED + }; +} + +/** + * Insert a test pool into the database + */ +export async function insertTestPool(poolData: { + id?: number; + name: string; + link?: string; + slug: string; + addresses?: string; + regexes?: string; +}) { + const [result] = await DB.query( + `INSERT INTO pools (unique_id, name, link, slug, addresses, regexes) + VALUES (?, ?, ?, ?, ?, ?)`, + [ + poolData.id || -1, + poolData.name, + poolData.link || '', + poolData.slug, + poolData.addresses || '[]', + poolData.regexes || '[]' + ] + ); + return result.insertId; +} + +/** + * Insert a test block into the database + */ +export async function insertTestBlock(blockData: { + height: number; + hash: string; + blockTimestamp?: Date; + size?: number; + weight?: number; + tx_count?: number; + difficulty?: number; + poolId?: number | null; +}) { + const timestamp = blockData.blockTimestamp || new Date(); + const size = blockData.size || 1000000; + const weight = blockData.weight || 4000000; + const txCount = blockData.tx_count || 2000; + + await DB.query( + `INSERT INTO blocks ( + height, hash, blockTimestamp, size, weight, tx_count, + difficulty, pool_id, version, bits, nonce, merkle_root, + previous_block_hash, median_timestamp, stale, + fees, fee_span, median_fee, + avg_tx_size, total_inputs, total_outputs, total_output_amt, + segwit_total_txs, segwit_total_size, segwit_total_weight, + header, utxoset_change + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [ + blockData.height, + blockData.hash, + timestamp, + size, + weight, + txCount, + blockData.difficulty || 1.0, + blockData.poolId !== undefined ? blockData.poolId : null, + 0x20000000, + 0x1d00ffff, + 0, + '0000000000000000000000000000000000000000000000000000000000000000', + '0000000000000000000000000000000000000000000000000000000000000000', + timestamp, + 0, // stale = false + // Required fields with defaults + 50000000, // fees (in sats) + JSON.stringify([0, 0, 0, 0, 0, 0, 0]), // fee_span (JSON array) + 10000, // median_fee (in sats) + size / txCount, // avg_tx_size + txCount * 2, // total_inputs (estimate) + txCount * 2, // total_outputs (estimate) + 2100000000000000, // total_output_amt (21M BTC in sats, estimate) + txCount, // segwit_total_txs (assume all segwit for test) + size, // segwit_total_size + weight, // segwit_total_weight + '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', // header (160 chars) + 0 // utxoset_change + ] + ); +} + diff --git a/backend/testSetup.integration.ts b/backend/testSetup.integration.ts new file mode 100644 index 000000000..74efe871b --- /dev/null +++ b/backend/testSetup.integration.ts @@ -0,0 +1,14 @@ +// Integration test setup - uses real implementations, not mocks +// +// Note: We don't mock ./mempool-config.json here because: +// 1. The MEMPOOL_CONFIG_FILE env var points to mempool-config.test.json +// 2. config.ts will load that file via require() if env var is set +// 3. If we mock it, we interfere with the actual config loading +// +// Don't mock these for integration tests - we want real implementations: +// - logger.ts (need real logging) +// - config.ts (need real config from mempool-config.test.json) +// - rbf-cache.ts (might be used by repositories) +// - mempool.ts (might be used by repositories) +// - memory-cache.ts (might be used by repositories) + From 89a0d5ef942efc885cbe5092ddffc4a9772d3662 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:32:48 -0800 Subject: [PATCH 472/534] Normalize local and GHA runs --- .github/workflows/backend-integration.yml | 53 ++++++++++------------- backend/jest.integration.setup.ts | 26 ++++++++++- backend/jest.integration.teardown.ts | 39 +++++++++++++---- backend/scripts/test-with-db.sh | 23 +++++++--- 4 files changed, 95 insertions(+), 46 deletions(-) diff --git a/.github/workflows/backend-integration.yml b/.github/workflows/backend-integration.yml index d9841e3dd..5ba537068 100644 --- a/.github/workflows/backend-integration.yml +++ b/.github/workflows/backend-integration.yml @@ -69,45 +69,38 @@ jobs: run: npm ci working-directory: ${{ matrix.node }}/integration/backend - - name: Start MariaDB service - run: docker-compose -f docker-compose.test.yml up -d - working-directory: ${{ matrix.node }}/integration/backend - - - name: Wait for MariaDB to be ready - run: | - max_attempts=30 - attempt=0 - while [ $attempt -lt $max_attempts ]; do - if docker-compose -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then - echo "MariaDB is ready!" - break - fi - attempt=$((attempt + 1)) - echo "Attempt $attempt/$max_attempts - waiting for MariaDB..." - sleep 2 - done - if [ $attempt -eq $max_attempts ]; then - echo "MariaDB did not start in time" - exit 1 - fi - # Additional wait to ensure full initialization - sleep 5 - working-directory: ${{ matrix.node }}/integration/backend - - name: Build backend run: npm run build working-directory: ${{ matrix.node }}/integration/backend - - name: Run integration tests + - name: Run integration tests (DB auto-starts via Jest) run: npm run test:integration working-directory: ${{ matrix.node }}/integration/backend env: MEMPOOL_CONFIG_FILE: ./mempool-config.test.json + - name: Start MariaDB for server test + run: docker compose -f docker-compose.test.yml up -d + working-directory: ${{ matrix.node }}/integration/backend + + - name: Wait for MariaDB + run: | + echo "Waiting for MariaDB to be ready..." + for i in {1..30}; do + if docker compose -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then + echo "MariaDB is ready!" + break + fi + echo "Attempt $i/30..." + sleep 2 + done + sleep 3 + working-directory: ${{ matrix.node }}/integration/backend + - name: Start backend server and verify connectivity run: | - # Start server in background with timeout - timeout 30s node dist/index.js & + # Start server in background + node dist/index.js & SERVER_PID=$! # Wait for server to start @@ -130,13 +123,13 @@ jobs: - name: Cleanup containers if: always() - run: docker-compose -f docker-compose.test.yml down -v + run: docker compose -f docker-compose.test.yml down -v working-directory: ${{ matrix.node }}/integration/backend - name: Display logs on failure if: failure() run: | echo "=== MariaDB logs ===" - docker-compose -f docker-compose.test.yml logs db-test || true + docker compose -f docker-compose.test.yml logs db-test || true working-directory: ${{ matrix.node }}/integration/backend diff --git a/backend/jest.integration.setup.ts b/backend/jest.integration.setup.ts index 16a33dc7f..2156e3cdd 100644 --- a/backend/jest.integration.setup.ts +++ b/backend/jest.integration.setup.ts @@ -8,14 +8,36 @@ if (!process.env.MEMPOOL_CONFIG_FILE) { process.env.MEMPOOL_CONFIG_FILE = path.join(__dirname, 'mempool-config.test.json'); } +// Helper to get docker compose command (v1 or v2) +function getDockerComposeCmd(): string { + try { + execSync('docker compose version', { stdio: 'pipe' }); + return 'docker compose'; + } catch { + try { + execSync('docker-compose version', { stdio: 'pipe' }); + return 'docker-compose'; + } catch { + throw new Error('Neither "docker compose" nor "docker-compose" is available'); + } + } +} + // Start the Docker test database container module.exports = async () => { + // Skip if SKIP_DB_SETUP is set (e.g., when test-with-db.sh manages the database) + if (process.env.SKIP_DB_SETUP) { + console.log('Skipping database setup (managed externally)'); + return; + } + console.log('Starting test database container...'); try { const composeFile = path.join(__dirname, 'docker-compose.test.yml'); + const dockerComposeCmd = getDockerComposeCmd(); // Start the container - execSync(`docker-compose -f "${composeFile}" up -d`, { + execSync(`${dockerComposeCmd} -f "${composeFile}" up -d`, { stdio: 'inherit', cwd: __dirname }); @@ -27,7 +49,7 @@ module.exports = async () => { while (attempts < maxAttempts) { try { - execSync(`docker-compose -f "${composeFile}" exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent`, { + execSync(`${dockerComposeCmd} -f "${composeFile}" exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent`, { cwd: __dirname, stdio: 'pipe' }); diff --git a/backend/jest.integration.teardown.ts b/backend/jest.integration.teardown.ts index e8e94fcf9..c4229a262 100644 --- a/backend/jest.integration.teardown.ts +++ b/backend/jest.integration.teardown.ts @@ -4,6 +4,21 @@ import mempool from './src/api/mempool'; import { execSync } from 'child_process'; import * as path from 'path'; +// Helper to get docker compose command (v1 or v2) +function getDockerComposeCmd(): string { + try { + execSync('docker compose version', { stdio: 'pipe' }); + return 'docker compose'; + } catch { + try { + execSync('docker-compose version', { stdio: 'pipe' }); + return 'docker-compose'; + } catch { + throw new Error('Neither "docker compose" nor "docker-compose" is available'); + } + } +} + module.exports = async () => { try { // Final cleanup after all tests @@ -54,15 +69,21 @@ module.exports = async () => { logger.close(); // Stop and remove the Docker test database container - try { - const composeFile = path.join(__dirname, 'docker-compose.test.yml'); - execSync(`docker-compose -f "${composeFile}" down -v`, { - stdio: 'inherit', - cwd: __dirname - }); - console.log('Test database container stopped and removed'); - } catch (error) { - console.error('Failed to stop Docker container:', error instanceof Error ? error.message : error); + // Skip if SKIP_DB_TEARDOWN is set (e.g., when test-with-db.sh manages the database) + if (!process.env.SKIP_DB_TEARDOWN) { + try { + const composeFile = path.join(__dirname, 'docker-compose.test.yml'); + const dockerComposeCmd = getDockerComposeCmd(); + execSync(`${dockerComposeCmd} -f "${composeFile}" down -v`, { + stdio: 'inherit', + cwd: __dirname + }); + console.log('Test database container stopped and removed'); + } catch (error) { + console.error('Failed to stop Docker container:', error instanceof Error ? error.message : error); + } + } else { + console.log('Skipping Docker cleanup (managed externally)'); } } catch (error) { // Use console.error since logger might be closed diff --git a/backend/scripts/test-with-db.sh b/backend/scripts/test-with-db.sh index 15cb46797..5b29be8ae 100755 --- a/backend/scripts/test-with-db.sh +++ b/backend/scripts/test-with-db.sh @@ -16,6 +16,18 @@ BACKEND_DIR="$( cd "$SCRIPT_DIR/.." && pwd )" cd "$BACKEND_DIR" +# Detect docker compose command (v1 or v2) +if docker compose version &> /dev/null; then + DOCKER_COMPOSE="docker compose" +elif docker-compose version &> /dev/null; then + DOCKER_COMPOSE="docker-compose" +else + echo -e "${RED}Error: Neither 'docker compose' nor 'docker-compose' is available${NC}" + exit 1 +fi + +echo -e "${YELLOW}Using: ${DOCKER_COMPOSE}${NC}" + # Function to cleanup on exit cleanup() { echo -e "\n${YELLOW}Cleaning up...${NC}" @@ -24,7 +36,7 @@ cleanup() { kill $SERVER_PID 2>/dev/null || true fi # Stop containers and remove volumes, but don't fail on network errors - docker-compose -f docker-compose.test.yml down -v 2>&1 | grep -v "Resource is still in use" || true + $DOCKER_COMPOSE -f docker-compose.test.yml down -v 2>&1 | grep -v "Resource is still in use" || true } # Set trap to cleanup on exit @@ -32,18 +44,18 @@ trap cleanup EXIT INT TERM # Stop any existing test containers echo -e "${YELLOW}Stopping any existing test containers...${NC}" -docker-compose -f docker-compose.test.yml down -v 2>/dev/null || true +$DOCKER_COMPOSE -f docker-compose.test.yml down -v 2>/dev/null || true # Start MariaDB container echo -e "${GREEN}Starting MariaDB container...${NC}" -docker-compose -f docker-compose.test.yml up -d +$DOCKER_COMPOSE -f docker-compose.test.yml up -d # Wait for MariaDB to be ready echo -e "${YELLOW}Waiting for MariaDB to be ready...${NC}" max_attempts=30 attempt=0 while [ $attempt -lt $max_attempts ]; do - if docker-compose -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then + if $DOCKER_COMPOSE -f docker-compose.test.yml exec -T db-test mysqladmin ping -h localhost -u mempool_test -pmempool_test --silent 2>/dev/null; then echo -e "${GREEN}MariaDB is ready!${NC}" break fi @@ -65,8 +77,9 @@ echo -e "${GREEN}Building backend...${NC}" npm run build # Run integration tests with absolute path to config +# SKIP_DB_SETUP=1 and SKIP_DB_TEARDOWN=1 tell Jest that we're managing the database lifecycle echo -e "${GREEN}Running integration tests...${NC}" -MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npm run test:integration +SKIP_DB_SETUP=1 SKIP_DB_TEARDOWN=1 MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npm run test:integration # Start the backend server in the background echo -e "${GREEN}Starting backend server...${NC}" From b9e559e9c475756d6461f22cc05827d3b4d83c78 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 6 Nov 2025 10:41:46 -0800 Subject: [PATCH 473/534] Normalize how the config file is read --- .github/workflows/backend-integration.yml | 16 +++++++++++++--- backend/package.json | 2 +- backend/scripts/test-with-db.sh | 8 ++++++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.github/workflows/backend-integration.yml b/.github/workflows/backend-integration.yml index 5ba537068..61e55d3c7 100644 --- a/.github/workflows/backend-integration.yml +++ b/.github/workflows/backend-integration.yml @@ -73,11 +73,21 @@ jobs: run: npm run build working-directory: ${{ matrix.node }}/integration/backend + - name: Verify config file exists + run: | + ls -la mempool-config.test.json + echo "Current directory: ${PWD}" + echo "Config file will be: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json" + test -f mempool-config.test.json || (echo "ERROR: Config file not found!" && exit 1) + working-directory: ${{ matrix.node }}/integration/backend + - name: Run integration tests (DB auto-starts via Jest) - run: npm run test:integration + run: | + echo "MEMPOOL_CONFIG_FILE=$MEMPOOL_CONFIG_FILE" + npm run test:integration working-directory: ${{ matrix.node }}/integration/backend env: - MEMPOOL_CONFIG_FILE: ./mempool-config.test.json + MEMPOOL_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json - name: Start MariaDB for server test run: docker compose -f docker-compose.test.yml up -d @@ -119,7 +129,7 @@ jobs: fi working-directory: ${{ matrix.node }}/integration/backend env: - MEMPOOL_CONFIG_FILE: ./mempool-config.test.json + MEMPOOL_CONFIG_FILE: ${{ github.workspace }}/${{ matrix.node }}/integration/backend/mempool-config.test.json - name: Cleanup containers if: always() diff --git a/backend/package.json b/backend/package.json index aec9b94b3..5a86f015f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -34,7 +34,7 @@ "reindex-all-blocks": "npm run start-production --update-pools --reindex-blocks", "test": "./node_modules/.bin/jest --coverage", "test:ci": "CI=true ./node_modules/.bin/jest --coverage", - "test:integration": "MEMPOOL_CONFIG_FILE=$(pwd)/mempool-config.test.json ./node_modules/.bin/jest --config=jest.integration.config.ts --runInBand --forceExit", + "test:integration": "./node_modules/.bin/jest --config=jest.integration.config.ts --runInBand --forceExit", "test:with-db": "bash ./scripts/test-with-db.sh", "lint": "./node_modules/.bin/eslint . --ext .ts", "lint:fix": "./node_modules/.bin/eslint . --ext .ts --fix", diff --git a/backend/scripts/test-with-db.sh b/backend/scripts/test-with-db.sh index 5b29be8ae..4790b3ca3 100755 --- a/backend/scripts/test-with-db.sh +++ b/backend/scripts/test-with-db.sh @@ -79,11 +79,15 @@ npm run build # Run integration tests with absolute path to config # SKIP_DB_SETUP=1 and SKIP_DB_TEARDOWN=1 tell Jest that we're managing the database lifecycle echo -e "${GREEN}Running integration tests...${NC}" -SKIP_DB_SETUP=1 SKIP_DB_TEARDOWN=1 MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" npm run test:integration +export MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" +export SKIP_DB_SETUP=1 +export SKIP_DB_TEARDOWN=1 +npm run test:integration # Start the backend server in the background +# MEMPOOL_CONFIG_FILE is already exported above echo -e "${GREEN}Starting backend server...${NC}" -MEMPOOL_CONFIG_FILE="$BACKEND_DIR/mempool-config.test.json" node dist/index.js & +node dist/index.js & SERVER_PID=$! # Wait for server to start and verify connection From 2a1ab4306b7973902b0c487a1ffb322c8cf6d56e Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 13 Nov 2025 09:07:24 -0800 Subject: [PATCH 474/534] Change port based on feedback --- backend/mempool-config.test.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/mempool-config.test.json b/backend/mempool-config.test.json index 54e245e01..2522ca90f 100644 --- a/backend/mempool-config.test.json +++ b/backend/mempool-config.test.json @@ -4,7 +4,7 @@ "NETWORK": "mainnet", "BACKEND": "none", "ENABLED": true, - "HTTP_PORT": 8999, + "HTTP_PORT": 8998, "SPAWN_CLUSTER_PROCS": 0, "API_URL_PREFIX": "/api/v1/", "POLL_RATE_MS": 2000, From 635498684ecee9ea5bd2fba5ad93dfd45898f4c5 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 13 Nov 2025 09:56:28 -0800 Subject: [PATCH 475/534] Update the e2e tests dependencies --- frontend/package-lock.json | 1475 ++++++++++++------------------------ frontend/package.json | 9 +- 2 files changed, 476 insertions(+), 1008 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index aa90042c0..ec949132c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -60,12 +60,11 @@ }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "@types/cypress": "^1.1.3", - "cypress": "^13.17.0", - "cypress-fail-on-console-error": "~5.1.0", - "cypress-wait-until": "^2.0.1", + "cypress": "^15.6.0", + "cypress-fail-on-console-error": "~5.1.1", + "cypress-wait-until": "^3.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.1.0" + "start-server-and-test": "~2.1.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3225,15 +3224,6 @@ "readable-stream": "3" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -3247,9 +3237,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", - "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -3259,14 +3249,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "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.13.1", + "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -3277,13 +3267,13 @@ } }, "node_modules/@cypress/request/node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -3905,19 +3895,58 @@ "ms": "^2.1.1" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "optional": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@hapi/hoek": "^11.0.2" } }, "node_modules/@humanwhocodes/config-array": { @@ -4766,27 +4795,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "optional": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "optional": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "optional": true - }, "node_modules/@sigstore/bundle": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", @@ -4903,6 +4911,13 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT", + "optional": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -5056,16 +5071,6 @@ "@types/node": "*" } }, - "node_modules/@types/cypress": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", - "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", - "deprecated": "This is a stub types definition for cypress (https://cypress.io). cypress provides its own type definitions, so you don't need @types/cypress installed!", - "optional": true, - "dependencies": { - "cypress": "*" - } - }, "node_modules/@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -5207,6 +5212,13 @@ "@types/node": "*" } }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "license": "MIT", + "optional": true + }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -5978,12 +5990,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "optional": true - }, "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -7501,9 +7507,10 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "license": "MIT", "optional": true, "dependencies": { "string-width": "^4.2.0" @@ -7512,7 +7519,7 @@ "node": "10.* || >= 12.*" }, "optionalDependencies": { - "@colors/colors": "1.5.0" + "colors": "1.4.0" } }, "node_modules/cli-truncate": { @@ -7585,6 +7592,16 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -8229,35 +8246,28 @@ "node": ">=4" } }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true, - "peer": true - }, "node_modules/cypress": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", - "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", + "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { - "@cypress/request": "^3.0.6", + "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", + "ci-info": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", + "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -8269,9 +8279,8 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "getos": "^3.2.1", + "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -8281,9 +8290,10 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.5.3", + "semver": "^7.7.1", "supports-color": "^8.1.1", - "tmp": "~0.2.3", + "systeminformation": "5.27.7", + "tmp": "~0.2.4", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" @@ -8292,13 +8302,14 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + "node": "^20.1.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/cypress-fail-on-console-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", - "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", + "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", + "license": "MIT", "optional": true, "dependencies": { "chai": "^4.3.10", @@ -8308,9 +8319,10 @@ } }, "node_modules/cypress-wait-until": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", - "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", + "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", + "license": "MIT", "optional": true }, "node_modules/cypress/node_modules/ansi-styles": { @@ -8497,16 +8509,6 @@ "node": ">=0.10" } }, - "node_modules/date-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", - "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", @@ -8695,13 +8697,6 @@ "node": ">= 0.8.0" } }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true, - "peer": true - }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -8765,19 +8760,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "optional": true, - "peer": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -9154,13 +9136,6 @@ "node": ">=8.6" } }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true, - "peer": true - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -10120,6 +10095,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT", "optional": true }, "node_modules/external-editor": { @@ -10405,7 +10381,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "devOptional": true + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -10548,21 +10524,6 @@ "from2": "^2.0.3" } }, - "node_modules/fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", - "optional": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -10689,15 +10650,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "optional": true, - "dependencies": { - "async": "^3.2.0" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -10948,6 +10900,33 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -11680,19 +11659,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "optional": true, - "peer": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -11805,16 +11771,22 @@ } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", + "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/jquery": { @@ -11968,45 +11940,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "optional": true }, - "node_modules/karma": { - "version": "6.3.19", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.19.tgz", - "integrity": "sha512-NDhWckzES/Y9xMiddyU1RzaKL76/scCsu8Mp0vR0Z3lQRvC3p72+Ab4ppoxs36S9tyPNX5V48yvaV++RNEBPZw==", - "optional": true, - "peer": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -12015,89 +11948,6 @@ "source-map-support": "^0.5.5" } }, - "node_modules/karma/node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/karma/node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/karma/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "optional": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/karma/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/karma/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true, - "peer": true - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=14.14" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -12576,23 +12426,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log4js": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", - "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", - "optional": true, - "peer": true, - "dependencies": { - "date-format": "^4.0.3", - "debug": "^4.3.3", - "flatted": "^3.2.4", - "rfdc": "^1.3.0", - "streamroller": "^3.0.2" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -12752,19 +12585,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "optional": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -13068,19 +12888,6 @@ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "devOptional": true }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "optional": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -13707,9 +13514,10 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14789,16 +14597,6 @@ "node": ">=6" } }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.9" - } - }, "node_modules/qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -15532,12 +15330,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -15826,14 +15622,69 @@ } }, "node_modules/side-channel": { - "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16291,19 +16142,20 @@ } }, "node_modules/start-server-and-test": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", - "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", + "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", + "license": "MIT", "optional": true, "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.1", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.4" + "wait-on": "8.0.5" }, "bin": { "server-test": "src/bin/start.js", @@ -16321,9 +16173,10 @@ "optional": true }, "node_modules/start-server-and-test/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.3" @@ -16341,6 +16194,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true }, "node_modules/statuses": { @@ -16399,21 +16253,6 @@ "node": ">= 0.10.0" } }, - "node_modules/streamroller": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", - "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", - "optional": true, - "peer": true, - "dependencies": { - "date-format": "^4.0.3", - "debug": "^4.1.1", - "fs-extra": "^10.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -16527,6 +16366,33 @@ "acorn-node": "^1.2.0" } }, + "node_modules/systeminformation": { + "version": "5.27.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", + "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16796,22 +16662,22 @@ } }, "node_modules/tldts": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", - "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "license": "MIT", "optional": true, "dependencies": { - "tldts-core": "^6.1.70" + "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", - "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "license": "MIT", "optional": true }, @@ -16883,9 +16749,9 @@ } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "license": "BSD-3-Clause", "optional": true, "dependencies": { @@ -17161,26 +17027,6 @@ "node": ">=14.17" } }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "optional": true, - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", @@ -17898,24 +17744,15 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wait-on": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", - "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", + "license": "MIT", "optional": true, "dependencies": { - "axios": "^1.11.0", - "joi": "^17.13.3", + "axios": "^1.12.1", + "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" @@ -17928,9 +17765,10 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", "optional": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -17942,12 +17780,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT", "optional": true }, "node_modules/wait-on/node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "tslib": "^2.1.0" @@ -18439,25 +18279,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "optional": true, - "peer": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", @@ -18470,92 +18291,6 @@ "node": ">=6" } }, - "node_modules/yargs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "optional": true, - "peer": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/yargs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/yargs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true, - "peer": true - }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", - "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -20639,12 +20374,6 @@ } } }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -20655,9 +20384,9 @@ } }, "@cypress/request": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", - "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", "optional": true, "requires": { "aws-sign2": "~0.7.0", @@ -20666,14 +20395,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "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.13.1", + "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -20681,12 +20410,12 @@ }, "dependencies": { "qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "optional": true, "requires": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" } } } @@ -21019,19 +20748,46 @@ } } }, + "@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "optional": true, + "requires": { + "@hapi/hoek": "^11.0.2" + } + }, + "@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "optional": true + }, "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "optional": true + }, + "@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "optional": true + }, + "@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", "optional": true }, "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", "optional": true, "requires": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" } }, "@humanwhocodes/config-array": { @@ -21582,27 +21338,6 @@ } } }, - "@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "optional": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "optional": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "optional": true - }, "@sigstore/bundle": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", @@ -21703,6 +21438,12 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, + "@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "optional": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -21845,15 +21586,6 @@ "@types/node": "*" } }, - "@types/cypress": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", - "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", - "optional": true, - "requires": { - "cypress": "*" - } - }, "@types/eslint": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", @@ -21995,6 +21727,12 @@ "@types/node": "*" } }, + "@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "optional": true + }, "@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -22570,12 +22308,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "optional": true }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "optional": true - }, "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -23698,12 +23430,12 @@ "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" }, "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "optional": true, "requires": { - "@colors/colors": "1.5.0", + "colors": "1.4.0", "string-width": "^4.2.0" } }, @@ -23762,6 +23494,12 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "optional": true + }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -24247,33 +23985,26 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true, - "peer": true - }, "cypress": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", - "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", + "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", "optional": true, "requires": { - "@cypress/request": "^3.0.6", + "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", + "ci-info": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", + "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -24285,9 +24016,8 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "getos": "^3.2.1", + "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -24297,9 +24027,10 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.5.3", + "semver": "^7.7.1", "supports-color": "^8.1.1", - "tmp": "~0.2.3", + "systeminformation": "5.27.7", + "tmp": "~0.2.4", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" @@ -24418,9 +24149,9 @@ } }, "cypress-fail-on-console-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", - "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", + "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", "optional": true, "requires": { "chai": "^4.3.10", @@ -24430,9 +24161,9 @@ } }, "cypress-wait-until": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", - "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", + "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", "optional": true }, "d": { @@ -24458,13 +24189,6 @@ "assert-plus": "^1.0.0" } }, - "date-format": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", - "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", - "optional": true, - "peer": true - }, "dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", @@ -24602,13 +24326,6 @@ "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "devOptional": true }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true, - "peer": true - }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -24662,19 +24379,6 @@ "esutils": "^2.0.2" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "optional": true, - "peer": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -24983,13 +24687,6 @@ "ansi-colors": "^4.1.1" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true, - "peer": true - }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -25947,7 +25644,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "devOptional": true + "dev": true }, "follow-redirects": { "version": "1.15.6", @@ -26040,18 +25737,6 @@ "from2": "^2.0.3" } }, - "fs-extra": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", - "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", - "optional": true, - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, "fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -26138,15 +25823,6 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "optional": true, - "requires": { - "async": "^3.2.0" - } - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -26325,6 +26001,24 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "optional": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "optional": true + } + } + }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -26838,13 +26532,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "optional": true, - "peer": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -26925,16 +26612,18 @@ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", + "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", "optional": true, "requires": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" } }, "jquery": { @@ -27054,115 +26743,6 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "optional": true }, - "karma": { - "version": "6.3.19", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.19.tgz", - "integrity": "sha512-NDhWckzES/Y9xMiddyU1RzaKL76/scCsu8Mp0vR0Z3lQRvC3p72+Ab4ppoxs36S9tyPNX5V48yvaV++RNEBPZw==", - "optional": true, - "peer": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "optional": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "optional": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true, - "peer": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "peer": true - }, - "tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "optional": true, - "peer": true - } - } - }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -27517,20 +27097,6 @@ } } }, - "log4js": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", - "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", - "optional": true, - "peer": true, - "requires": { - "date-format": "^4.0.3", - "debug": "^4.3.3", - "flatted": "^3.2.4", - "rfdc": "^1.3.0", - "streamroller": "^3.0.2" - } - }, "loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -27659,13 +27225,6 @@ } } }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "optional": true, - "peer": true - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -27900,16 +27459,6 @@ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "devOptional": true }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "optional": true, - "peer": true, - "requires": { - "minimist": "^1.2.5" - } - }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -28388,9 +27937,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" }, "object-keys": { "version": "1.1.1", @@ -29146,13 +28695,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "optional": true, - "peer": true - }, "qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -29699,12 +29241,9 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==" }, "send": { "version": "0.19.0", @@ -29928,14 +29467,47 @@ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "side-channel": { - "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "requires": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { @@ -30283,19 +29855,19 @@ } }, "start-server-and-test": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", - "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", + "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", "optional": true, "requires": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.1", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.4" + "wait-on": "8.0.5" }, "dependencies": { "arg": { @@ -30305,9 +29877,9 @@ "optional": true }, "debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "optional": true, "requires": { "ms": "^2.1.3" @@ -30368,18 +29940,6 @@ "limiter": "^1.0.5" } }, - "streamroller": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", - "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", - "optional": true, - "peer": true, - "requires": { - "date-format": "^4.0.3", - "debug": "^4.1.1", - "fs-extra": "^10.0.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -30461,6 +30021,12 @@ "acorn-node": "^1.2.0" } }, + "systeminformation": { + "version": "5.27.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", + "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", + "optional": true + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -30664,18 +30230,18 @@ } }, "tldts": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", - "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "optional": true, "requires": { - "tldts-core": "^6.1.70" + "tldts-core": "^6.1.86" } }, "tldts-core": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", - "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "optional": true }, "tlite": { @@ -30722,9 +30288,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "optional": true, "requires": { "tldts": "^6.1.32" @@ -30908,13 +30474,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==" }, - "ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "optional": true, - "peer": true - }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", @@ -31302,30 +30861,23 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "optional": true, - "peer": true - }, "wait-on": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", - "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", "optional": true, "requires": { - "axios": "^1.11.0", - "joi": "^17.13.3", + "axios": "^1.12.1", + "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" }, "dependencies": { "axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "optional": true, "requires": { "follow-redirects": "^1.15.6", @@ -31675,89 +31227,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "optional": true, - "peer": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "peer": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "optional": true, - "peer": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "peer": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true, - "peer": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "optional": true, - "peer": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", - "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", - "optional": true, - "peer": true - }, - "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "optional": true, - "peer": true - } - } - }, "yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 868c8929c..85206ed6a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -111,12 +111,11 @@ }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "@types/cypress": "^1.1.3", - "cypress": "^13.17.0", - "cypress-fail-on-console-error": "~5.1.0", - "cypress-wait-until": "^2.0.1", + "cypress": "^15.6.0", + "cypress-fail-on-console-error": "~5.1.1", + "cypress-wait-until": "^3.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.1.0" + "start-server-and-test": "~2.1.2" }, "scarfSettings": { "enabled": false From 828f943e22165b1c49fa5f6db46426dc0e465d46 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sat, 1 Nov 2025 20:17:02 +0800 Subject: [PATCH 476/534] Ng 20 Some deps deps deps ng20 --- frontend/package-lock.json | 21960 ++++++++++++++++++------------- frontend/package.json | 40 +- frontend/src/app/app.module.ts | 23 +- 3 files changed, 12816 insertions(+), 9207 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index ec949132c..113698abf 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,25 +9,25 @@ "version": "3.3-dev", "license": "GNU Affero General Public License v3.0", "dependencies": { - "@angular-devkit/build-angular": "^17.3.1", - "@angular/animations": "^17.3.1", - "@angular/cli": "^17.3.1", - "@angular/common": "^17.3.1", - "@angular/compiler": "^17.3.1", - "@angular/core": "^17.3.1", - "@angular/forms": "^17.3.1", - "@angular/localize": "^17.3.1", - "@angular/platform-browser": "^17.3.1", - "@angular/platform-browser-dynamic": "^17.3.1", - "@angular/platform-server": "^17.3.1", - "@angular/router": "^17.3.1", - "@angular/ssr": "^17.3.1", - "@fortawesome/angular-fontawesome": "~0.14.1", + "@angular-devkit/build-angular": "^20.3.7", + "@angular/animations": "^20.3.9", + "@angular/cli": "^20.3.7", + "@angular/common": "^20.3.9", + "@angular/compiler": "^20.3.9", + "@angular/core": "^20.3.9", + "@angular/forms": "^20.3.9", + "@angular/localize": "^20.3.9", + "@angular/platform-browser": "^20.3.9", + "@angular/platform-browser-dynamic": "^20.3.9", + "@angular/platform-server": "^20.3.9", + "@angular/router": "^20.3.9", + "@angular/ssr": "^20.3.7", + "@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", "@mempool/mempool.js": "2.3.0", - "@ng-bootstrap/ng-bootstrap": "^16.0.0", + "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", "browserify": "^17.0.0", @@ -36,17 +36,17 @@ "echarts": "~5.6.0", "esbuild": "^0.25.8", "ngx-echarts": "~17.2.0", - "ngx-infinite-scroll": "^17.0.0", + "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", - "zone.js": "~0.14.4" + "zone.js": "~0.15.1" }, "devDependencies": { - "@angular/compiler-cli": "^17.3.1", - "@angular/language-service": "^17.3.1", + "@angular/compiler-cli": "^20.3.9", + "@angular/language-service": "^20.3.9", "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", @@ -56,15 +56,16 @@ "prettier": "^3.0.0", "source-map-support": "^0.5.21", "ts-node": "~10.9.1", - "typescript": "~5.4.3" + "typescript": "~5.8.3" }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "cypress": "^15.6.0", - "cypress-fail-on-console-error": "~5.1.1", - "cypress-wait-until": "^3.0.1", + "@types/cypress": "^1.1.3", + "cypress": "^13.17.0", + "cypress-fail-on-console-error": "~5.1.0", + "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.1.2" + "start-server-and-test": "~2.1.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -76,6 +77,201 @@ "node": ">=0.10.0" } }, + "node_modules/@algolia/abtesting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", + "integrity": "sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-abtesting": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz", + "integrity": "sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz", + "integrity": "sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz", + "integrity": "sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-insights": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz", + "integrity": "sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz", + "integrity": "sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-query-suggestions": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz", + "integrity": "sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz", + "integrity": "sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/ingestion": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz", + "integrity": "sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/monitoring": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz", + "integrity": "sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/recommend": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz", + "integrity": "sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz", + "integrity": "sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-fetch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz", + "integrity": "sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@algolia/requester-node-http": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz", + "integrity": "sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -98,121 +294,245 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1703.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.1.tgz", - "integrity": "sha512-vkfvURv7O+3fHMTE9K+yUEiFS0v4JNYKsDP0LE1ChH5Ocy0bJXGcH2Cyz2W8qdJGDG/tKe41VzvOLpu88Xv3zQ==", + "version": "0.2003.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.8.tgz", + "integrity": "sha512-pbXQ2NlZQwzjsSIEoRQMGB1WrgZFCyM0zoD9h+rDjyR8PEB1Evl4evZ4Q5CJzjEBxC8IEG61PHKHjh8GdLb+sg==", + "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.1", - "rxjs": "7.8.1" + "@angular-devkit/core": "20.3.8", + "rxjs": "7.8.2" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/architect/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular-devkit/architect/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/architect/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular-devkit/architect/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@angular-devkit/architect/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@angular-devkit/architect/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular-devkit/architect/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/@angular-devkit/build-angular": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.1.tgz", - "integrity": "sha512-e+hZvLVH5AvHCFbVtKRd5oJeFsEmjg7kK1V6hsVxH4YE2f2x399TSr+AGxwV+R3jnjZ67ujIeXXd0Uuf1RwcSg==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.8.tgz", + "integrity": "sha512-U+dSQL/M9orZFPHGgkW/MoAWVGc65TMRChvQ+W4iGB8jQ4z3gE91tTrsKnaJn7D+vW95nAkdGWAVCl7YRf1hhA==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1703.1", - "@angular-devkit/build-webpack": "0.1703.1", - "@angular-devkit/core": "17.3.1", - "@babel/core": "7.24.0", - "@babel/generator": "7.23.6", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-transform-async-generator-functions": "7.23.9", - "@babel/plugin-transform-async-to-generator": "7.23.3", - "@babel/plugin-transform-runtime": "7.24.0", - "@babel/preset-env": "7.24.0", - "@babel/runtime": "7.24.0", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.3.1", - "@vitejs/plugin-basic-ssl": "1.1.0", + "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/build-webpack": "0.2003.8", + "@angular-devkit/core": "20.3.8", + "@angular/build": "20.3.8", + "@babel/core": "7.28.3", + "@babel/generator": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.28.0", + "@babel/plugin-transform-async-to-generator": "7.27.1", + "@babel/plugin-transform-runtime": "7.28.3", + "@babel/preset-env": "7.28.3", + "@babel/runtime": "7.28.3", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "20.3.8", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.18", - "babel-loader": "9.1.3", - "babel-plugin-istanbul": "6.1.1", + "autoprefixer": "10.4.21", + "babel-loader": "10.0.0", "browserslist": "^4.21.5", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.22", - "css-loader": "6.10.0", - "esbuild-wasm": "0.20.1", - "fast-glob": "3.3.2", - "http-proxy-middleware": "2.0.6", - "https-proxy-agent": "7.0.4", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", + "copy-webpack-plugin": "13.0.1", + "css-loader": "7.1.2", + "esbuild-wasm": "0.25.9", + "fast-glob": "3.3.3", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "11.1.0", + "less": "4.4.0", + "less-loader": "12.3.0", "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.8", - "mini-css-extract-plugin": "2.8.1", - "mrmime": "2.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.1", - "piscina": "4.4.0", - "postcss": "8.4.35", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.4", + "open": "10.2.0", + "ora": "8.2.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "postcss": "8.5.6", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.71.1", - "sass-loader": "14.1.1", - "semver": "7.6.0", + "rxjs": "7.8.2", + "sass": "1.90.0", + "sass-loader": "16.0.5", + "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.29.1", + "terser": "5.43.1", "tree-kill": "1.2.2", - "tslib": "2.6.2", - "undici": "6.7.1", - "vite": "5.1.5", - "watchpack": "2.4.0", - "webpack": "5.90.3", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0", + "tslib": "2.8.1", + "webpack": "5.101.2", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.2.2", + "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.20.1" + "esbuild": "0.25.9" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "@angular/localize": "^17.0.0", - "@angular/platform-server": "^17.0.0", - "@angular/service-worker": "^17.0.0", - "@web/test-runner": "^0.18.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.8", + "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", + "jest": "^29.5.0 || ^30.2.0", + "jest-environment-jsdom": "^29.5.0 || ^30.2.0", "karma": "^6.3.0", - "ng-packagr": "^17.0.0", + "ng-packagr": "^20.0.0", "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.2 <5.5" + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.8 <6.0" }, "peerDependenciesMeta": { + "@angular/core": { + "optional": true + }, "@angular/localize": { "optional": true }, + "@angular/platform-browser": { + "optional": true + }, "@angular/platform-server": { "optional": true }, "@angular/service-worker": { "optional": true }, + "@angular/ssr": { + "optional": true + }, "@web/test-runner": { "optional": true }, @@ -239,506 +559,26 @@ } } }, - "node_modules/@angular-devkit/build-angular/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==", + "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "license": "MIT", "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", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/@angular-devkit/build-angular/node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "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", - "integrity": "sha512-nVUzewX8RCzaEPQZ1JQpE42wpsYchKQwfXUSCkoUsuCMB2c6zuEz0Jt94nzJg3UjSEEV4ZqCH8v5MDOvB49Rlw==", - "dependencies": { - "@angular-devkit/architect": "0.1703.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.1.tgz", - "integrity": "sha512-EP7zwqBEaOPuBJwzKmh2abfgNFITGX178BOyTG6zTymeMzEbrvy2OdeQXSslkJ/RGLCpx60GT+0CFW7wGlQR6Q==", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -746,30 +586,125 @@ } } }, - "node_modules/@angular-devkit/core/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@angular-devkit/build-angular/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@angular-devkit/core/node_modules/json-schema-traverse": { + "node_modules/@angular-devkit/build-angular/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, - "node_modules/@angular-devkit/core/node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "node_modules/@angular-devkit/build-angular/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@angular-devkit/build-angular/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -777,44 +712,99 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@angular-devkit/schematics": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.17.tgz", - "integrity": "sha512-ZXsIJXZm0I0dNu1BqmjfEtQhnzqoupUHHZb4GHm5NeQHBFZctQlkkNxLUU27GVeBUwFgEmP7kFgSLlMPTGSL5g==", + "node_modules/@angular-devkit/build-angular/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.17", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.2003.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.8.tgz", + "integrity": "sha512-IKLQCe7BgV8XRl9m6oirU5XQ9ojq214GH6GKw8dvGg1MCIxv/TfB3pRTPexgOqPaWk6SONyXj6tshB+Nluk3nw==", + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2003.8", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.8.tgz", + "integrity": "sha512-Ymv7nWLTDB1gBh2laRveO912eUpQ/rUIzKRr8VQFMVG/wNipL88vzyrlKhJa7WhQ3CdKxLD7kplFIjdev7XUVg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "20.3.8", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.17", + "ora": "8.2.0", + "rxjs": "7.8.2" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", "license": "MIT", "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -823,21 +813,55 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@angular-devkit/schematics/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -845,9 +869,9 @@ "license": "MIT" }, "node_modules/@angular-devkit/schematics/node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -856,165 +880,363 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular-devkit/schematics/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, "node_modules/@angular/animations": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.1.tgz", - "integrity": "sha512-2TZ0M5J0IizhHpb404DeqArlv8Ki9BFz5ZUuET2uFROpKW8IMDCht8fSrn/DKHpjB9lvzPUhNFaRxNWEY6klnA==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", + "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "17.3.1" + "@angular/core": "20.3.9" } }, - "node_modules/@angular/cli": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.17.tgz", - "integrity": "sha512-FgOvf9q5d23Cpa7cjP1FYti/v8S1FTm8DEkW3TY8lkkoxh3isu28GFKcLD1p/XF3yqfPkPVHToOFla5QwsEgBQ==", + "node_modules/@angular/build": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.8.tgz", + "integrity": "sha512-wE6/T1FIjDSXljyNPh7KEwK5ysH3/uq2h8ZB5UCAAUkPHcQ/Y1unk27TUYePO7++KjkYXUX6XwwYZksXCZFJjA==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1703.17", - "@angular-devkit/core": "17.3.17", - "@angular-devkit/schematics": "17.3.17", - "@schematics/angular": "17.3.17", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.1", - "npm-pick-manifest": "9.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "17.0.6", - "resolve": "1.22.8", - "semver": "7.6.0", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2003.8", + "@babel/core": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.14", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.23.0", + "esbuild": "0.25.9", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rollup": "4.52.3", + "sass": "1.90.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.14", + "vite": "7.1.11", + "watchpack": "2.4.4" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1703.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.17.tgz", - "integrity": "sha512-LD6po8lGP2FI7WbnsSxtvpiIi+FYL0aNfteunkT+7po9jUNflBEYHA64UWNO56u7ryKNdbuiN8/TEh7FEUnmCw==", - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.17", - "rxjs": "7.8.1" }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", - "license": "MIT", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "optionalDependencies": { + "lmdb": "3.4.2" }, "peerDependencies": { - "chokidar": "^3.5.2" + "@angular/compiler": "^20.0.0", + "@angular/compiler-cli": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/localize": "^20.0.0", + "@angular/platform-browser": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/service-worker": "^20.0.0", + "@angular/ssr": "^20.3.8", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^20.0.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.8 <6.0", + "vitest": "^3.1.1" }, "peerDependenciesMeta": { - "chokidar": { + "@angular/core": { + "optional": true + }, + "@angular/localize": { + "optional": true + }, + "@angular/platform-browser": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + }, + "vitest": { "optional": true } } }, - "node_modules/@angular/cli/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@angular/build/node_modules/@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "undici-types": "~7.16.0" } }, - "node_modules/@angular/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@angular/build/node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, + "node_modules/@angular/build/node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "environment": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@angular/build/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@angular/cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@angular/build/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@angular/cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@angular/build/node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@angular/cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@angular/cli/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/@angular/build/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "license": "MIT" }, - "node_modules/@angular/cli/node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "node_modules/@angular/build/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/@angular/build/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/listr2": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", + "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@angular/build/node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/@angular/build/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -1023,13 +1245,27 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/@angular/build/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1037,17 +1273,632 @@ "node": ">=10" } }, - "node_modules/@angular/cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/@angular/build/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@angular/build/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/@angular/build/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/build/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@angular/build/node_modules/vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/vite/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/@angular/build/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@angular/cli": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.8.tgz", + "integrity": "sha512-UUNmwDCrRknE+50Gwwt66o4T/l0KfLWOzxlYdLn9l2PIVNhpspg+5CUkO0juRyRyCxCnojic1s9pPTD1Eq4rtg==", + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/core": "20.3.8", + "@angular-devkit/schematics": "20.3.8", + "@inquirer/prompts": "7.8.2", + "@listr2/prompt-adapter-inquirer": "3.0.1", + "@modelcontextprotocol/sdk": "1.17.3", + "@schematics/angular": "20.3.8", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.35.0", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "npm-package-arg": "13.0.0", + "pacote": "21.0.0", + "resolve": "1.22.10", + "semver": "7.7.2", + "yargs": "18.0.0", + "zod": "3.25.76" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.1.tgz", + "integrity": "sha512-3XFmGwm3u6ioREG+ynAQB7FoxfajgQnMhIu8wC5eo/Lsih4aKDg0VuIMGaOsYn7hJSJagSeaD4K8yfpkEoDEmA==", + "license": "MIT", + "dependencies": { + "@inquirer/type": "^3.0.7" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.1" + } + }, + "node_modules/@angular/cli/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@angular/cli/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@angular/cli/node_modules/ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/cli/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@angular/cli/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/@angular/cli/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/@angular/cli/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@angular/cli/node_modules/listr2": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", + "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@angular/cli/node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@angular/cli/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/cli/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@angular/cli/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@angular/cli/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/cli/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@angular/cli/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -1057,147 +1908,213 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/@angular/cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/common": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.1.tgz", - "integrity": "sha512-HyUTJ4RxhE3bOmFRV6Fv2y01ixbrUb8Hd4MxPm8REbNMGKsWCfXhR3FfxFL18Sc03SAF+o0Md0wwekjFKTNKfQ==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", + "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "17.3.1", + "@angular/core": "20.3.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.1.tgz", - "integrity": "sha512-8qqlWPGZEyD2FY5losOW3Aocro+lFysPDzsf0LHgQUM6Ub1b+pq4jUOjH6w0vzaxG3TfxkgzOQ9aNdWtSV67Rg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", + "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" - }, - "peerDependencies": { - "@angular/core": "17.3.1" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.1.tgz", - "integrity": "sha512-xLV9KU+zOpe57/2rQ59ku21EaStNpLSlR9+qkDYf8JR09fB+W9vY3UYbpi5RjHxAFIZBM5D9SFQjjll8rch26g==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", + "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", + "license": "MIT", "dependencies": { - "@babel/core": "7.23.9", + "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", + "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", "tslib": "^2.3.0", - "yargs": "^17.2.1" + "yargs": "^18.0.0" }, "bin": { "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" + "ngc": "bundles/src/bin/ngc.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "17.3.1", - "typescript": ">=5.2 <5.5" + "@angular/compiler": "20.3.9", + "typescript": ">=5.8 <6.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@angular/compiler-cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@angular/compiler-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@angular/compiler-cli/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -1207,85 +2124,100 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/@angular/compiler-cli/node_modules/yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/core": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.1.tgz", - "integrity": "sha512-Qf3/sgkXS1LHwOTtqAVYprySrn0YpPIZqerPc0tK+hyQfwAz5BQlpcBhbH8RWKlfCY8eO0cqo/j0+e8DQOgYfg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", + "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { + "@angular/compiler": "20.3.9", "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.14.0" + "zone.js": "~0.15.0" + }, + "peerDependenciesMeta": { + "@angular/compiler": { + "optional": true + }, + "zone.js": { + "optional": true + } } }, "node_modules/@angular/forms": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.1.tgz", - "integrity": "sha512-HndsO90k67sFHzd+sII+rhAUksffBvquFuAUCc6QR9WVjILxVg2fY7oBidgS1gKNqu0mptPG0GvuORnaW/0gSg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", + "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "17.3.1", - "@angular/core": "17.3.1", - "@angular/platform-browser": "17.3.1", + "@angular/common": "20.3.9", + "@angular/core": "20.3.9", + "@angular/platform-browser": "20.3.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.3.1.tgz", - "integrity": "sha512-awC+KHwIRXZ7biQz0Q7q+UZuuyeWHcxjxyQtvv0n1jwwyRpUo8WAXcduKRxl/wMOrxfZkB/tpGcd1/Eeql9CCw==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.9.tgz", + "integrity": "sha512-aCsuzlFx8a/VMBNgXMfwai97j2QHZ8PhQwzwodDNb2X3eQsaUO+nCgs5kNIZmQ/rJESH+fY9ZdlZcrYbVp+nBA==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, "node_modules/@angular/localize": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.3.1.tgz", - "integrity": "sha512-ma8PD+DWv68OKgvbmxw7rVohT5HvIYgbmPnVg8lyEz/YkUa9lua0zzrgA+3HUComqv16oVrIaQr00oWxn/9lXQ==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", + "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", + "license": "MIT", "dependencies": { - "@babel/core": "7.23.9", + "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", - "fast-glob": "3.3.2", - "yargs": "^17.2.1" + "tinyglobby": "^0.2.12", + "yargs": "^18.0.0" }, "bin": { "localize-extract": "tools/bundles/src/extract/cli.js", @@ -1293,64 +2225,101 @@ "localize-translate": "tools/bundles/src/translate/cli.js" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "17.3.1", - "@angular/compiler-cli": "17.3.1" + "@angular/compiler": "20.3.9", + "@angular/compiler-cli": "20.3.9" + } + }, + "node_modules/@angular/localize/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/@angular/localize/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@angular/localize/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@angular/localize/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=20" } }, - "node_modules/@angular/localize/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@angular/localize/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "node_modules/@angular/localize/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular/localize/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } }, "node_modules/@angular/localize/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -1360,49 +2329,52 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/@angular/localize/node_modules/yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/localize/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/@angular/platform-browser": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.1.tgz", - "integrity": "sha512-8ABAL8PElSGzkIparVwifsU0NSu0DdqnWYw9YvLhhZQ6lOuWbG+dTUo/DXzmWhA6ezQWJGNakEZPJJytFIIy+A==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", + "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "17.3.1", - "@angular/common": "17.3.1", - "@angular/core": "17.3.1" + "@angular/animations": "20.3.9", + "@angular/common": "20.3.9", + "@angular/core": "20.3.9" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1411,70 +2383,79 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.1.tgz", - "integrity": "sha512-ACW/npNaDxUNQtEomjjv/KIBY8jHEinePff5qosnAxLE0IpA4qE9eDp36zG35xoJqrPJPYjXbZCBRqqrzM7U7Q==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.9.tgz", + "integrity": "sha512-XLGDmloD25eEeQM3hrCnU+2TqXpFLp36xOPqVSyBNso0YFXBtAX/lc2tcOFX3fLslje3LT0nyObAlV45YfBiGA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "17.3.1", - "@angular/compiler": "17.3.1", - "@angular/core": "17.3.1", - "@angular/platform-browser": "17.3.1" + "@angular/common": "20.3.9", + "@angular/compiler": "20.3.9", + "@angular/core": "20.3.9", + "@angular/platform-browser": "20.3.9" } }, "node_modules/@angular/platform-server": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.3.1.tgz", - "integrity": "sha512-yC1WgUquIac8qFCPMLjRio2ViR3XHexlXKlZpFhqpWAFPsWSHjoCHTEW+KTUFZmOPhUEFR2W8fWOChur8mjthw==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", + "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "17.3.1", - "@angular/common": "17.3.1", - "@angular/compiler": "17.3.1", - "@angular/core": "17.3.1", - "@angular/platform-browser": "17.3.1" + "@angular/common": "20.3.9", + "@angular/compiler": "20.3.9", + "@angular/core": "20.3.9", + "@angular/platform-browser": "20.3.9", + "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/router": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.1.tgz", - "integrity": "sha512-H6H7lY9i5Ppu0SFwwpeWqJbCFw8cILOj8Rd1+AGoCN5m3ivPtjD2Ltz62PI2zZkqx+WhQdk19l61Wm3oRqg70A==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", + "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "engines": { - "node": "^18.13.0 || >=20.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "17.3.1", - "@angular/core": "17.3.1", - "@angular/platform-browser": "17.3.1", + "@angular/common": "20.3.9", + "@angular/core": "20.3.9", + "@angular/platform-browser": "20.3.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/ssr": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.17.tgz", - "integrity": "sha512-hRszFhFPh74n17cjhbRuR0igSwHm4ssB0LgkE4A5tBgYTSoWomRM6nmiyrk10OdQHlLOTFwdTIZ3aPDM5174Ow==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", + "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", "license": "MIT", "dependencies": { - "critters": "0.0.22", "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^17.0.0", - "@angular/core": "^17.0.0" + "@angular/common": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/platform-server": "^20.0.0", + "@angular/router": "^20.0.0" + }, + "peerDependenciesMeta": { + "@angular/platform-server": { + "optional": true + } } }, "node_modules/@babel/code-frame": { @@ -1492,28 +2473,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "license": "MIT", "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.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1542,63 +2525,52 @@ } }, "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.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "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/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.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.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -1610,6 +2582,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -1618,6 +2591,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1625,21 +2599,21 @@ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "engines": { @@ -1653,17 +2627,19 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "engines": { @@ -1677,88 +2653,94 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.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==", - "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==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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==", - "dependencies": { - "@babel/types": "^7.22.5" - }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "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.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", "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.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1768,32 +2750,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1803,13 +2788,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1818,34 +2804,26 @@ "@babel/core": "^7.0.0" } }, - "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==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "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==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1870,21 +2848,23 @@ } }, "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" @@ -1918,12 +2898,44 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1933,13 +2945,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1949,12 +2962,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1967,6 +2981,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -1974,70 +2989,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2047,127 +3005,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2180,6 +3023,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -2192,11 +3036,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2206,14 +3051,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2223,13 +3068,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2239,11 +3085,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2253,11 +3100,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2267,12 +3115,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2282,13 +3131,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2298,18 +3147,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2319,12 +3167,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2334,11 +3183,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2348,12 +3199,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2363,11 +3215,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2376,13 +3229,45 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -2392,12 +3277,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2407,12 +3292,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2422,12 +3307,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2437,13 +3323,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2453,12 +3340,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2468,11 +3355,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2482,12 +3370,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2497,11 +3385,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2511,12 +3400,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2526,13 +3416,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2542,14 +3432,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -2559,12 +3450,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2574,12 +3466,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2589,11 +3482,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2603,12 +3497,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2618,12 +3512,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2633,14 +3527,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -2650,12 +3546,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2665,12 +3562,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2680,13 +3577,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2696,11 +3593,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2710,12 +3608,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2725,14 +3624,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2742,11 +3641,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2756,12 +3656,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2770,12 +3670,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2785,15 +3702,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "engines": { @@ -2807,16 +3725,18 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2826,12 +3746,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2841,11 +3762,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2855,11 +3777,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2869,11 +3792,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2883,11 +3807,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2897,12 +3822,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2912,12 +3838,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2927,12 +3854,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2942,89 +3870,80 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -3038,6 +3957,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3046,6 +3966,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -3055,18 +3976,11 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -3086,43 +4000,44 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@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.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3224,6 +4139,15 @@ "readable-stream": "3" } }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -3237,9 +4161,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", - "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", + "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -3249,14 +4173,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.4", + "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.14.0", + "qs": "6.13.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -3267,13 +4191,13 @@ } }, "node_modules/@cypress/request/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "side-channel": "^1.1.0" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -3334,20 +4258,22 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "aix" @@ -3357,12 +4283,13 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -3372,12 +4299,13 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -3387,12 +4315,13 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -3402,12 +4331,13 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3417,12 +4347,13 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3432,12 +4363,13 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3447,12 +4379,13 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3462,12 +4395,13 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3477,12 +4411,13 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3492,12 +4427,13 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3507,12 +4443,13 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3522,12 +4459,13 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "cpu": [ "mips64el" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3537,12 +4475,13 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3552,12 +4491,13 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3567,12 +4507,13 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3582,12 +4523,13 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -3597,12 +4539,13 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -3612,12 +4555,13 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -3627,12 +4571,13 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -3642,12 +4587,13 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -3657,12 +4603,13 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "openharmony" @@ -3672,12 +4619,13 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "sunos" @@ -3687,12 +4635,13 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -3702,12 +4651,13 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -3717,12 +4667,13 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -3833,15 +4784,37 @@ } }, "node_modules/@fortawesome/angular-fontawesome": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.14.1.tgz", - "integrity": "sha512-Yb5HLiEOAxjSLEcaOM51CKIrzdfvoDafXVJERm9vufxfZkVZPZJgrZRgqwLVpejgq4/Ez6TqHZ6SqmJwdtRF6g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-3.0.0.tgz", + "integrity": "sha512-+8Dd6DoJnqArfrZ5NvjHyRL64IIkTigXclbOOcFdYQ8/WFERQUDaEU6SAV8Q0JBpJhMS1McED7YCOCAE6SIVyA==", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@fortawesome/fontawesome-svg-core": "^7.0.0", + "tslib": "^2.8.1" }, "peerDependencies": { - "@angular/core": "^17.0.0", - "@fortawesome/fontawesome-svg-core": "~1.2.27 || ~1.3.0-beta2 || ^6.1.0" + "@angular/core": "^20.0.0" + } + }, + "node_modules/@fortawesome/angular-fontawesome/node_modules/@fortawesome/fontawesome-common-types": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.1.0.tgz", + "integrity": "sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/angular-fontawesome/node_modules/@fortawesome/fontawesome-svg-core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.1.0.tgz", + "integrity": "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "7.1.0" + }, + "engines": { + "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-common-types": { @@ -3895,58 +4868,19 @@ "ms": "^2.1.1" } }, - "node_modules/@hapi/address": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", - "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "@hapi/hoek": "^11.0.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@hapi/formula": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", - "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", - "license": "BSD-3-Clause", - "optional": true - }, "node_modules/@hapi/hoek": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", - "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", - "license": "BSD-3-Clause", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "optional": true }, - "node_modules/@hapi/pinpoint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", - "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/@hapi/tlds": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", - "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@hapi/topo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", - "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", - "license": "BSD-3-Clause", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "optional": true, "dependencies": { - "@hapi/hoek": "^11.0.2" + "@hapi/hoek": "^9.0.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -3982,10 +4916,394 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "node_modules/@inquirer/ansi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.1.tgz", + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.0.tgz", + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", + "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.0.tgz", + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.21.tgz", + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.21.tgz", + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.14.tgz", + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.5.tgz", + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.21.tgz", + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.21.tgz", + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", + "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.2.1", + "@inquirer/confirm": "^5.1.14", + "@inquirer/editor": "^4.2.17", + "@inquirer/expand": "^4.0.17", + "@inquirer/input": "^4.2.1", + "@inquirer/number": "^3.0.17", + "@inquirer/password": "^4.0.17", + "@inquirer/rawlist": "^4.1.5", + "@inquirer/search": "^3.1.0", + "@inquirer/select": "^4.3.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.9.tgz", + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.0.tgz", + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.0.tgz", + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.9.tgz", + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3999,9 +5317,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -4010,9 +5329,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -4023,12 +5343,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -4042,9 +5364,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -4059,6 +5382,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -4071,40 +5395,35 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "minipass": "^7.0.4" }, "engines": { - "node": ">=8" + "node": ">=18.0.0" } }, "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { @@ -4124,14 +5443,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", @@ -4142,9 +5453,10 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -4155,22 +5467,217 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } }, - "node_modules/@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.7" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz", + "integrity": "sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz", + "integrity": "sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz", + "integrity": "sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz", + "integrity": "sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz", + "integrity": "sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz", + "integrity": "sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz", + "integrity": "sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@mempool/mempool.js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.3.0.tgz", @@ -4200,34 +5707,473 @@ } } }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", + "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-16.0.0.tgz", - "integrity": "sha512-+FJ3e6cX9DW2t7021Ji3oz433rk3+4jLfqzU+Jyx6/vJz1dIOaML3EAY6lYuW4TLiXgMPOMvs6KzPFALGh4Lag==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-19.0.1.tgz", + "integrity": "sha512-1lErAkwh0F+gWkzpiddViY4GfA9LVXkwLpgBsV9Mb3IC0zo6WNkY8WxCC+LqajirBTu20DCkZSqeRzrwaVLpZw==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^17.0.0", - "@angular/core": "^17.0.0", - "@angular/forms": "^17.0.0", - "@angular/localize": "^17.0.0", + "@angular/common": "^20.0.0", + "@angular/core": "^20.0.0", + "@angular/forms": "^20.0.0", + "@angular/localize": "^20.0.0", "@popperjs/core": "^2.11.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@ngtools/webpack": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.1.tgz", - "integrity": "sha512-6qRYFN6DqogZK0ZFrSlhg1OsIWm3lL3m+/Ixoj6/MLLjDBrTtHqmI93vg6P1EKYTH4fWChL7jtv7iS/LSZubgw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.8.tgz", + "integrity": "sha512-hwmpnUKHpC89rne9t/OBeoPM9MBiD9rAfVwnntK+d13/v44U2jWVON7ogIcyjWb+PyAn8VNn1/G404+YmOvxCA==", + "license": "MIT", "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^17.0.0", - "typescript": ">=5.2 <5.5", + "@angular/compiler-cli": "^20.0.0", + "typescript": ">=5.8 <6.0", "webpack": "^5.54.0" } }, @@ -4264,77 +6210,78 @@ } }, "node_modules/@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "license": "ISC", "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/git": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/git/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4342,47 +6289,50 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "license": "ISC", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "bin": { - "installed-package-contents": "lib/index.js" + "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", + "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", + "@npmcli/git": "^6.0.0", "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/package-json/node_modules/brace-expansion": { @@ -4395,38 +6345,57 @@ } }, "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4438,28 +6407,31 @@ } }, "node_modules/@npmcli/promise-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", - "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "license": "ISC", "dependencies": { - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4467,36 +6439,49 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/run-script": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", - "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "which": "^4.0.0" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4504,13 +6489,330 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -4527,233 +6829,327 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", "cpu": [ "arm" ], + "license": "MIT", "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "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==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", "cpu": [ "riscv64" ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", "optional": true, "os": [ "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "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==", + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", "cpu": [ "arm64" ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", "cpu": [ "ia32" ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@schematics/angular": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.17.tgz", - "integrity": "sha512-S5HwYem5Yjeceb5OLvforNcjfTMh2qsHnTP1BAYL81XPpqeg2udjAkJjKBxCwxMZSqdCMw3ne0eKppEYTaEZ+A==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.8.tgz", + "integrity": "sha512-lmdh1JywRl0BK1VcYwGDrNre78OpduNhsV4N5afELvrNPKSk/ixCb3iZq4MCY3yBZ3RV5Uso+vrJwwEeqe02JQ==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "17.3.17", - "@angular-devkit/schematics": "17.3.17", - "jsonc-parser": "3.2.1" + "@angular-devkit/core": "20.3.8", + "@angular-devkit/schematics": "20.3.8", + "jsonc-parser": "3.3.1" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", "license": "MIT", "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" }, "engines": { - "node": "^18.13.0 || >=20.9.0", + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -4762,21 +7158,55 @@ } }, "node_modules/@schematics/angular/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@schematics/angular/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/@schematics/angular/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@schematics/angular/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -4784,9 +7214,9 @@ "license": "MIT" }, "node_modules/@schematics/angular/node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -4795,70 +7225,123 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@sigstore/bundle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", - "integrity": "sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ==", + "node_modules/@schematics/angular/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@schematics/angular/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "optional": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.3.0" + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "optional": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "optional": true + }, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", - "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz", - "integrity": "sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==", + "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/sign": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.3.tgz", - "integrity": "sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "make-fetch-happen": "^13.0.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/tuf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.1.tgz", - "integrity": "sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", + "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.0", - "tuf-js": "^2.2.0" + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sigstore/verify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.1.0.tgz", - "integrity": "sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", + "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@sinonjs/commons": { @@ -4911,13 +7394,6 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, - "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", - "license": "MIT", - "optional": true - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -4946,20 +7422,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "license": "MIT", "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", - "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { @@ -4972,9 +7450,10 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4989,6 +7468,7 @@ "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -4998,9 +7478,10 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -5009,17 +7490,19 @@ "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { @@ -5035,6 +7518,7 @@ "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5051,6 +7535,7 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -5071,54 +7556,77 @@ "@types/node": "*" } }, + "node_modules/@types/cypress": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", + "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", + "deprecated": "This is a stub types definition for cypress (https://cypress.io). cypress provides its own type definitions, so you don't need @types/cypress installed!", + "optional": true, + "dependencies": { + "cypress": "*" + } + }, "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "license": "MIT", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, "node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5129,9 +7637,10 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" }, "node_modules/@types/node": { "version": "18.17.18", @@ -5139,9 +7648,10 @@ "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==" }, "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5165,9 +7675,10 @@ "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.8", @@ -5175,20 +7686,42 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "license": "MIT", "dependencies": { - "@types/mime": "*", + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", "@types/node": "*" } }, @@ -5208,21 +7741,16 @@ "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "license": "MIT", - "optional": true - }, "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5486,157 +8014,163 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", - "engines": { - "node": ">=14.6.0" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", @@ -5644,11 +8178,12 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" }, "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/accepts": { @@ -5714,12 +8249,10 @@ } }, "node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", "engines": { "node": ">= 14" } @@ -5728,6 +8261,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5755,6 +8289,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -5768,14 +8303,15 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -5785,14 +8321,32 @@ "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" + "node_modules/algoliasearch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz", + "integrity": "sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.1.0", + "@algolia/client-abtesting": "5.35.0", + "@algolia/client-analytics": "5.35.0", + "@algolia/client-common": "5.35.0", + "@algolia/client-insights": "5.35.0", + "@algolia/client-personalization": "5.35.0", + "@algolia/client-query-suggestions": "5.35.0", + "@algolia/client-search": "5.35.0", + "@algolia/ingestion": "1.35.0", + "@algolia/monitoring": "1.35.0", + "@algolia/recommend": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/amdefine": { @@ -5815,6 +8369,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "optional": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -5832,6 +8387,7 @@ "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -5844,6 +8400,21 @@ "node": ">=8" } }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -5882,23 +8453,11 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" }, "node_modules/array-from": { "version": "2.1.1", @@ -5990,6 +8549,12 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "optional": true + }, "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -6015,9 +8580,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "funding": [ { "type": "opencollective", @@ -6032,12 +8597,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -6090,43 +8656,75 @@ } }, "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", + "license": "MIT", "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "find-up": "^5.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": "^18.20.0 || ^20.10.0 || >=22.0.0" }, "peerDependencies": { "@babel/core": "^7.12.0", - "webpack": ">=5" + "webpack": ">=5.61.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/babel-loader/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -6137,58 +8735,31 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6227,6 +8798,15 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.22", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz", + "integrity": "sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -6242,6 +8822,25 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/beasties": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", + "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "license": "Apache-2.0", + "dependencies": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -6258,29 +8857,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -6346,9 +8922,10 @@ } }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -6357,7 +8934,8 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" }, "node_modules/bootstrap": { "version": "4.6.2", @@ -6524,107 +9102,6 @@ "stream-throttle": "^0.1.3" } }, - "node_modules/browser-sync-ui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/browser-sync-ui/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/browser-sync-ui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/browser-sync-ui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, - "node_modules/browser-sync-ui/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-sync-ui/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-sync/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/browser-sync/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/browser-sync/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -6639,24 +9116,6 @@ "node": ">=12" } }, - "node_modules/browser-sync/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/browser-sync/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "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", @@ -6668,15 +9127,6 @@ "universalify": "^0.1.0" } }, - "node_modules/browser-sync/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/browser-sync/node_modules/jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -6686,18 +9136,6 @@ "graceful-fs": "^4.1.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", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browser-sync/node_modules/ua-parser-js": { "version": "1.0.36", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", @@ -7054,9 +9492,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.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "funding": [ { "type": "opencollective", @@ -7071,11 +9509,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -7108,6 +9548,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -7137,14 +9578,6 @@ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/bundle-collapser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", @@ -7161,6 +9594,21 @@ "bundle-collapser": "bin/cmd.js" } }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -7170,11 +9618,12 @@ } }, "node_modules/cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -7182,13 +9631,13 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/cacache/node_modules/brace-expansion": { @@ -7200,39 +9649,46 @@ "balanced-match": "^1.0.0" } }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7243,6 +9699,43 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/cacache/node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/cached-path-relative": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", @@ -7318,9 +9811,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "version": "1.0.30001752", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz", + "integrity": "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==", "funding": [ { "type": "opencollective", @@ -7334,7 +9827,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/caseless": { "version": "0.12.0", @@ -7361,10 +9855,28 @@ "node": ">=4" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "license": "MIT" }, "node_modules/check-error": { "version": "1.0.3", @@ -7388,15 +9900,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -7409,6 +9916,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -7417,6 +9927,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { "node": ">=10" } @@ -7480,6 +9991,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true, "engines": { "node": ">=6" } @@ -7488,6 +10000,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "optional": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -7496,9 +10009,10 @@ } }, "node_modules/cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", "engines": { "node": ">=6" }, @@ -7507,10 +10021,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", - "license": "MIT", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "optional": true, "dependencies": { "string-width": "^4.2.0" @@ -7519,7 +10032,7 @@ "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "1.4.0" + "@colors/colors": "1.5.0" } }, "node_modules/cli-truncate": { @@ -7542,6 +10055,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", "engines": { "node": ">= 12" } @@ -7566,18 +10080,11 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "engines": { - "node": ">=0.8" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -7587,21 +10094,29 @@ "node": ">=6" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -7648,11 +10163,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, "node_modules/common-shakeify": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.1.tgz", @@ -7678,6 +10188,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -7689,6 +10200,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", @@ -7706,6 +10218,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -7713,12 +10226,14 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/compression/node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7740,7 +10255,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -7838,9 +10354,10 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -7865,7 +10382,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/content-type": { "version": "1.0.5", @@ -7881,22 +10399,28 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "license": "MIT", "dependencies": { "is-what": "^3.14.1" }, @@ -7905,19 +10429,19 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "license": "MIT", "dependencies": { - "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", - "globby": "^13.1.1", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -7931,6 +10455,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -7939,11 +10464,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", - "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.26.3" }, "funding": { "type": "opencollective", @@ -7959,7 +10485,6 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "devOptional": true, "dependencies": { "object-assign": "^4", "vary": "^1" @@ -8062,84 +10587,6 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/critters": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", - "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - } - }, - "node_modules/critters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/critters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -8176,21 +10623,22 @@ } }, "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -8198,7 +10646,7 @@ }, "peerDependencies": { "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" + "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { @@ -8210,24 +10658,26 @@ } }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -8239,6 +10689,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -8246,28 +10697,35 @@ "node": ">=4" } }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "optional": true, + "peer": true + }, "node_modules/cypress": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", - "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", + "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { - "@cypress/request": "^3.0.9", + "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", - "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "ci-info": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", - "cli-table3": "0.6.1", + "cli-table3": "~0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -8279,8 +10737,9 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "hasha": "5.2.2", + "getos": "^3.2.1", "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -8290,10 +10749,9 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", + "semver": "^7.5.3", "supports-color": "^8.1.1", - "systeminformation": "5.27.7", - "tmp": "~0.2.4", + "tmp": "~0.2.3", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" @@ -8302,14 +10760,13 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^20.1.0 || ^22.0.0 || >=24.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, "node_modules/cypress-fail-on-console-error": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", - "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", - "license": "MIT", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", + "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", "optional": true, "dependencies": { "chai": "^4.3.10", @@ -8319,71 +10776,9 @@ } }, "node_modules/cypress-wait-until": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", - "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", - "license": "MIT", - "optional": true - }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "optional": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "optional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", + "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", "optional": true }, "node_modules/cypress/node_modules/commander": { @@ -8448,15 +10843,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -8509,6 +10895,16 @@ "node": ">=0.10" } }, + "node_modules/date-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", + "optional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", @@ -8562,23 +10958,32 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { @@ -8598,11 +11003,15 @@ } }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defined": { @@ -8664,10 +11073,21 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" }, "node_modules/detective": { "version": "5.2.0", @@ -8697,6 +11117,13 @@ "node": ">= 0.8.0" } }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "optional": true, + "peer": true + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -8730,6 +11157,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "dependencies": { "path-type": "^4.0.0" }, @@ -8741,6 +11169,7 @@ "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -8760,10 +11189,24 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "optional": true, + "peer": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -8791,12 +11234,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -8813,9 +11258,10 @@ "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -8854,7 +11300,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/easy-extender": { "version": "2.3.4", @@ -8880,76 +11327,6 @@ "node": ">= 0.8.0" } }, - "node_modules/eazy-logger/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eazy-logger/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eazy-logger/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eazy-logger/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, - "node_modules/eazy-logger/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eazy-logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -8981,9 +11358,10 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.4.715", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", - "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" + "version": "1.5.244", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", + "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", @@ -9035,6 +11413,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -9044,6 +11423,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -9103,19 +11483,11 @@ "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "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/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -9136,10 +11508,18 @@ "node": ">=8.6" } }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true, + "peer": true + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -9155,15 +11535,29 @@ "node": ">=6" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "license": "MIT" }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "license": "MIT", "optional": true, "dependencies": { "prr": "~1.0.1" @@ -9307,10 +11701,11 @@ } }, "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -9318,49 +11713,51 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/esbuild-wasm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", - "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.9.tgz", + "integrity": "sha512-Jpv5tCSwQg18aCqCRD3oHIX/prBhXMDapIoG//A+6+dV0e7KQMGFg85ihJ5T1EeMjbZjON3TqFy0VrGAnIHLDA==", + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -9406,15 +11803,6 @@ "node": ">=4.0" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/escope": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", @@ -9508,61 +11896,12 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -9643,15 +11982,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -9694,18 +12024,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -9917,6 +12235,27 @@ "node": ">=0.8.x" } }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -9930,6 +12269,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "optional": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -9952,6 +12292,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "optional": true, "engines": { "node": ">=10.17.0" } @@ -9969,81 +12310,198 @@ } }, "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/express/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/express/node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/express/node_modules/ms": { + "node_modules/express/node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/express/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/express/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10051,33 +12509,112 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/express/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/express/node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/express/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } }, "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/express/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/ext": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", @@ -10095,22 +12632,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT", "optional": true }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -10176,15 +12699,16 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -10206,6 +12730,22 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -10218,6 +12758,7 @@ "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -10238,6 +12779,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "optional": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10272,47 +12814,59 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/finalhandler/node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "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", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10321,28 +12875,14 @@ } }, "node_modules/finalhandler/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -10359,6 +12899,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -10381,7 +12922,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "devOptional": true }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -10422,11 +12963,12 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -10440,6 +12982,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -10477,6 +13020,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10485,6 +13029,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", "engines": { "node": "*" }, @@ -10524,10 +13069,26 @@ "from2": "^2.0.3" } }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -10535,11 +13096,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -10587,6 +13143,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -10619,14 +13187,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -10643,6 +13203,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "optional": true, "engines": { "node": ">=10" }, @@ -10650,6 +13211,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "optional": true, + "dependencies": { + "async": "^3.2.0" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -10690,6 +13260,22 @@ "node": ">= 6" } }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -10719,32 +13305,6 @@ "node": ">=10" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -10765,9 +13325,10 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", @@ -10778,7 +13339,8 @@ "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" }, "node_modules/has": { "version": "1.0.3", @@ -10810,6 +13372,15 @@ "node": ">=0.10.0" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -10900,33 +13471,6 @@ "minimalistic-assert": "^1.0.1" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -10949,28 +13493,31 @@ } }, "node_modules/hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "license": "ISC", "dependencies": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", "engines": { - "node": "14 || >=16.14" + "node": "20 || >=22" } }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -10978,21 +13525,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, "node_modules/htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", @@ -11002,9 +13534,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -11012,22 +13544,37 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", @@ -11053,9 +13600,10 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", @@ -11074,6 +13622,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -11083,9 +13632,10 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -11126,11 +13676,12 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -11146,6 +13697,15 @@ "node": ">=8.12.0" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -11161,6 +13721,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -11191,39 +13752,33 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", - "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", + "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11233,6 +13788,7 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "license": "MIT", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -11285,6 +13841,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true, "engines": { "node": ">=8" } @@ -11304,11 +13861,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/inline-source-map": { @@ -11327,42 +13885,6 @@ "node": ">=0.10.0" } }, - "node_modules/inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", @@ -11384,28 +13906,21 @@ } }, "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/ip-address/node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 0.10" } }, "node_modules/is-arguments": { @@ -11456,25 +13971,30 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11518,6 +14038,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -11535,17 +14073,28 @@ } }, "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/is-number": { "version": "7.0.0", @@ -11588,6 +14137,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -11595,10 +14145,17 @@ "node": ">=0.10.0" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "optional": true, "engines": { "node": ">=8" }, @@ -11631,6 +14188,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "optional": true, "engines": { "node": ">=10" }, @@ -11641,17 +14199,22 @@ "node_modules/is-what": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "license": "MIT" }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { @@ -11659,6 +14222,19 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, + "node_modules/isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "optional": true, + "peer": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -11668,6 +14244,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11680,46 +14257,38 @@ "optional": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -11731,6 +14300,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -11740,18 +14310,11 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11771,22 +14334,16 @@ } }, "node_modules/joi": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", - "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", - "license": "BSD-3-Clause", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "optional": true, "dependencies": { - "@hapi/address": "^5.1.1", - "@hapi/formula": "^3.0.2", - "@hapi/hoek": "^11.0.7", - "@hapi/pinpoint": "^2.0.1", - "@hapi/tlds": "^1.1.1", - "@hapi/topo": "^6.0.2", - "@standard-schema/spec": "^1.0.0" - }, - "engines": { - "node": ">= 20" + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" } }, "node_modules/jquery": { @@ -11801,18 +14358,6 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -11821,14 +14366,15 @@ "optional": true }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -11879,9 +14425,10 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -11940,6 +14487,46 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "optional": true }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -11948,6 +14535,79 @@ "source-map-support": "^0.5.5" } }, + "node_modules/karma/node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/karma/node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/karma/node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "optional": true, + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/karma/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/karma/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "optional": true, + "peer": true + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=14.14" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -11961,18 +14621,11 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, "node_modules/labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -11983,12 +14636,13 @@ } }, "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "node_modules/lazy-ass": { @@ -12001,9 +14655,10 @@ } }, "node_modules/less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", + "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", + "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -12013,7 +14668,7 @@ "lessc": "bin/lessc" }, "engines": { - "node": ">=6" + "node": ">=14" }, "optionalDependencies": { "errno": "^0.1.1", @@ -12026,41 +14681,36 @@ } }, "node_modules/less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "dependencies": { - "klona": "^2.0.4" - }, + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", + "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", + "license": "MIT", "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "less": "^3.5.0 || ^4.0.0", "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" }, - "engines": { - "node": ">=6" + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/less/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "optional": true, "bin": { "mime": "cli.js" @@ -12069,33 +14719,6 @@ "node": ">=4" } }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -12163,39 +14786,6 @@ } } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -12213,6 +14803,33 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/lmdb": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.2.tgz", + "integrity": "sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.4.2", + "@lmdb/lmdb-darwin-x64": "3.4.2", + "@lmdb/lmdb-linux-arm": "3.4.2", + "@lmdb/lmdb-linux-arm64": "3.4.2", + "@lmdb/lmdb-linux-x64": "3.4.2", + "@lmdb/lmdb-win32-arm64": "3.4.2", + "@lmdb/lmdb-win32-x64": "3.4.2" + } + }, "node_modules/loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -12248,12 +14865,14 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", @@ -12283,6 +14902,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "optional": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -12294,70 +14914,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", @@ -12376,39 +14932,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -12426,6 +14949,23 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log4js": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "optional": true, + "peer": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -12447,14 +14987,46 @@ } }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=12" + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" } }, "node_modules/make-error": { @@ -12464,24 +15036,34 @@ "dev": true }, "node_modules/make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, "node_modules/map-stream": { @@ -12517,20 +15099,31 @@ } }, "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.50.0.tgz", + "integrity": "sha512-N0LUYQMUA1yS5tJKmMtU9yprPm6ZIg24yr/OVv/7t6q0kKDIho4cBbXRi1XKttUmNYDYgF/q45qrKE/UhGO0CA==", + "license": "Apache-2.0", "dependencies": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -12552,6 +15145,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -12585,6 +15179,19 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -12608,14 +15215,28 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "optional": true, "engines": { "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -12685,14 +15306,6 @@ "node": ">= 6" } }, - "node_modules/minify-stream/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minify-stream/node_modules/terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", @@ -12739,9 +15352,10 @@ } }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -12750,6 +15364,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -12758,16 +15373,17 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -12777,6 +15393,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12788,26 +15405,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -12819,6 +15417,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12830,6 +15429,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -12841,6 +15441,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12852,6 +15453,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -12860,26 +15462,15 @@ } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/mitt": { @@ -12888,6 +15479,19 @@ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "devOptional": true }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "optional": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -12931,9 +15535,10 @@ } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", "engines": { "node": ">=10" } @@ -12943,6 +15548,38 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/msgpackr": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", + "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, "node_modules/multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", @@ -12966,6 +15603,7 @@ "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -12980,11 +15618,12 @@ "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" }, "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/mutexify": { @@ -13087,12 +15726,12 @@ "dev": true }, "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "license": "MIT", "optional": true, "dependencies": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, @@ -13103,19 +15742,11 @@ "node": ">= 4.4.x" } }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/needle/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -13154,29 +15785,16 @@ } }, "node_modules/ngx-infinite-scroll": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-17.0.0.tgz", - "integrity": "sha512-pQXLuRiuhRuDKD3nmgyW1V08JVNBepmk6nb8qjHc5hgsWNts01+R/p33rYcRDzcut6/PWqGyrZ9o9i8swzMYMA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-20.0.0.tgz", + "integrity": "sha512-Mh7lg85jeDPzZirxPHjyMagCcC3vbk+yPO5uoXHNkmGer8MrO6vOydOX306qY4QYDyMJ+ngIQgpl5HJXfc590A==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": ">=17.0.0 <18.0.0", - "@angular/core": ">=17.0.0 <18.0.0" - } - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" + "@angular/common": ">=20.0.0 <21.0.0", + "@angular/core": ">=20.0.0 <21.0.0" } }, "node_modules/nise": { @@ -13235,109 +15853,99 @@ } }, "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", "optional": true }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "license": "MIT", + "optional": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "detect-libc": "^2.0.1" }, "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { "node": ">=16" } }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/node-gyp/node_modules/tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18" } }, "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -13345,40 +15953,37 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "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.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "license": "MIT" }, "node_modules/nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", - "dependencies": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-path": { @@ -13393,100 +15998,186 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", + "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "license": "ISC", "dependencies": { - "ignore-walk": "^6.0.4" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.0.0.tgz", + "integrity": "sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "license": "ISC", "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-registry-fetch": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", - "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "license": "ISC", "dependencies": { - "make-fetch-happen": "^13.0.0", + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "optional": true, "dependencies": { "path-key": "^3.0.0" }, @@ -13498,6 +16189,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -13536,7 +16228,8 @@ "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" }, "node_modules/on-finished": { "version": "2.3.0", @@ -13554,6 +16247,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -13570,6 +16264,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "optional": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -13581,16 +16276,18 @@ } }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13635,104 +16332,200 @@ } }, "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ora/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ora/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/supports-color": { + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ora/node_modules/string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "license": "MIT", + "optional": true + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -13743,7 +16536,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -13783,6 +16575,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13794,21 +16587,27 @@ } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry/node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -13821,35 +16620,74 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/pacote": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", - "cacache": "^18.0.0", + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/pako": { @@ -13909,45 +16747,73 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", + "license": "MIT", "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "license": "MIT", "dependencies": { - "parse5": "^7.0.0" + "parse5": "^8.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13994,38 +16860,42 @@ } }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, "engines": { "node": ">=8" } @@ -14151,101 +17021,24 @@ } }, "node_modules/piscina": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", - "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", + "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", + "license": "MIT", + "engines": { + "node": ">=20.x" + }, "optionalDependencies": { - "nice-napi": "^1.0.2" + "@napi-rs/nice": "^1.0.4" } }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { + "node_modules/pkce-challenge": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.20.0" } }, "node_modules/pngjs": { @@ -14299,9 +17092,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -14316,10 +17109,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -14358,12 +17152,14 @@ "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "license": "MIT" }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -14372,12 +17168,13 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -14388,11 +17185,12 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -14405,6 +17203,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -14416,9 +17215,10 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -14430,7 +17230,8 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -14477,11 +17278,12 @@ } }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/process": { @@ -14497,15 +17299,11 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -14518,6 +17316,7 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -14526,14 +17325,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -14544,6 +17335,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT", "optional": true }, "node_modules/ps-tree": { @@ -14597,6 +17389,16 @@ "node": ">=6" } }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.9" + } + }, "node_modules/qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -14732,92 +17534,6 @@ "readable-stream": "^2.0.2" } }, - "node_modules/read-package-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", - "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -14849,19 +17565,22 @@ } }, "node_modules/reflect-metadata": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", - "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -14869,59 +17588,46 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "license": "MIT", "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -14943,6 +17649,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14958,29 +17665,25 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -14996,14 +17699,6 @@ "node": ">=12" } }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resp-modifier": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", @@ -15036,6 +17731,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "optional": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -15048,6 +17744,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -15062,15 +17759,16 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "optional": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, "dependencies": { "glob": "^7.1.3" }, @@ -15091,11 +17789,12 @@ } }, "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", + "license": "MIT", "dependencies": { - "@types/estree": "1.0.6" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -15105,31 +17804,80 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@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", + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", "fsevents": "~2.3.2" } }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 18" + } + }, + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-parallel": { @@ -15161,9 +17909,10 @@ "devOptional": true }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -15179,12 +17928,13 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", + "license": "MIT", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -15192,12 +17942,16 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", - "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, @@ -15233,21 +17987,52 @@ } } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/sass/node_modules/immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "license": "MIT" + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC", "optional": true }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -15255,7 +18040,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -15263,14 +18048,15 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -15281,6 +18067,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -15291,7 +18078,8 @@ "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/scope-analyzer": { "version": "2.1.1", @@ -15315,12 +18103,14 @@ "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -15330,10 +18120,12 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -15579,6 +18371,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -15614,9 +18407,13 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15696,22 +18493,24 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true }, "node_modules/sigstore": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.2.tgz", - "integrity": "sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "@sigstore/sign": "^2.2.3", - "@sigstore/tuf": "^2.3.1", - "@sigstore/verify": "^1.1.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/simple-concat": { @@ -15770,38 +18569,6 @@ "node": ">=0.3.1" } }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "optional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -15816,43 +18583,11 @@ "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -15918,6 +18653,7 @@ "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -15925,11 +18661,12 @@ } }, "node_modules/socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -15938,30 +18675,33 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -16005,14 +18745,6 @@ "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -16022,6 +18754,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -16030,26 +18763,30 @@ "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -16065,6 +18802,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -16078,6 +18816,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16099,11 +18838,6 @@ "node": "*" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -16131,31 +18865,31 @@ } }, "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/start-server-and-test": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", - "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", - "license": "MIT", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", + "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", "optional": true, "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.3", + "debug": "4.4.1", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.5" + "wait-on": "8.0.4" }, "bin": { "server-test": "src/bin/start.js", @@ -16173,10 +18907,9 @@ "optional": true }, "node_modules/start-server-and-test/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "optional": true, "dependencies": { "ms": "^2.1.3" @@ -16194,7 +18927,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT", "optional": true }, "node_modules/statuses": { @@ -16205,6 +18937,18 @@ "node": ">= 0.6" } }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -16253,6 +18997,21 @@ "node": ">= 0.10.0" } }, + "node_modules/streamroller": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "optional": true, + "peer": true, + "dependencies": { + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -16279,6 +19038,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -16304,6 +19064,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -16315,6 +19076,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "optional": true, "engines": { "node": ">=6" } @@ -16339,6 +19101,19 @@ "minimist": "^1.1.0" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -16350,14 +19125,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", @@ -16366,33 +19133,6 @@ "acorn-node": "^1.2.0" } }, - "node_modules/systeminformation": { - "version": "5.27.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", - "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", - "license": "MIT", - "optional": true, - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16405,6 +19145,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -16421,6 +19162,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -16432,6 +19174,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -16443,6 +19186,32 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=8" } @@ -16451,6 +19220,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -16459,12 +19229,13 @@ } }, "node_modules/terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -16476,15 +19247,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -16509,35 +19281,20 @@ } }, "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -16545,25 +19302,28 @@ "node": ">=0.4.0" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -16587,13 +19347,59 @@ "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" }, "node_modules/tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tinyify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", @@ -16629,14 +19435,6 @@ "node": ">= 6" } }, - "node_modules/tinyify/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/tinyify/node_modules/terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", @@ -16662,22 +19460,22 @@ } }, "node_modules/tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", + "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", "license": "MIT", "optional": true, "dependencies": { - "tldts-core": "^6.1.86" + "tldts-core": "^6.1.70" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", + "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", "license": "MIT", "optional": true }, @@ -16686,17 +19484,6 @@ "resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.9.tgz", "integrity": "sha512-5QOBAvDxZZwW1i+2YXMgF6/PuV/KhA0LyE9PyVi8Ywr3bfIPziZcQD+RpdJaQurCU8zIGtBo/XuPCEHdvyeFuQ==" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-buffer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", @@ -16749,9 +19536,9 @@ } }, "node_modules/tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "license": "BSD-3-Clause", "optional": true, "dependencies": { @@ -16821,6 +19608,22 @@ "node": ">=0.10.0" } }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -16906,23 +19709,48 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tuf-js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", - "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", + "license": "MIT", "dependencies": { - "@tufjs/models": "2.0.0", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/tuf-js/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tuf-js/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -16973,6 +19801,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "optional": true, "engines": { "node": ">=10" }, @@ -17016,9 +19845,10 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17027,6 +19857,26 @@ "node": ">=14.17" } }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "optional": true, + "peer": true, + "engines": { + "node": "*" + } + }, "node_modules/umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", @@ -17090,18 +19940,19 @@ "undeclared-identifiers": "bin.js" } }, - "node_modules/undici": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.7.1.tgz", - "integrity": "sha512-+Wtb9bAQw6HYWzCnxrPTMVEV3Q1QjYanI0E4q02ehReMuquQdLTEFEYbfs7hcImVYKcQkWSwT6buEmSVIiDDtQ==", - "engines": { - "node": ">=18.0" - } + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT", + "optional": true, + "peer": true }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -17110,6 +19961,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -17119,41 +19971,45 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/universalify": { @@ -17183,9 +20039,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.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "funding": [ { "type": "opencollective", @@ -17200,9 +20056,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -17264,20 +20121,19 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "dependencies": { - "builtins": "^5.0.0" - }, + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/vary": { @@ -17303,456 +20159,29 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vite": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", - "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wait-on": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", - "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", - "license": "MIT", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", + "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", "optional": true, "dependencies": { - "axios": "^1.12.1", - "joi": "^18.0.1", + "axios": "^1.11.0", + "joi": "^17.13.3", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" @@ -17765,10 +20194,9 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "optional": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -17780,23 +20208,13 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT", "optional": true }, - "node_modules/wait-on/node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -17809,47 +20227,49 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dependencies": { - "defaults": "^1.0.3" - } + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "license": "MIT", + "optional": true }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.101.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", + "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", + "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -17868,18 +20288,20 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.12", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -17894,54 +20316,65 @@ } } }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "node_modules/webpack-dev-middleware/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { @@ -17956,49 +20389,231 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "node_modules/webpack-dev-server/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-server/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -18024,9 +20639,10 @@ } }, "node_modules/webpack/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -18034,35 +20650,23 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "node_modules/webpack/node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=10.13.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "acorn": "^8.14.0" } }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -18076,6 +20680,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } @@ -18122,7 +20727,8 @@ "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" }, "node_modules/wrap-ansi": { "version": "6.2.0", @@ -18142,6 +20748,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -18154,66 +20761,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/wrap-comment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", @@ -18228,6 +20775,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "devOptional": true, "engines": { "node": ">=10.0.0" }, @@ -18244,10 +20792,26 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xhr2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -18279,6 +20843,25 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "optional": true, + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", @@ -18291,6 +20874,56 @@ "node": ">=6" } }, + "node_modules/yargs/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "optional": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "optional": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", + "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -18314,7 +20947,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, @@ -18322,14 +20954,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zone.js": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.4.tgz", - "integrity": "sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==", - "dependencies": { - "tslib": "^2.3.0" + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + }, + "node_modules/zone.js": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", + "license": "MIT" + }, "node_modules/zrender": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", @@ -18351,6 +21011,145 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, + "@algolia/abtesting": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", + "integrity": "sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-abtesting": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz", + "integrity": "sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-analytics": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz", + "integrity": "sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-common": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz", + "integrity": "sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==" + }, + "@algolia/client-insights": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz", + "integrity": "sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-personalization": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz", + "integrity": "sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-query-suggestions": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz", + "integrity": "sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/client-search": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz", + "integrity": "sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/ingestion": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz", + "integrity": "sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/monitoring": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz", + "integrity": "sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/recommend": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz", + "integrity": "sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==", + "requires": { + "@algolia/client-common": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz", + "integrity": "sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==", + "requires": { + "@algolia/client-common": "5.35.0" + } + }, + "@algolia/requester-fetch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz", + "integrity": "sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==", + "requires": { + "@algolia/client-common": "5.35.0" + } + }, + "@algolia/requester-node-http": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz", + "integrity": "sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==", + "requires": { + "@algolia/client-common": "5.35.0" + } + }, "@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -18372,392 +21171,310 @@ } }, "@angular-devkit/architect": { - "version": "0.1703.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.1.tgz", - "integrity": "sha512-vkfvURv7O+3fHMTE9K+yUEiFS0v4JNYKsDP0LE1ChH5Ocy0bJXGcH2Cyz2W8qdJGDG/tKe41VzvOLpu88Xv3zQ==", + "version": "0.2003.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.8.tgz", + "integrity": "sha512-pbXQ2NlZQwzjsSIEoRQMGB1WrgZFCyM0zoD9h+rDjyR8PEB1Evl4evZ4Q5CJzjEBxC8IEG61PHKHjh8GdLb+sg==", "requires": { - "@angular-devkit/core": "17.3.1", - "rxjs": "7.8.1" + "@angular-devkit/core": "20.3.8", + "rxjs": "7.8.2" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "requires": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + } + }, + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "optional": true, + "peer": true + }, + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" + } } }, "@angular-devkit/build-angular": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-17.3.1.tgz", - "integrity": "sha512-e+hZvLVH5AvHCFbVtKRd5oJeFsEmjg7kK1V6hsVxH4YE2f2x399TSr+AGxwV+R3jnjZ67ujIeXXd0Uuf1RwcSg==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.8.tgz", + "integrity": "sha512-U+dSQL/M9orZFPHGgkW/MoAWVGc65TMRChvQ+W4iGB8jQ4z3gE91tTrsKnaJn7D+vW95nAkdGWAVCl7YRf1hhA==", "requires": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1703.1", - "@angular-devkit/build-webpack": "0.1703.1", - "@angular-devkit/core": "17.3.1", - "@babel/core": "7.24.0", - "@babel/generator": "7.23.6", - "@babel/helper-annotate-as-pure": "7.22.5", - "@babel/helper-split-export-declaration": "7.22.6", - "@babel/plugin-transform-async-generator-functions": "7.23.9", - "@babel/plugin-transform-async-to-generator": "7.23.3", - "@babel/plugin-transform-runtime": "7.24.0", - "@babel/preset-env": "7.24.0", - "@babel/runtime": "7.24.0", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "17.3.1", - "@vitejs/plugin-basic-ssl": "1.1.0", + "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/build-webpack": "0.2003.8", + "@angular-devkit/core": "20.3.8", + "@angular/build": "20.3.8", + "@babel/core": "7.28.3", + "@babel/generator": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.28.0", + "@babel/plugin-transform-async-to-generator": "7.27.1", + "@babel/plugin-transform-runtime": "7.28.3", + "@babel/preset-env": "7.28.3", + "@babel/runtime": "7.28.3", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "20.3.8", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.18", - "babel-loader": "9.1.3", - "babel-plugin-istanbul": "6.1.1", + "autoprefixer": "10.4.21", + "babel-loader": "10.0.0", "browserslist": "^4.21.5", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.22", - "css-loader": "6.10.0", - "esbuild": "0.20.1", - "esbuild-wasm": "0.20.1", - "fast-glob": "3.3.2", - "http-proxy-middleware": "2.0.6", - "https-proxy-agent": "7.0.4", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", + "copy-webpack-plugin": "13.0.1", + "css-loader": "7.1.2", + "esbuild": "0.25.9", + "esbuild-wasm": "0.25.9", + "fast-glob": "3.3.3", + "http-proxy-middleware": "3.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.2.0", - "less-loader": "11.1.0", + "less": "4.4.0", + "less-loader": "12.3.0", "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "magic-string": "0.30.8", - "mini-css-extract-plugin": "2.8.1", - "mrmime": "2.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.1", - "piscina": "4.4.0", - "postcss": "8.4.35", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.4", + "open": "10.2.0", + "ora": "8.2.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "postcss": "8.5.6", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.71.1", - "sass-loader": "14.1.1", - "semver": "7.6.0", + "rxjs": "7.8.2", + "sass": "1.90.0", + "sass-loader": "16.0.5", + "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.29.1", + "terser": "5.43.1", "tree-kill": "1.2.2", - "tslib": "2.6.2", - "undici": "6.7.1", - "vite": "5.1.5", - "watchpack": "2.4.0", - "webpack": "5.90.3", - "webpack-dev-middleware": "6.1.1", - "webpack-dev-server": "4.15.1", - "webpack-merge": "5.10.0", + "tslib": "2.8.1", + "webpack": "5.101.2", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.2.2", + "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, "dependencies": { - "@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", "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", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" } }, - "@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "optional": true + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } }, - "@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "optional": true + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" + } }, - "@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "optional": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "optional": true, + "peer": true, "requires": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "readdirp": "^4.0.1" } }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "requires": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "optional": true, + "peer": true }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" } } }, "@angular-devkit/build-webpack": { - "version": "0.1703.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.1.tgz", - "integrity": "sha512-nVUzewX8RCzaEPQZ1JQpE42wpsYchKQwfXUSCkoUsuCMB2c6zuEz0Jt94nzJg3UjSEEV4ZqCH8v5MDOvB49Rlw==", + "version": "0.2003.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.8.tgz", + "integrity": "sha512-IKLQCe7BgV8XRl9m6oirU5XQ9ojq214GH6GKw8dvGg1MCIxv/TfB3pRTPexgOqPaWk6SONyXj6tshB+Nluk3nw==", "requires": { - "@angular-devkit/architect": "0.1703.1", - "rxjs": "7.8.1" - } - }, - "@angular-devkit/core": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.1.tgz", - "integrity": "sha512-EP7zwqBEaOPuBJwzKmh2abfgNFITGX178BOyTG6zTymeMzEbrvy2OdeQXSslkJ/RGLCpx60GT+0CFW7wGlQR6Q==", - "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" - } + "@angular-devkit/architect": "0.2003.8", + "rxjs": "7.8.2" } }, "@angular-devkit/schematics": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.17.tgz", - "integrity": "sha512-ZXsIJXZm0I0dNu1BqmjfEtQhnzqoupUHHZb4GHm5NeQHBFZctQlkkNxLUU27GVeBUwFgEmP7kFgSLlMPTGSL5g==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.8.tgz", + "integrity": "sha512-Ymv7nWLTDB1gBh2laRveO912eUpQ/rUIzKRr8VQFMVG/wNipL88vzyrlKhJa7WhQ3CdKxLD7kplFIjdev7XUVg==", "requires": { - "@angular-devkit/core": "17.3.17", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" + "@angular-devkit/core": "20.3.8", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.17", + "ora": "8.2.0", + "rxjs": "7.8.2" }, "dependencies": { "@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" } }, "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" + } + }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" } }, "json-schema-traverse": { @@ -18766,135 +21483,541 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "optional": true, + "peer": true + }, + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" } } }, "@angular/animations": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-17.3.1.tgz", - "integrity": "sha512-2TZ0M5J0IizhHpb404DeqArlv8Ki9BFz5ZUuET2uFROpKW8IMDCht8fSrn/DKHpjB9lvzPUhNFaRxNWEY6klnA==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", + "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", "requires": { "tslib": "^2.3.0" } }, - "@angular/cli": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-17.3.17.tgz", - "integrity": "sha512-FgOvf9q5d23Cpa7cjP1FYti/v8S1FTm8DEkW3TY8lkkoxh3isu28GFKcLD1p/XF3yqfPkPVHToOFla5QwsEgBQ==", + "@angular/build": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.8.tgz", + "integrity": "sha512-wE6/T1FIjDSXljyNPh7KEwK5ysH3/uq2h8ZB5UCAAUkPHcQ/Y1unk27TUYePO7++KjkYXUX6XwwYZksXCZFJjA==", "requires": { - "@angular-devkit/architect": "0.1703.17", - "@angular-devkit/core": "17.3.17", - "@angular-devkit/schematics": "17.3.17", - "@schematics/angular": "17.3.17", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.2", - "inquirer": "9.2.15", - "jsonc-parser": "3.2.1", - "npm-package-arg": "11.0.1", - "npm-pick-manifest": "9.0.0", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "17.0.6", - "resolve": "1.22.8", - "semver": "7.6.0", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.2003.8", + "@babel/core": "7.28.3", + "@babel/helper-annotate-as-pure": "7.27.3", + "@babel/helper-split-export-declaration": "7.24.7", + "@inquirer/confirm": "5.1.14", + "@vitejs/plugin-basic-ssl": "2.1.0", + "beasties": "0.3.5", + "browserslist": "^4.23.0", + "esbuild": "0.25.9", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "lmdb": "3.4.2", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "8.0.0", + "picomatch": "4.0.3", + "piscina": "5.1.3", + "rollup": "4.52.3", + "sass": "1.90.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "tinyglobby": "0.2.14", + "vite": "7.1.11", + "watchpack": "2.4.4" }, "dependencies": { - "@angular-devkit/architect": { - "version": "0.1703.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1703.17.tgz", - "integrity": "sha512-LD6po8lGP2FI7WbnsSxtvpiIi+FYL0aNfteunkT+7po9jUNflBEYHA64UWNO56u7ryKNdbuiN8/TEh7FEUnmCw==", + "@types/node": { + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "optional": true, + "peer": true, "requires": { - "@angular-devkit/core": "17.3.17", - "rxjs": "7.8.1" + "undici-types": "~7.16.0" } }, - "@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "requires": {} + }, + "ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "environment": "^1.0.0" + } + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, + "cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "requires": { + "restore-cursor": "^5.0.0" + } + }, + "cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + } + }, + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "requires": {} + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" + }, + "listr2": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", + "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "requires": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + } + }, + "log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "requires": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "requires": { + "get-east-asian-width": "^1.3.1" + } + }, + "slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "requires": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + } + } + } + }, + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "requires": { + "mimic-function": "^5.0.0" + } + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "requires": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + } + }, + "semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "requires": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + } + }, + "string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "requires": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "fsevents": "~2.3.3", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "dependencies": { + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + } + } + } + }, + "wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "requires": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + } + } + } + }, + "@angular/cli": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.8.tgz", + "integrity": "sha512-UUNmwDCrRknE+50Gwwt66o4T/l0KfLWOzxlYdLn9l2PIVNhpspg+5CUkO0juRyRyCxCnojic1s9pPTD1Eq4rtg==", + "requires": { + "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/core": "20.3.8", + "@angular-devkit/schematics": "20.3.8", + "@inquirer/prompts": "7.8.2", + "@listr2/prompt-adapter-inquirer": "3.0.1", + "@modelcontextprotocol/sdk": "1.17.3", + "@schematics/angular": "20.3.8", + "@yarnpkg/lockfile": "1.1.0", + "algoliasearch": "5.35.0", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "9.0.1", + "npm-package-arg": "13.0.0", + "pacote": "21.0.0", + "resolve": "1.22.10", + "semver": "7.7.2", + "yargs": "18.0.0", + "zod": "3.25.76" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "requires": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" + } + }, + "@listr2/prompt-adapter-inquirer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.1.tgz", + "integrity": "sha512-3XFmGwm3u6ioREG+ynAQB7FoxfajgQnMhIu8wC5eo/Lsih4aKDg0VuIMGaOsYn7hJSJagSeaD4K8yfpkEoDEmA==", + "requires": { + "@inquirer/type": "^3.0.7" } }, "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "requires": { - "color-convert": "^2.0.1" + "ajv": "^8.0.0" + } + }, + "ansi-escapes": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "requires": { + "environment": "^1.0.0" + } + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "requires": { + "restore-cursor": "^5.0.0" + } + }, + "cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "requires": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" } }, "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "listr2": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", + "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "requires": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + } + }, + "log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "requires": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "requires": { + "get-east-asian-width": "^1.3.1" + } + }, + "slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "requires": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + } + } + } + }, + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "requires": { + "mimic-function": "^5.0.0" + } + }, "picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "optional": true, + "peer": true + }, + "restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "requires": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + } }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "requires": { - "lru-cache": "^6.0.0" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + } + }, + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" + }, + "string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "requires": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "requires": { + "ansi-regex": "^6.0.1" } }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" } }, "y18n": { @@ -18903,96 +22026,120 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "requires": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" } }, "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==" } } }, "@angular/common": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-17.3.1.tgz", - "integrity": "sha512-HyUTJ4RxhE3bOmFRV6Fv2y01ixbrUb8Hd4MxPm8REbNMGKsWCfXhR3FfxFL18Sc03SAF+o0Md0wwekjFKTNKfQ==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", + "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-17.3.1.tgz", - "integrity": "sha512-8qqlWPGZEyD2FY5losOW3Aocro+lFysPDzsf0LHgQUM6Ub1b+pq4jUOjH6w0vzaxG3TfxkgzOQ9aNdWtSV67Rg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", + "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-17.3.1.tgz", - "integrity": "sha512-xLV9KU+zOpe57/2rQ59ku21EaStNpLSlR9+qkDYf8JR09fB+W9vY3UYbpi5RjHxAFIZBM5D9SFQjjll8rch26g==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", + "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", "requires": { - "@babel/core": "7.23.9", + "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", + "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", "tslib": "^2.3.0", - "yargs": "^17.2.1" + "yargs": "^18.0.0" }, "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "requires": { - "color-convert": "^2.0.1" + "readdirp": "^4.0.1" } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" + }, + "string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "requires": { - "color-name": "~1.1.4" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "requires": { + "ansi-regex": "^6.0.1" + } }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" } }, "y18n": { @@ -19001,98 +22148,109 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "requires": { - "cliui": "^7.0.2", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==" } } }, "@angular/core": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-17.3.1.tgz", - "integrity": "sha512-Qf3/sgkXS1LHwOTtqAVYprySrn0YpPIZqerPc0tK+hyQfwAz5BQlpcBhbH8RWKlfCY8eO0cqo/j0+e8DQOgYfg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", + "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-17.3.1.tgz", - "integrity": "sha512-HndsO90k67sFHzd+sII+rhAUksffBvquFuAUCc6QR9WVjILxVg2fY7oBidgS1gKNqu0mptPG0GvuORnaW/0gSg==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", + "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", "requires": { "tslib": "^2.3.0" } }, "@angular/language-service": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-17.3.1.tgz", - "integrity": "sha512-awC+KHwIRXZ7biQz0Q7q+UZuuyeWHcxjxyQtvv0n1jwwyRpUo8WAXcduKRxl/wMOrxfZkB/tpGcd1/Eeql9CCw==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.9.tgz", + "integrity": "sha512-aCsuzlFx8a/VMBNgXMfwai97j2QHZ8PhQwzwodDNb2X3eQsaUO+nCgs5kNIZmQ/rJESH+fY9ZdlZcrYbVp+nBA==", "dev": true }, "@angular/localize": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-17.3.1.tgz", - "integrity": "sha512-ma8PD+DWv68OKgvbmxw7rVohT5HvIYgbmPnVg8lyEz/YkUa9lua0zzrgA+3HUComqv16oVrIaQr00oWxn/9lXQ==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", + "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", "requires": { - "@babel/core": "7.23.9", + "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", - "fast-glob": "3.3.2", - "yargs": "^17.2.1" + "tinyglobby": "^0.2.12", + "yargs": "^18.0.0" }, "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" + }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "requires": { - "color-name": "~1.1.4" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "requires": { + "ansi-regex": "^6.0.1" + } }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" } }, "y18n": { @@ -19101,65 +22259,63 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yargs": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.0.tgz", - "integrity": "sha512-GQl1pWyDoGptFPJx9b9L6kmR33TGusZvXIZUT+BOz9f7X2L94oeAskFYLEg/FkhV06zZPBYLvLZRWeYId29lew==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", "requires": { - "cliui": "^7.0.2", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^22.0.0" } }, "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==" } } }, "@angular/platform-browser": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-17.3.1.tgz", - "integrity": "sha512-8ABAL8PElSGzkIparVwifsU0NSu0DdqnWYw9YvLhhZQ6lOuWbG+dTUo/DXzmWhA6ezQWJGNakEZPJJytFIIy+A==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", + "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-17.3.1.tgz", - "integrity": "sha512-ACW/npNaDxUNQtEomjjv/KIBY8jHEinePff5qosnAxLE0IpA4qE9eDp36zG35xoJqrPJPYjXbZCBRqqrzM7U7Q==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.9.tgz", + "integrity": "sha512-XLGDmloD25eEeQM3hrCnU+2TqXpFLp36xOPqVSyBNso0YFXBtAX/lc2tcOFX3fLslje3LT0nyObAlV45YfBiGA==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-server": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-17.3.1.tgz", - "integrity": "sha512-yC1WgUquIac8qFCPMLjRio2ViR3XHexlXKlZpFhqpWAFPsWSHjoCHTEW+KTUFZmOPhUEFR2W8fWOChur8mjthw==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", + "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", "requires": { "tslib": "^2.3.0", "xhr2": "^0.2.0" } }, "@angular/router": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-17.3.1.tgz", - "integrity": "sha512-H6H7lY9i5Ppu0SFwwpeWqJbCFw8cILOj8Rd1+AGoCN5m3ivPtjD2Ltz62PI2zZkqx+WhQdk19l61Wm3oRqg70A==", + "version": "20.3.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", + "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/ssr": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-17.3.17.tgz", - "integrity": "sha512-hRszFhFPh74n17cjhbRuR0igSwHm4ssB0LgkE4A5tBgYTSoWomRM6nmiyrk10OdQHlLOTFwdTIZ3aPDM5174Ow==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", + "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", "requires": { - "critters": "0.0.22", "tslib": "^2.3.0" } }, @@ -19174,25 +22330,25 @@ } }, "@babel/compat-data": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", - "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==" + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==" }, "@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "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.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -19213,56 +22369,44 @@ } }, "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "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" } } } }, "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "requires": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.27.3" } }, "@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.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -19288,18 +22432,16 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz", - "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", + "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.5", "semver": "^6.3.1" }, "dependencies": { @@ -19311,12 +22453,12 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", + "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "dependencies": { @@ -19328,122 +22470,113 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } } }, - "@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==" - }, - "@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==", - "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==", - "requires": { - "@babel/types": "^7.22.5" - } + "@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==" }, "@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", "requires": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" } }, "@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "requires": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@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.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "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.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" } }, "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.27.1" } }, "@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==" + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@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==", - "requires": { - "@babel/types": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "requires": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@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==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { @@ -19457,18 +22590,18 @@ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" }, "@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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==" }, "@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" } }, "@babel/helpers": { @@ -19488,31 +22621,48 @@ "@babel/types": "^7.28.5" } }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", + "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "requires": { + "@babel/helper-plugin-utils": "^7.27.1" + } + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "requires": { + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" } }, "@babel/plugin-proposal-private-property-in-object": { @@ -19521,140 +22671,20 @@ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "requires": {} }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, "@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-unicode-sets-regex": { @@ -19667,374 +22697,387 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "requires": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz", - "integrity": "sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", + "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz", - "integrity": "sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-classes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz", - "integrity": "sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" } }, "@babel/plugin-transform-destructuring": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz", - "integrity": "sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", + "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" + } + }, + "@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", + "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" } }, "@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", + "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", + "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.5" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz", - "integrity": "sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.1" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz", - "integrity": "sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", + "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz", - "integrity": "sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==", + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz", - "integrity": "sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" + } + }, + "@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", + "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", "requires": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", "semver": "^6.3.1" }, "dependencies": { @@ -20046,165 +23089,155 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz", - "integrity": "sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/preset-env": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", - "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.24.0", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "dependencies": { @@ -20225,18 +23258,10 @@ "esutils": "^2.0.2" } }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, "@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", - "requires": { - "regenerator-runtime": "^0.14.0" - } + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==" }, "@babel/template": { "version": "7.27.2", @@ -20249,37 +23274,35 @@ } }, "@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "requires": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@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.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, "dependencies": { "@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "requires": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" } }, "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -20374,6 +23397,12 @@ } } }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -20384,9 +23413,9 @@ } }, "@cypress/request": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", - "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", + "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", "optional": true, "requires": { "aws-sign2": "~0.7.0", @@ -20395,14 +23424,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.4", + "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.14.0", + "qs": "6.13.1", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -20410,12 +23439,12 @@ }, "dependencies": { "qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "optional": true, "requires": { - "side-channel": "^1.1.0" + "side-channel": "^1.0.6" } } } @@ -20469,164 +23498,164 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==" }, "@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "optional": true }, "@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "optional": true }, "@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "optional": true }, "@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "optional": true }, "@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "optional": true }, "@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "optional": true }, "@eslint-community/eslint-utils": { @@ -20700,11 +23729,27 @@ "dev": true }, "@fortawesome/angular-fontawesome": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.14.1.tgz", - "integrity": "sha512-Yb5HLiEOAxjSLEcaOM51CKIrzdfvoDafXVJERm9vufxfZkVZPZJgrZRgqwLVpejgq4/Ez6TqHZ6SqmJwdtRF6g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-3.0.0.tgz", + "integrity": "sha512-+8Dd6DoJnqArfrZ5NvjHyRL64IIkTigXclbOOcFdYQ8/WFERQUDaEU6SAV8Q0JBpJhMS1McED7YCOCAE6SIVyA==", "requires": { - "tslib": "^2.6.2" + "@fortawesome/fontawesome-svg-core": "^7.0.0", + "tslib": "^2.8.1" + }, + "dependencies": { + "@fortawesome/fontawesome-common-types": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-7.1.0.tgz", + "integrity": "sha512-l/BQM7fYntsCI//du+6sEnHOP6a74UixFyOYUyz2DLMXKx+6DEhfR3F2NYGE45XH1JJuIamacb4IZs9S0ZOWLA==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-7.1.0.tgz", + "integrity": "sha512-fNxRUk1KhjSbnbuBxlWSnBLKLBNun52ZBTcs22H/xEEzM6Ap81ZFTQ4bZBxVQGQgVY0xugKGoRcCbaKjLQ3XZA==", + "requires": { + "@fortawesome/fontawesome-common-types": "7.1.0" + } + } } }, "@fortawesome/fontawesome-common-types": { @@ -20748,46 +23793,19 @@ } } }, - "@hapi/address": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", - "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", - "optional": true, - "requires": { - "@hapi/hoek": "^11.0.2" - } - }, - "@hapi/formula": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", - "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", - "optional": true - }, "@hapi/hoek": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", - "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", - "optional": true - }, - "@hapi/pinpoint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", - "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", - "optional": true - }, - "@hapi/tlds": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", - "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "optional": true }, "@hapi/topo": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", - "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "optional": true, "requires": { - "@hapi/hoek": "^11.0.2" + "@hapi/hoek": "^9.0.0" } }, "@humanwhocodes/config-array": { @@ -20813,6 +23831,195 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "@inquirer/ansi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.1.tgz", + "integrity": "sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==" + }, + "@inquirer/checkbox": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.0.tgz", + "integrity": "sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==", + "requires": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + } + }, + "@inquirer/confirm": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", + "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", + "requires": { + "@inquirer/core": "^10.1.15", + "@inquirer/type": "^3.0.8" + } + }, + "@inquirer/core": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.0.tgz", + "integrity": "sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==", + "requires": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, + "@inquirer/editor": { + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.21.tgz", + "integrity": "sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.9" + } + }, + "@inquirer/expand": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.21.tgz", + "integrity": "sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + } + }, + "@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "requires": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "@inquirer/figures": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.14.tgz", + "integrity": "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==" + }, + "@inquirer/input": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.5.tgz", + "integrity": "sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + } + }, + "@inquirer/number": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.21.tgz", + "integrity": "sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + } + }, + "@inquirer/password": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.21.tgz", + "integrity": "sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==", + "requires": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9" + } + }, + "@inquirer/prompts": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", + "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", + "requires": { + "@inquirer/checkbox": "^4.2.1", + "@inquirer/confirm": "^5.1.14", + "@inquirer/editor": "^4.2.17", + "@inquirer/expand": "^4.0.17", + "@inquirer/input": "^4.2.1", + "@inquirer/number": "^3.0.17", + "@inquirer/password": "^4.0.17", + "@inquirer/rawlist": "^4.1.5", + "@inquirer/search": "^3.1.0", + "@inquirer/select": "^4.3.1" + } + }, + "@inquirer/rawlist": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.9.tgz", + "integrity": "sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + } + }, + "@inquirer/search": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.0.tgz", + "integrity": "sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==", + "requires": { + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + } + }, + "@inquirer/select": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.0.tgz", + "integrity": "sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==", + "requires": { + "@inquirer/ansi": "^1.0.1", + "@inquirer/core": "^10.3.0", + "@inquirer/figures": "^1.0.14", + "@inquirer/type": "^3.0.9", + "yoctocolors-cjs": "^2.1.2" + } + }, + "@inquirer/type": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.9.tgz", + "integrity": "sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==", + "requires": {} + }, + "@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" + }, + "@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "requires": { + "@isaacs/balanced-match": "^4.0.1" + } + }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -20827,14 +24034,14 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" }, "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" }, "emoji-regex": { "version": "9.2.2", @@ -20852,9 +24059,9 @@ } }, "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "requires": { "ansi-regex": "^6.0.1" } @@ -20871,30 +24078,25 @@ } } }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "minipass": "^7.0.4" } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==" + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" }, "dependencies": { @@ -20914,11 +24116,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" - }, "@jridgewell/source-map": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", @@ -20929,9 +24126,9 @@ } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" }, "@jridgewell/trace-mapping": { "version": "0.3.9", @@ -20942,19 +24139,104 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "requires": {} }, - "@ljharb/through": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz", - "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==", + "@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "requires": {} + }, + "@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "requires": {} + }, + "@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", "requires": { - "call-bind": "^1.0.7" + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" } }, + "@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "requires": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + } + }, + "@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "requires": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "@lmdb/lmdb-darwin-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz", + "integrity": "sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg==", + "optional": true + }, + "@lmdb/lmdb-darwin-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz", + "integrity": "sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w==", + "optional": true + }, + "@lmdb/lmdb-linux-arm": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz", + "integrity": "sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg==", + "optional": true + }, + "@lmdb/lmdb-linux-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz", + "integrity": "sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg==", + "optional": true + }, + "@lmdb/lmdb-linux-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz", + "integrity": "sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g==", + "optional": true + }, + "@lmdb/lmdb-win32-arm64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz", + "integrity": "sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw==", + "optional": true + }, + "@lmdb/lmdb-win32-x64": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz", + "integrity": "sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g==", + "optional": true + }, "@mempool/mempool.js": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.3.0.tgz", @@ -20972,18 +24254,221 @@ } } }, + "@modelcontextprotocol/sdk": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", + "integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", + "requires": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "dependencies": { + "iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + } + } + } + }, + "@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "optional": true + }, + "@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "optional": true, + "requires": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" + } + }, + "@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", + "optional": true + }, + "@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", + "optional": true + }, + "@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "optional": true + }, + "@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "optional": true + }, + "@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "optional": true + }, + "@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "optional": true + }, + "@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "optional": true + }, + "@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", + "optional": true + }, + "@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", + "optional": true + }, + "@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", + "optional": true + }, + "@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", + "optional": true + }, + "@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", + "optional": true + }, + "@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", + "optional": true + }, + "@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", + "optional": true + }, + "@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "optional": true + }, + "@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "optional": true + }, + "@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "optional": true + }, "@ng-bootstrap/ng-bootstrap": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-16.0.0.tgz", - "integrity": "sha512-+FJ3e6cX9DW2t7021Ji3oz433rk3+4jLfqzU+Jyx6/vJz1dIOaML3EAY6lYuW4TLiXgMPOMvs6KzPFALGh4Lag==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-19.0.1.tgz", + "integrity": "sha512-1lErAkwh0F+gWkzpiddViY4GfA9LVXkwLpgBsV9Mb3IC0zo6WNkY8WxCC+LqajirBTu20DCkZSqeRzrwaVLpZw==", "requires": { "tslib": "^2.3.0" } }, "@ngtools/webpack": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.1.tgz", - "integrity": "sha512-6qRYFN6DqogZK0ZFrSlhg1OsIWm3lL3m+/Ixoj6/MLLjDBrTtHqmI93vg6P1EKYTH4fWChL7jtv7iS/LSZubgw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.8.tgz", + "integrity": "sha512-hwmpnUKHpC89rne9t/OBeoPM9MBiD9rAfVwnntK+d13/v44U2jWVON7ogIcyjWb+PyAn8VNn1/G404+YmOvxCA==", "requires": {} }, "@nodelib/fs.scandir": { @@ -21010,45 +24495,45 @@ } }, "@npmcli/agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", - "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "requires": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "dependencies": { "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" } } }, "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "requires": { "semver": "^7.3.5" } }, "@npmcli/git": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.4.tgz", - "integrity": "sha512-nr6/WezNzuYUppzXRaYu/W4aT5rLxdXqEFupbh6e/ovlYFQ8hpu1UUPV3Ir/YTl+74iXl2ZOMlGzudh9ZPUchQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", "requires": { - "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", - "promise-inflight": "^1.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^4.0.0" + "which": "^5.0.0" }, "dependencies": { "isexe": { @@ -21057,14 +24542,14 @@ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "requires": { "isexe": "^3.1.1" } @@ -21072,31 +24557,31 @@ } }, "@npmcli/installed-package-contents": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", "requires": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" } }, "@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==" }, "@npmcli/package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.0.0.tgz", - "integrity": "sha512-OI2zdYBLhQ7kpNPaJxiflofYIpkNLi+lnGdzqUOfRmCF3r2l1nadcjtCYMJKv/Utm/ZtlffaUuTiAktPHbc17g==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.2.0.tgz", + "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "requires": { - "@npmcli/git": "^5.0.0", + "@npmcli/git": "^6.0.0", "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.5.3" + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "dependencies": { "brace-expansion": { @@ -21108,26 +24593,40 @@ } }, "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "requires": { + "lru-cache": "^10.0.1" } }, "json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==" + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } @@ -21135,11 +24634,11 @@ } }, "@npmcli/promise-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", - "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", "requires": { - "which": "^4.0.0" + "which": "^5.0.0" }, "dependencies": { "isexe": { @@ -21148,25 +24647,31 @@ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" }, "which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "requires": { "isexe": "^3.1.1" } } } }, + "@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==" + }, "@npmcli/run-script": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", - "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", "requires": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "which": "^4.0.0" + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "dependencies": { "isexe": { @@ -21175,15 +24680,132 @@ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" }, "which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "requires": { "isexe": "^3.1.1" } } } }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "optional": true, + "requires": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "optional": true + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "optional": true + } + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "optional": true + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -21197,133 +24819,187 @@ "peer": true }, "@rollup/rollup-android-arm-eabi": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", + "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", "optional": true }, "@rollup/rollup-android-arm64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", + "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", "optional": true }, "@rollup/rollup-darwin-arm64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", + "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", "optional": true }, "@rollup/rollup-darwin-x64": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", + "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", + "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", + "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", + "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", + "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", + "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", + "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", "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==", + "@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", + "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", + "optional": true + }, + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", + "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", + "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", + "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", + "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", + "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", "optional": true }, "@rollup/rollup-linux-x64-musl": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", + "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", + "optional": true + }, + "@rollup/rollup-openharmony-arm64": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", + "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", + "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", + "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", + "optional": true + }, + "@rollup/rollup-win32-x64-gnu": { + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", + "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "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==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", + "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", "optional": true }, "@schematics/angular": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.17.tgz", - "integrity": "sha512-S5HwYem5Yjeceb5OLvforNcjfTMh2qsHnTP1BAYL81XPpqeg2udjAkJjKBxCwxMZSqdCMw3ne0eKppEYTaEZ+A==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.8.tgz", + "integrity": "sha512-lmdh1JywRl0BK1VcYwGDrNre78OpduNhsV4N5afELvrNPKSk/ixCb3iZq4MCY3yBZ3RV5Uso+vrJwwEeqe02JQ==", "requires": { - "@angular-devkit/core": "17.3.17", - "@angular-devkit/schematics": "17.3.17", - "jsonc-parser": "3.2.1" + "@angular-devkit/core": "20.3.8", + "@angular-devkit/schematics": "20.3.8", + "jsonc-parser": "3.3.1" }, "dependencies": { "@angular-devkit/core": { - "version": "17.3.17", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.17.tgz", - "integrity": "sha512-7aNVqS3rOGsSZYAOO44xl2KURwaoOP+EJhJs+LqOGOFpok2kd8YLf4CAMUossMF4H7HsJpgKwYqGrV5eXunrpw==", + "version": "20.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", + "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", "requires": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.3", + "rxjs": "7.8.2", + "source-map": "0.7.6" } }, "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" + } + }, + "ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "requires": { + "ajv": "^8.0.0" + } + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" } }, "json-schema-traverse": { @@ -21332,58 +25008,93 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "optional": true, + "peer": true + }, + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" } } }, - "@sigstore/bundle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", - "integrity": "sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ==", + "@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "optional": true, "requires": { - "@sigstore/protobuf-specs": "^0.3.0" + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "optional": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "optional": true + }, + "@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "requires": { + "@sigstore/protobuf-specs": "^0.4.0" } }, "@sigstore/core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", - "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==" }, "@sigstore/protobuf-specs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz", - "integrity": "sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.3.tgz", + "integrity": "sha512-fk2zjD9117RL9BjqEwF7fwv7Q/P9yGsMV4MUJZ/DocaQJ6+3pKr+syBq1owU5Q5qGw5CUbXzm+4yJ2JVRDQeSA==" }, "@sigstore/sign": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.3.tgz", - "integrity": "sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", "requires": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "make-fetch-happen": "^13.0.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" } }, "@sigstore/tuf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.1.tgz", - "integrity": "sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.1.tgz", + "integrity": "sha512-eFFvlcBIoGwVkkwmTi/vEQFSva3xs5Ot3WmBcjgjVdiaoelBLQaQ/ZBfhlG0MnG0cmTYScPpk7eDdGDWUcFUmg==", "requires": { - "@sigstore/protobuf-specs": "^0.3.0", - "tuf-js": "^2.2.0" + "@sigstore/protobuf-specs": "^0.4.1", + "tuf-js": "^3.0.1" } }, "@sigstore/verify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.1.0.tgz", - "integrity": "sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.1.tgz", + "integrity": "sha512-hVJD77oT67aowHxwT4+M6PGOp+E2LtLdTK3+FC0lBO9T7sYwItDMXZ7Z07IDCvR1M717a4axbIWckrW67KMP/w==", "requires": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.1" } }, "@sinonjs/commons": { @@ -21438,12 +25149,6 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, - "@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", - "optional": true - }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -21474,12 +25179,12 @@ "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==" }, "@tufjs/models": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.0.tgz", - "integrity": "sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", "requires": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.5" }, "dependencies": { "brace-expansion": { @@ -21491,9 +25196,9 @@ } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } @@ -21513,9 +25218,9 @@ } }, "@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "requires": { "@babel/types": "^7.0.0" } @@ -21530,11 +25235,11 @@ } }, "@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "requires": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "@types/body-parser": { @@ -21586,54 +25291,69 @@ "@types/node": "*" } }, + "@types/cypress": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", + "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", + "optional": true, + "requires": { + "cypress": "*" + } + }, "@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "requires": { "@types/eslint": "*", "@types/estree": "*" } }, "@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" }, "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "requires": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", "requires": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, + "@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==" + }, "@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "requires": { "@types/node": "*" } @@ -21644,9 +25364,9 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "@types/node": { "version": "18.17.18", @@ -21654,9 +25374,9 @@ "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==" }, "@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "requires": { "@types/node": "*" } @@ -21680,9 +25400,9 @@ "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==" }, "@types/semver": { "version": "7.5.8", @@ -21690,6 +25410,14 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, + "@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "requires": { + "@types/node": "*" + } + }, "@types/serve-index": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", @@ -21699,12 +25427,24 @@ } }, "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "requires": { - "@types/mime": "*", - "@types/node": "*" + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + }, + "dependencies": { + "@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + } } }, "@types/sinonjs__fake-timers": { @@ -21727,16 +25467,10 @@ "@types/node": "*" } }, - "@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "optional": true - }, "@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "requires": { "@types/node": "*" } @@ -21897,140 +25631,134 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, - "@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", - "requires": {} - }, "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==" }, "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==" }, "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" }, "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "requires": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -22050,9 +25778,9 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" }, "abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==" }, "accepts": { "version": "1.3.8", @@ -22100,17 +25828,15 @@ } }, "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==" }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "optional": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -22136,14 +25862,14 @@ }, "dependencies": { "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { @@ -22153,11 +25879,26 @@ } } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} + "algoliasearch": { + "version": "5.35.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz", + "integrity": "sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==", + "requires": { + "@algolia/abtesting": "1.1.0", + "@algolia/client-abtesting": "5.35.0", + "@algolia/client-analytics": "5.35.0", + "@algolia/client-common": "5.35.0", + "@algolia/client-insights": "5.35.0", + "@algolia/client-personalization": "5.35.0", + "@algolia/client-query-suggestions": "5.35.0", + "@algolia/client-search": "5.35.0", + "@algolia/ingestion": "1.35.0", + "@algolia/monitoring": "1.35.0", + "@algolia/recommend": "5.35.0", + "@algolia/requester-browser-xhr": "5.35.0", + "@algolia/requester-fetch": "5.35.0", + "@algolia/requester-node-http": "5.35.0" + } }, "amdefine": { "version": "1.0.1", @@ -22173,6 +25914,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "optional": true, "requires": { "type-fest": "^0.21.3" } @@ -22187,6 +25929,14 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, "anymatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", @@ -22208,21 +25958,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } - } - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -22308,6 +26043,12 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "optional": true }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "optional": true + }, "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -22327,15 +26068,15 @@ "optional": true }, "autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", "requires": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" } }, @@ -22368,33 +26109,47 @@ } }, "babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", + "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", "requires": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "find-up": "^5.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + } } }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "dependencies": { @@ -22406,48 +26161,20 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - } + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - } + "@babel/helper-define-polyfill-provider": "^0.6.5" } }, "balanced-match": { @@ -22466,6 +26193,11 @@ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "devOptional": true }, + "baseline-browser-mapping": { + "version": "2.8.22", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.22.tgz", + "integrity": "sha512-/tk9kky/d8T8CTXIQYASLyhAxR5VwL3zct1oAoVTaOUHwrmsGnfbRwNdEq+vOl2BN8i3PcDdP0o4Q+jjKQoFbQ==" + }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", @@ -22480,6 +26212,21 @@ "tweetnacl": "^0.14.3" } }, + "beasties": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", + "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "requires": { + "css-select": "^6.0.0", + "css-what": "^7.0.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^10.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -22490,28 +26237,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", @@ -22572,9 +26297,9 @@ } }, "bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "requires": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -22692,25 +26417,6 @@ "yargs": "^17.3.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -22722,21 +26428,6 @@ "wrap-ansi": "^7.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -22748,12 +26439,6 @@ "universalify": "^0.1.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true - }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -22763,15 +26448,6 @@ "graceful-fs": "^4.1.6" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "ua-parser-js": { "version": "1.0.36", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.36.tgz", @@ -22848,57 +26524,6 @@ "server-destroy": "1.0.1", "socket.io-client": "^4.4.1", "stream-throttle": "^0.1.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "browser-unpack": { @@ -23142,14 +26767,15 @@ } }, "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" } }, "bs-recipes": { @@ -23162,6 +26788,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "optional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -23188,14 +26815,6 @@ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "requires": { - "semver": "^7.0.0" - } - }, "bundle-collapser": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", @@ -23209,17 +26828,25 @@ "through2": "^2.0.0" } }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "requires": { + "run-applescript": "^7.0.0" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "cacache": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", - "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "requires": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -23227,10 +26854,10 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "dependencies": { "brace-expansion": { @@ -23241,30 +26868,58 @@ "balanced-match": "^1.0.0" } }, + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" + }, "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "requires": { "brace-expansion": "^2.0.1" } + }, + "p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==" + }, + "tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "requires": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + } + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, @@ -23319,9 +26974,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001600", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", - "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==" + "version": "1.0.30001752", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001752.tgz", + "integrity": "sha512-vKUk7beoukxE47P5gcVNKkDRzXdVofotshHwfR9vmpeFKxmI5PBpgOMC18LUJUA/DvJ70Y7RveasIBraqsyO/g==" }, "caseless": { "version": "0.12.0", @@ -23344,10 +26999,20 @@ "type-detect": "^4.0.8" } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "devOptional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==" }, "check-error": { "version": "1.0.3", @@ -23365,9 +27030,9 @@ "optional": true }, "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -23414,28 +27079,30 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "optional": true }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "optional": true, "requires": { "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" }, "cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "optional": true, "requires": { - "colors": "1.4.0", + "@colors/colors": "1.5.0", "string-width": "^4.2.0" } }, @@ -23474,11 +27141,6 @@ "wrap-ansi": "^6.2.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -23489,17 +27151,24 @@ "shallow-clone": "^3.0.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "optional": true - }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -23542,11 +27211,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" - }, "common-shakeify": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.1.tgz", @@ -23695,9 +27359,9 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "requires": { "safe-buffer": "5.2.1" }, @@ -23720,14 +27384,14 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" }, "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==" }, "copy-anything": { "version": "2.0.6", @@ -23738,16 +27402,15 @@ } }, "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", + "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", "requires": { - "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", - "globby": "^13.1.1", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2", + "tinyglobby": "^0.2.12" }, "dependencies": { "glob-parent": { @@ -23761,11 +27424,11 @@ } }, "core-js-compat": { - "version": "3.36.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", - "integrity": "sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==", + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "requires": { - "browserslist": "^4.23.0" + "browserslist": "^4.26.3" } }, "core-util-is": { @@ -23777,7 +27440,6 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "devOptional": true, "requires": { "object-assign": "^4", "vary": "^1" @@ -23861,65 +27523,6 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "critters": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz", - "integrity": "sha512-NU7DEcQZM2Dy8XTKFHxtdnIM/drE312j2T4PCVaSUcS0oBeyT/NImpRw/Ap0zOr/1SE7SgPK9tGPg1WK/sVakw==", - "requires": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -23949,62 +27552,69 @@ } }, "css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "requires": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" } }, "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", "requires": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" } }, "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==" }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "optional": true, + "peer": true + }, "cypress": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", - "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", + "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", "optional": true, "requires": { - "@cypress/request": "^3.0.9", + "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", - "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "ci-info": "^4.1.0", + "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", - "cli-table3": "0.6.1", + "cli-table3": "~0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -24016,8 +27626,9 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "hasha": "5.2.2", + "getos": "^3.2.1", "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -24027,60 +27638,14 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", + "semver": "^7.5.3", "supports-color": "^8.1.1", - "systeminformation": "5.27.7", - "tmp": "~0.2.4", + "tmp": "~0.2.3", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -24125,12 +27690,6 @@ "pump": "^3.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "optional": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -24149,9 +27708,9 @@ } }, "cypress-fail-on-console-error": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", - "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", + "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", "optional": true, "requires": { "chai": "^4.3.10", @@ -24161,9 +27720,9 @@ } }, "cypress-wait-until": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", - "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", + "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", "optional": true }, "d": { @@ -24189,6 +27748,13 @@ "assert-plus": "^1.0.0" } }, + "date-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", + "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", + "optional": true, + "peer": true + }, "dayjs": { "version": "1.11.9", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz", @@ -24228,21 +27794,19 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "requires": { - "execa": "^5.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } + "default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==" }, "define-data-property": { "version": "1.1.4", @@ -24255,9 +27819,9 @@ } }, "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" }, "defined": { "version": "1.0.0", @@ -24305,6 +27869,12 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "optional": true + }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -24326,6 +27896,13 @@ "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", "devOptional": true }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "optional": true, + "peer": true + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -24358,6 +27935,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -24379,6 +27957,19 @@ "esutils": "^2.0.2" } }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "optional": true, + "peer": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -24413,9 +28004,9 @@ "integrity": "sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==" }, "domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "requires": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -24466,57 +28057,6 @@ "devOptional": true, "requires": { "chalk": "4.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "devOptional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "devOptional": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "ecc-jsbn": { @@ -24551,9 +28091,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.715", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.715.tgz", - "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" + "version": "1.5.244", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", + "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==" }, "elliptic": { "version": "6.6.1", @@ -24640,14 +28180,6 @@ "debug": "~4.3.1", "engine.io-parser": "~5.2.1", "ws": "~8.17.1" - }, - "dependencies": { - "cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "devOptional": true - } } }, "engine.io-client": { @@ -24670,9 +28202,9 @@ "devOptional": true }, "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -24687,6 +28219,13 @@ "ansi-colors": "^4.1.1" } }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "optional": true, + "peer": true + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -24697,6 +28236,11 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==" + }, "err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -24832,47 +28376,47 @@ } }, "esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "requires": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "esbuild-wasm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.20.1.tgz", - "integrity": "sha512-6v/WJubRsjxBbQdz6izgvx7LsVFvVaGmSdwrFHmEzoVgfXL89hkKPoQHsnVI2ngOkcBUQT9kmAM1hVL1k/Av4A==" + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.9.tgz", + "integrity": "sha512-Jpv5tCSwQg18aCqCRD3oHIX/prBhXMDapIoG//A+6+dV0e7KQMGFg85ihJ5T1EeMjbZjON3TqFy0VrGAnIHLDA==" }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" }, "escape-html": { "version": "1.0.3", @@ -24899,12 +28443,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true } } }, @@ -24965,46 +28503,12 @@ "text-table": "^0.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -25055,12 +28559,6 @@ "type-fest": "^0.20.2" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -25088,15 +28586,6 @@ "p-limit": "^3.0.2" } }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -25283,6 +28772,19 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, + "eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "requires": { + "eventsource-parser": "^3.0.1" + } + }, + "eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==" + }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -25296,6 +28798,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "optional": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -25311,7 +28814,8 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "optional": true } } }, @@ -25325,54 +28829,75 @@ } }, "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==" }, "express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "requires": { - "ms": "2.0.0" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + } + }, + "body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "requires": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + } + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" } }, "encodeurl": { @@ -25380,10 +28905,46 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, - "ms": { + "fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" + }, + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" + }, + "mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "requires": { + "mime-db": "^1.54.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" }, "on-finished": { "version": "2.4.1", @@ -25393,18 +28954,87 @@ "ee-first": "1.1.1" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "requires": { + "side-channel": "^1.1.0" + } + }, + "raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "requires": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + } + }, + "serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "requires": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + } }, "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" + }, + "type-is": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "requires": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + } } } }, + "express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "requires": {} + }, "ext": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", @@ -25426,16 +29056,6 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "optional": true }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -25482,15 +29102,15 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" } }, "fast-json-stable-stringify": { @@ -25509,6 +29129,11 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==" + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -25538,6 +29163,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "optional": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -25560,25 +29186,24 @@ } }, "finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "requires": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.3" } }, "encodeurl": { @@ -25587,9 +29212,9 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "on-finished": { "version": "2.4.1", @@ -25600,21 +29225,12 @@ } }, "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" } } }, - "find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "requires": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -25644,7 +29260,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "devOptional": true }, "follow-redirects": { "version": "1.15.6", @@ -25665,11 +29281,11 @@ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" }, "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "requires": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "dependencies": { @@ -25737,6 +29353,18 @@ "from2": "^2.0.3" } }, + "fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "optional": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs-minipass": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", @@ -25745,11 +29373,6 @@ "minipass": "^7.0.3" } }, - "fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -25781,6 +29404,11 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, + "get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==" + }, "get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -25804,11 +29432,6 @@ "math-intrinsics": "^1.1.0" } }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" - }, "get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -25821,7 +29444,17 @@ "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "optional": true + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "optional": true, + "requires": { + "async": "^3.2.0" + } }, "getpass": { "version": "0.1.7", @@ -25853,6 +29486,12 @@ "is-glob": "^4.0.1" } }, + "glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "requires": {} + }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -25875,23 +29514,6 @@ } } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, "good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -25906,9 +29528,9 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "graphemer": { "version": "1.4.0", @@ -25944,6 +29566,11 @@ } } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", @@ -26001,24 +29628,6 @@ "minimalistic-assert": "^1.0.1" } }, - "hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "optional": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "optional": true - } - } - }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -26038,17 +29647,17 @@ } }, "hosted-git-info": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", - "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "requires": { - "lru-cache": "^10.0.1" + "lru-cache": "^11.1.0" }, "dependencies": { "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==" } } }, @@ -26063,31 +29672,33 @@ "wbuf": "^1.1.0" } }, - "html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==" - }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" }, "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "requires": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domutils": "^3.2.1", + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + } } }, "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" }, "http-deceiver": { "version": "1.2.7", @@ -26114,9 +29725,9 @@ } }, "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==" }, "http-proxy": { "version": "1.18.1", @@ -26138,9 +29749,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -26166,11 +29777,11 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" } }, @@ -26180,6 +29791,11 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "optional": true }, + "hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -26202,30 +29818,23 @@ "ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true }, "ignore-walk": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", - "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "requires": { - "minimatch": "^9.0.0" + "minimatch": "^10.0.3" }, "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "requires": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" } } } @@ -26266,7 +29875,8 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "optional": true }, "inflight": { "version": "1.0.6", @@ -26283,9 +29893,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==" }, "inline-source-map": { "version": "0.6.2", @@ -26302,35 +29912,6 @@ } } }, - "inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "requires": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" - } - } - }, "insert-module-globals": { "version": "7.2.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", @@ -26349,25 +29930,14 @@ } }, "ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "dependencies": { - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - } - } + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==" }, "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-arguments": { "version": "1.1.1", @@ -26402,17 +29972,17 @@ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" }, "is-extglob": { "version": "2.1.1", @@ -26437,6 +30007,14 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + } + }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -26448,14 +30026,14 @@ } }, "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==" }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==" }, "is-number": { "version": "7.0.0", @@ -26490,10 +30068,16 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "optional": true }, "is-typed-array": { "version": "1.1.15", @@ -26512,7 +30096,8 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "optional": true }, "is-what": { "version": "3.14.1", @@ -26520,11 +30105,11 @@ "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "requires": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" } }, "isarray": { @@ -26532,6 +30117,13 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, + "isbinaryfile": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "optional": true, + "peer": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -26549,33 +30141,26 @@ "optional": true }, "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==" }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "semver": "^7.5.4" } }, "jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -26591,11 +30176,6 @@ "supports-color": "^8.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -26612,18 +30192,16 @@ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "joi": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", - "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "optional": true, "requires": { - "@hapi/address": "^5.1.1", - "@hapi/formula": "^3.0.2", - "@hapi/hoek": "^11.0.7", - "@hapi/pinpoint": "^2.0.1", - "@hapi/tlds": "^1.1.1", - "@hapi/topo": "^6.0.2", - "@standard-schema/spec": "^1.0.0" + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" } }, "jquery": { @@ -26637,15 +30215,6 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -26653,9 +30222,9 @@ "optional": true }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==" }, "json-buffer": { "version": "3.0.1", @@ -26697,9 +30266,9 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" }, "jsonfile": { "version": "6.1.0", @@ -26743,6 +30312,108 @@ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "optional": true }, + "karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "optional": true, + "peer": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "optional": true, + "peer": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "optional": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "optional": true, + "peer": true + }, + "tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "optional": true, + "peer": true + } + } + }, "karma-source-map-support": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", @@ -26765,11 +30436,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" - }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -26780,12 +30446,12 @@ } }, "launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, "lazy-ass": { @@ -26795,9 +30461,9 @@ "optional": true }, "less": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", - "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", + "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", "requires": { "copy-anything": "^2.0.1", "errno": "^0.1.1", @@ -26811,49 +30477,19 @@ "tslib": "^2.3.0" }, "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "optional": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true } } }, "less-loader": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", - "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", - "requires": { - "klona": "^2.0.4" - } + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", + "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", + "requires": {} }, "levn": { "version": "0.4.1", @@ -26900,30 +30536,6 @@ "wrap-ansi": "^7.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -26937,6 +30549,26 @@ } } }, + "lmdb": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.2.tgz", + "integrity": "sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg==", + "optional": true, + "requires": { + "@lmdb/lmdb-darwin-arm64": "3.4.2", + "@lmdb/lmdb-darwin-x64": "3.4.2", + "@lmdb/lmdb-linux-arm": "3.4.2", + "@lmdb/lmdb-linux-arm64": "3.4.2", + "@lmdb/lmdb-linux-x64": "3.4.2", + "@lmdb/lmdb-win32-arm64": "3.4.2", + "@lmdb/lmdb-win32-x64": "3.4.2", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + } + }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -26963,7 +30595,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true }, "lodash.debounce": { "version": "4.0.8", @@ -26998,54 +30631,10 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "optional": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "log-update": { @@ -27060,30 +30649,6 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", @@ -27097,6 +30662,20 @@ } } }, + "log4js": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", + "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", + "optional": true, + "peer": true, + "requires": { + "date-format": "^4.0.3", + "debug": "^4.3.3", + "flatted": "^3.2.4", + "rfdc": "^1.3.0", + "streamroller": "^3.0.2" + } + }, "loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -27115,11 +30694,35 @@ } }, "magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "optional": true + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "optional": true + } } }, "make-error": { @@ -27129,21 +30732,28 @@ "dev": true }, "make-fetch-happen": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", - "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "requires": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" + }, + "dependencies": { + "negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" + } } }, "map-stream": { @@ -27173,17 +30783,22 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.50.0.tgz", + "integrity": "sha512-N0LUYQMUA1yS5tJKmMtU9yprPm6ZIg24yr/OVv/7t6q0kKDIho4cBbXRi1XKttUmNYDYgF/q45qrKE/UhGO0CA==", "requires": { - "fs-monkey": "^1.0.4" + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" } }, "merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==" }, "merge-stream": { "version": "2.0.0", @@ -27225,6 +30840,13 @@ } } }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "optional": true, + "peer": true + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -27241,12 +30863,18 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "optional": true + }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==" }, "mini-css-extract-plugin": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", - "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", "requires": { "schema-utils": "^4.0.0", "tapable": "^2.2.1" @@ -27297,11 +30925,6 @@ "util-deprecate": "^1.0.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", @@ -27338,9 +30961,9 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" }, "minipass-collect": { "version": "2.0.1", @@ -27351,14 +30974,14 @@ } }, "minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "requires": { "encoding": "^0.1.13", "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" } }, "minipass-flush": { @@ -27379,25 +31002,6 @@ } } }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "requires": { - "yallist": "^4.0.0" - } - } - } - }, "minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -27435,22 +31039,11 @@ } }, "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "requires": { - "yallist": "^4.0.0" - } - } + "minipass": "^7.1.2" } }, "mitt": { @@ -27459,6 +31052,16 @@ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "devOptional": true }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "optional": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -27493,15 +31096,39 @@ } }, "mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==" }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "msgpackr": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.5.tgz", + "integrity": "sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==", + "optional": true, + "requires": { + "msgpackr-extract": "^3.0.2" + } + }, + "msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "optional": true, + "requires": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3", + "node-gyp-build-optional-packages": "5.2.2" + } + }, "multi-stage-sourcemap": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", @@ -27535,9 +31162,9 @@ "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" }, "mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==" }, "mutexify": { "version": "1.3.1", @@ -27609,25 +31236,15 @@ "dev": true }, "needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "optional": true, "requires": { - "debug": "^3.2.6", "iconv-lite": "^0.6.3", "sax": "^1.2.4" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -27663,23 +31280,13 @@ } }, "ngx-infinite-scroll": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-17.0.0.tgz", - "integrity": "sha512-pQXLuRiuhRuDKD3nmgyW1V08JVNBepmk6nb8qjHc5hgsWNts01+R/p33rYcRDzcut6/PWqGyrZ9o9i8swzMYMA==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-20.0.0.tgz", + "integrity": "sha512-Mh7lg85jeDPzZirxPHjyMagCcC3vbk+yPO5uoXHNkmGer8MrO6vOydOX306qY4QYDyMJ+ngIQgpl5HJXfc590A==", "requires": { "tslib": "^2.3.0" } }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, "nise": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz", @@ -27740,9 +31347,9 @@ } }, "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "optional": true }, "node-forge": { @@ -27751,93 +31358,79 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, "node-gyp": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", - "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "requires": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, "isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "tar": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", "requires": { - "brace-expansion": "^2.0.1" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" } }, "which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "requires": { "isexe": "^3.1.1" } + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" } } }, - "node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", - "optional": true - }, - "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "nopt": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", - "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", + "node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "optional": true, "requires": { - "abbrev": "^2.0.0" + "detect-libc": "^2.0.1" } }, - "normalize-package-data": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", - "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==" + }, + "nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "requires": { - "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "abbrev": "^3.0.0" } }, "normalize-path": { @@ -27851,74 +31444,136 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" }, "npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "requires": { - "npm-normalize-package-bin": "^3.0.0" + "npm-normalize-package-bin": "^4.0.0" } }, "npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", "requires": { "semver": "^7.1.1" } }, "npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==" }, "npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.0.tgz", + "integrity": "sha512-+t2etZAGcB7TbbLHfDwooV9ppB2LhhcT6A+L9cahsf9mEUAoQ6CktLEVvEnpD0N5CkX7zJqnPGaFtoQDy9EkHQ==", "requires": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "validate-npm-package-name": "^6.0.0" } }, "npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "requires": { - "ignore-walk": "^6.0.4" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, + "dependencies": { + "proc-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.0.0.tgz", + "integrity": "sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA==" + } } }, "npm-pick-manifest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz", - "integrity": "sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", "requires": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", "semver": "^7.3.5" + }, + "dependencies": { + "hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "requires": { + "lru-cache": "^10.0.1" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "requires": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + } + } } }, "npm-registry-fetch": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.1.0.tgz", - "integrity": "sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", "requires": { - "make-fetch-happen": "^13.0.0", + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "requires": { + "lru-cache": "^10.0.1" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "requires": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + } + } } }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "optional": true, "requires": { "path-key": "^3.0.0" } @@ -27977,18 +31632,20 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "optional": true, "requires": { "mimic-fn": "^2.1.0" } }, "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" } }, "opn": { @@ -28023,76 +31680,118 @@ } }, "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==" }, "chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==" + }, + "cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "requires": { + "restore-cursor": "^5.0.0" + } + }, + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==" + }, + "log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "requires": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "dependencies": { + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==" + } + } + }, + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "requires": { + "mimic-function": "^5.0.0" + } + }, + "restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "requires": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + } + }, + "signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { + "string-width": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "requires": { - "has-flag": "^4.0.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "requires": { + "ansi-regex": "^6.0.1" } } } }, + "ordered-binary": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.0.tgz", + "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", + "optional": true + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, "ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -28103,7 +31802,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -28130,16 +31828,18 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "optional": true, "requires": { "aggregate-error": "^3.0.0" } }, "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "requires": { - "@types/retry": "0.12.0", + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "dependencies": { @@ -28155,29 +31855,59 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "pacote": { - "version": "17.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", - "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", "requires": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", - "cacache": "^18.0.0", + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", "tar": "^6.1.11" + }, + "dependencies": { + "hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "requires": { + "lru-cache": "^10.0.1" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "requires": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + } + } } }, "pako": { @@ -28230,29 +31960,43 @@ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" }, "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", "requires": { - "entities": "^4.4.0" + "entities": "^6.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + } } }, "parse5-html-rewriting-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", - "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", "requires": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" + }, + "dependencies": { + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + } } }, "parse5-sax-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", - "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", "requires": { - "parse5": "^7.0.0" + "parse5": "^8.0.0" } }, "parseurl": { @@ -28286,30 +32030,31 @@ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" }, "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { "lru-cache": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", - "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" } } }, "path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==" }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.1", @@ -28403,65 +32148,17 @@ "optional": true }, "piscina": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.4.0.tgz", - "integrity": "sha512-+AQduEJefrOApE4bV7KRmp3N2JnnyErlVqq4P/jmko4FPz9Z877BCccl/iB3FdrWSUkvbGV9Kan/KllJgat3Vg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", + "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", "requires": { - "nice-napi": "^1.0.2" + "@napi-rs/nice": "^1.0.4" } }, - "pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "requires": { - "find-up": "^6.3.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" - } - } + "pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==" }, "pngjs": { "version": "5.0.0", @@ -28501,13 +32198,13 @@ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" }, "postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "requires": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "postcss-loader": { @@ -28526,27 +32223,27 @@ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==" }, "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "requires": {} }, "postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "requires": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "requires": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" } }, "postcss-modules-values": { @@ -28558,9 +32255,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -28595,9 +32292,9 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, "proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==" }, "process": { "version": "0.11.10", @@ -28609,11 +32306,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, "promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", @@ -28630,13 +32322,6 @@ "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } } }, "proxy-from-env": { @@ -28695,6 +32380,13 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "optional": true, + "peer": true + }, "qrcode": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", @@ -28790,68 +32482,6 @@ "readable-stream": "^2.0.2" } }, - "read-package-json": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.0.tgz", - "integrity": "sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==", - "requires": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==" - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "requires": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "dependencies": { - "json-parse-even-better-errors": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", - "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==" - } - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -28882,9 +32512,9 @@ } }, "reflect-metadata": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", - "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, "regenerate": { "version": "1.4.2", @@ -28892,57 +32522,42 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "requires": { "regenerate": "^1.4.2" } }, - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" }, "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "requires": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" } }, + "regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==" + }, "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } + "jsesc": "~3.1.0" } }, "request-progress": { @@ -28975,20 +32590,15 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "requires": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, "resolve-url-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", @@ -28999,13 +32609,6 @@ "loader-utils": "^2.0.0", "postcss": "^8.2.14", "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "resp-modifier": { @@ -29039,6 +32642,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "optional": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -29055,15 +32659,15 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "optional": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "devOptional": true, "requires": { "glob": "^7.1.3" } @@ -29078,34 +32682,67 @@ } }, "rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.52.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", + "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", "requires": { - "@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", + "@rollup/rollup-android-arm-eabi": "4.52.3", + "@rollup/rollup-android-arm64": "4.52.3", + "@rollup/rollup-darwin-arm64": "4.52.3", + "@rollup/rollup-darwin-x64": "4.52.3", + "@rollup/rollup-freebsd-arm64": "4.52.3", + "@rollup/rollup-freebsd-x64": "4.52.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", + "@rollup/rollup-linux-arm-musleabihf": "4.52.3", + "@rollup/rollup-linux-arm64-gnu": "4.52.3", + "@rollup/rollup-linux-arm64-musl": "4.52.3", + "@rollup/rollup-linux-loong64-gnu": "4.52.3", + "@rollup/rollup-linux-ppc64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-gnu": "4.52.3", + "@rollup/rollup-linux-riscv64-musl": "4.52.3", + "@rollup/rollup-linux-s390x-gnu": "4.52.3", + "@rollup/rollup-linux-x64-gnu": "4.52.3", + "@rollup/rollup-linux-x64-musl": "4.52.3", + "@rollup/rollup-openharmony-arm64": "4.52.3", + "@rollup/rollup-win32-arm64-msvc": "4.52.3", + "@rollup/rollup-win32-ia32-msvc": "4.52.3", + "@rollup/rollup-win32-x64-gnu": "4.52.3", + "@rollup/rollup-win32-x64-msvc": "4.52.3", + "@types/estree": "1.0.8", "fsevents": "~2.3.2" } }, - "run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==" + "router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "requires": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==" }, "run-parallel": { "version": "1.2.0", @@ -29122,9 +32759,9 @@ "devOptional": true }, "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "requires": { "tslib": "^2.1.0" } @@ -29140,40 +32777,54 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "dependencies": { + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "requires": { + "readdirp": "^4.0.1" + } + }, "immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==" + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==" } } }, "sass-loader": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.1.tgz", - "integrity": "sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", "requires": { "neo-async": "^2.6.2" } }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "optional": true }, "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -29182,14 +32833,14 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "ajv-keywords": { @@ -29241,9 +32892,12 @@ } }, "semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==" + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } }, "send": { "version": "0.19.0", @@ -29462,9 +33116,9 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==" }, "side-channel": { "version": "1.1.0", @@ -29513,19 +33167,20 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true }, "sigstore": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.2.tgz", - "integrity": "sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", "requires": { - "@sigstore/bundle": "^2.2.0", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.0", - "@sigstore/sign": "^2.2.3", - "@sigstore/tuf": "^2.3.1", - "@sigstore/verify": "^1.1.0" + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" } }, "simple-concat": { @@ -29552,21 +33207,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "optional": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "optional": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -29577,11 +33217,6 @@ "optional": true, "requires": {} }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - }, "slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -29591,32 +33226,6 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "optional": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "optional": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "optional": true - } } }, "smart-buffer": { @@ -29682,33 +33291,33 @@ } }, "socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "requires": { - "ip-address": "^9.0.5", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" } }, "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "source-map-loader": { "version": "5.0.0", @@ -29736,13 +33345,6 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "sourcemap-codec": { @@ -29774,9 +33376,9 @@ } }, "spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==" + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==" }, "spdy": { "version": "4.0.2", @@ -29824,11 +33426,6 @@ "through": "2" } }, - "sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, "sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -29847,27 +33444,27 @@ } }, "ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "requires": { "minipass": "^7.0.3" } }, "start-server-and-test": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", - "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", + "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", "optional": true, "requires": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.3", + "debug": "4.4.1", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.5" + "wait-on": "8.0.4" }, "dependencies": { "arg": { @@ -29877,9 +33474,9 @@ "optional": true }, "debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "optional": true, "requires": { "ms": "^2.1.3" @@ -29898,6 +33495,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==" + }, "stream-combiner": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", @@ -29940,6 +33542,18 @@ "limiter": "^1.0.5" } }, + "streamroller": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", + "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", + "optional": true, + "peer": true, + "requires": { + "date-format": "^4.0.3", + "debug": "^4.1.1", + "fs-extra": "^10.0.0" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -29987,7 +33601,8 @@ "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "optional": true }, "strip-json-comments": { "version": "3.1.1", @@ -30003,16 +33618,20 @@ "minimist": "^1.1.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "devOptional": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" - }, "syntax-error": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", @@ -30021,12 +33640,6 @@ "acorn-node": "^1.2.0" } }, - "systeminformation": { - "version": "5.27.7", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", - "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", - "optional": true - }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -30068,6 +33681,25 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -30076,72 +33708,58 @@ } }, "terser": { - "version": "5.29.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz", - "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==", + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "requires": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "dependencies": { "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" } } }, "terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "requires": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "dependencies": { "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } } } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "requires": {} + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -30172,6 +33790,28 @@ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" }, + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "requires": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + } + } + }, "tinyify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", @@ -30204,11 +33844,6 @@ "util-deprecate": "^1.0.1" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, "terser": { "version": "3.16.1", "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", @@ -30230,18 +33865,18 @@ } }, "tldts": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", - "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", + "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", "optional": true, "requires": { - "tldts-core": "^6.1.86" + "tldts-core": "^6.1.70" } }, "tldts-core": { - "version": "6.1.86", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", - "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "version": "6.1.70", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", + "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", "optional": true }, "tlite": { @@ -30249,14 +33884,6 @@ "resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.9.tgz", "integrity": "sha512-5QOBAvDxZZwW1i+2YXMgF6/PuV/KhA0LyE9PyVi8Ywr3bfIPziZcQD+RpdJaQurCU8zIGtBo/XuPCEHdvyeFuQ==" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-buffer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", @@ -30288,9 +33915,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", - "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "optional": true, "requires": { "tldts": "^6.1.32" @@ -30338,6 +33965,12 @@ } } }, + "tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "requires": {} + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -30386,18 +34019,33 @@ } }, "tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tuf-js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", - "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.1.0.tgz", + "integrity": "sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==", "requires": { - "@tufjs/models": "2.0.0", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "@tufjs/models": "3.0.1", + "debug": "^4.4.1", + "make-fetch-happen": "^14.0.3" + }, + "dependencies": { + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } } }, "tunnel-agent": { @@ -30438,7 +34086,8 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "optional": true }, "type-is": { "version": "1.6.18", @@ -30470,9 +34119,16 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==" + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" + }, + "ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "optional": true, + "peer": true }, "umd": { "version": "3.0.3", @@ -30526,15 +34182,17 @@ "xtend": "^4.0.1" } }, - "undici": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.7.1.tgz", - "integrity": "sha512-+Wtb9bAQw6HYWzCnxrPTMVEV3Q1QjYanI0E4q02ehReMuquQdLTEFEYbfs7hcImVYKcQkWSwT6buEmSVIiDDtQ==" + "undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "optional": true, + "peer": true }, "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==" }, "unicode-match-property-ecmascript": { "version": "2.0.0", @@ -30546,27 +34204,27 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==" }, "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==" }, "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "requires": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" } }, "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "requires": { "imurmurhash": "^0.1.4" } @@ -30589,12 +34247,12 @@ "optional": true }, "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.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, "uri-js": { @@ -30652,12 +34310,9 @@ } }, "validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", - "requires": { - "builtins": "^5.0.0" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==" }, "vary": { "version": "1.1.2", @@ -30675,209 +34330,35 @@ "extsprintf": "^1.2.0" } }, - "vite": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", - "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", - "requires": { - "esbuild": "^0.19.3", - "fsevents": "~2.3.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" - }, - "dependencies": { - "@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "optional": true - }, - "@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "optional": true - }, - "esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "requires": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - } - } - }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "optional": true, + "peer": true + }, "wait-on": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", - "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", + "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", "optional": true, "requires": { - "axios": "^1.12.1", - "joi": "^18.0.1", + "axios": "^1.11.0", + "joi": "^17.13.3", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" }, "dependencies": { "axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "optional": true, "requires": { "follow-redirects": "^1.15.6", @@ -30890,22 +34371,13 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "optional": true - }, - "rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "optional": true, - "requires": { - "tslib": "^2.1.0" - } } } }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -30919,115 +34391,113 @@ "minimalistic-assert": "^1.0.0" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } + "weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "optional": true }, "webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", + "version": "5.101.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", + "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.3.3" }, "dependencies": { "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "requires": {} - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } } } }, "webpack-dev-middleware": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", - "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "requires": { "colorette": "^2.0.10", - "memfs": "^3.4.12", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" + }, + "dependencies": { + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + } } }, "webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", + "express": "^4.21.2", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" }, "dependencies": { "connect-history-api-fallback": { @@ -31035,34 +34505,149 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" }, - "webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "safe-buffer": "5.2.1" } + }, + "cookie": { + "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", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, + "express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "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": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==" + }, + "merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "requires": {} } } }, "webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "requires": { "clone-deep": "^4.0.1", "flat": "^5.0.2", - "wildcard": "^2.0.0" + "wildcard": "^2.0.1" } }, "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==" }, "webpack-subresource-integrity": { "version": "5.1.0", @@ -31127,29 +34712,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } } }, "wrap-ansi-cjs": { @@ -31160,29 +34722,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } } }, "wrap-comment": { @@ -31199,8 +34738,17 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "devOptional": true, "requires": {} }, + "wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "requires": { + "is-wsl": "^3.1.0" + } + }, "xhr2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", @@ -31227,6 +34775,62 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "optional": true, + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "optional": true, + "peer": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "optional": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", + "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", + "optional": true, + "peer": true + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "optional": true, + "peer": true + } + } + }, "yargs-parser": { "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", @@ -31255,16 +34859,28 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==" + }, + "zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" + }, + "zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "requires": {} }, "zone.js": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.4.tgz", - "integrity": "sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==", - "requires": { - "tslib": "^2.3.0" - } + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==" }, "zrender": { "version": "5.6.1", diff --git a/frontend/package.json b/frontend/package.json index 85206ed6a..be4ea26b9 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -60,25 +60,25 @@ "cypress:run:ci:parameterized": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:parameterized 4200 cypress:run:record" }, "dependencies": { - "@angular-devkit/build-angular": "^17.3.1", - "@angular/animations": "^17.3.1", - "@angular/cli": "^17.3.1", - "@angular/common": "^17.3.1", - "@angular/compiler": "^17.3.1", - "@angular/core": "^17.3.1", - "@angular/forms": "^17.3.1", - "@angular/localize": "^17.3.1", - "@angular/platform-browser": "^17.3.1", - "@angular/platform-browser-dynamic": "^17.3.1", - "@angular/platform-server": "^17.3.1", - "@angular/router": "^17.3.1", - "@angular/ssr": "^17.3.1", - "@fortawesome/angular-fontawesome": "~0.14.1", + "@angular-devkit/build-angular": "^20.3.7", + "@angular/animations": "^20.3.9", + "@angular/cli": "^20.3.7", + "@angular/common": "^20.3.9", + "@angular/compiler": "^20.3.9", + "@angular/core": "^20.3.9", + "@angular/forms": "^20.3.9", + "@angular/localize": "^20.3.9", + "@angular/platform-browser": "^20.3.9", + "@angular/platform-browser-dynamic": "^20.3.9", + "@angular/platform-server": "^20.3.9", + "@angular/router": "^20.3.9", + "@angular/ssr": "^20.3.7", + "@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", "@mempool/mempool.js": "2.3.0", - "@ng-bootstrap/ng-bootstrap": "^16.0.0", + "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", "browserify": "^17.0.0", @@ -86,18 +86,18 @@ "domino": "^2.1.6", "echarts": "~5.6.0", "ngx-echarts": "~17.2.0", - "ngx-infinite-scroll": "^17.0.0", + "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", "esbuild": "^0.25.8", "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", - "zone.js": "~0.14.4" + "zone.js": "~0.15.1" }, "devDependencies": { - "@angular/compiler-cli": "^17.3.1", - "@angular/language-service": "^17.3.1", + "@angular/compiler-cli": "^20.3.9", + "@angular/language-service": "^20.3.9", "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", @@ -107,7 +107,7 @@ "prettier": "^3.0.0", "source-map-support": "^0.5.21", "ts-node": "~10.9.1", - "typescript": "~5.4.3" + "typescript": "~5.8.3" }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 1b764c003..d0c5bf9ed 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -1,6 +1,6 @@ import { BrowserModule } from '@angular/platform-browser'; import { ModuleWithProviders, NgModule } from '@angular/core'; -import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { ZONE_SERVICE } from '@app/injection-tokens'; import { AppRoutingModule } from './app-routing.module'; @@ -58,20 +58,13 @@ const providers = [ { provide: ZONE_SERVICE, useClass: ZoneService }, ]; -@NgModule({ - declarations: [ - AppComponent, - ], - imports: [ - BrowserModule, - AppRoutingModule, - HttpClientModule, - BrowserAnimationsModule, - SharedModule, - ], - providers: providers, - bootstrap: [AppComponent] -}) +@NgModule({ declarations: [ + AppComponent, + ], + bootstrap: [AppComponent], imports: [BrowserModule, + AppRoutingModule, + BrowserAnimationsModule, + SharedModule], providers: [provideHttpClient(withInterceptorsFromDi())] }) export class AppModule { } @NgModule({}) From 79a07ce2efdb0062485343cc5728fb04c21caa6d Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 3 Nov 2025 00:27:08 +0800 Subject: [PATCH 477/534] no standalone components --- .../src/app/components/about/about-sponsors.component.ts | 1 + frontend/src/app/components/about/about.component.ts | 1 + .../accelerate-checkout/accelerate-checkout.component.ts | 3 ++- .../accelerate-checkout/accelerate-fee-graph.component.ts | 1 + .../acceleration-timeline-tooltip.component.ts | 1 + .../acceleration-timeline/acceleration-timeline.component.ts | 1 + .../acceleration-fees-graph.component.ts | 1 + .../acceleration-stats/acceleration-stats.component.ts | 1 + .../accelerations-list/accelerations-list.component.ts | 1 + .../accelerator-dashboard/accelerator-dashboard.component.ts | 1 + .../active-acceleration-box.component.ts | 1 + .../acceleration/pending-stats/pending-stats.component.ts | 1 + .../acceleration/sparkles/acceleration-sparkles.component.ts | 1 + .../app/components/address-graph/address-graph.component.ts | 1 + .../app/components/address-group/address-group.component.ts | 3 ++- .../components/address-labels/address-labels.component.ts | 1 + .../address-transactions-widget.component.ts | 1 + .../src/app/components/address/address-preview.component.ts | 3 ++- frontend/src/app/components/address/address.component.ts | 3 ++- .../addresses-treemap/addresses-treemap.component.ts | 1 + .../components/amount-selector/amount-selector.component.ts | 1 + frontend/src/app/components/amount/amount.component.ts | 1 + frontend/src/app/components/app/app.component.ts | 1 + .../asset-circulation/asset-circulation.component.ts | 1 + frontend/src/app/components/asset/asset.component.ts | 3 ++- .../components/assets/asset-group/asset-group.component.ts | 3 ++- .../assets/assets-featured/assets-featured.component.ts | 3 ++- .../app/components/assets/assets-nav/assets-nav.component.ts | 3 ++- frontend/src/app/components/assets/assets.component.ts | 3 ++- .../components/balance-widget/balance-widget.component.ts | 1 + .../components/bitcoin-invoice/bitcoin-invoice.component.ts | 3 ++- .../block-fee-rates-graph/block-fee-rates-graph.component.ts | 1 + .../block-fees-graph/block-fees-graph.component.ts | 1 + .../block-fees-subsidy-graph.component.ts | 1 + .../app/components/block-filters/block-filters.component.ts | 1 + .../block-health-graph/block-health-graph.component.ts | 1 + .../block-overview-graph/block-overview-graph.component.ts | 1 + .../block-overview-tooltip.component.ts | 1 + .../block-rewards-graph/block-rewards-graph.component.ts | 1 + .../block-sizes-weights-graph.component.ts | 1 + .../src/app/components/block-view/block-view.component.ts | 3 ++- frontend/src/app/components/block/block-preview.component.ts | 3 ++- .../src/app/components/block/block-transactions.component.ts | 1 + frontend/src/app/components/block/block.component.ts | 1 + .../blockchain-blocks/blockchain-blocks.component.ts | 1 + .../src/app/components/blockchain/blockchain.component.ts | 1 + .../src/app/components/blocks-list/blocks-list.component.ts | 1 + .../src/app/components/calculator/calculator.component.ts | 1 + frontend/src/app/components/change/change.component.ts | 1 + frontend/src/app/components/clipboard/clipboard.component.ts | 1 + .../src/app/components/clock-face/clock-face.component.ts | 1 + frontend/src/app/components/clock/clock.component.ts | 1 + .../src/app/components/clockchain/clockchain.component.ts | 1 + .../custom-dashboard/custom-dashboard.component.ts | 1 + .../difficulty-adjustments-table.components.ts | 1 + .../difficulty-mining/difficulty-mining.component.ts | 1 + .../components/difficulty/difficulty-tooltip.component.ts | 1 + .../src/app/components/difficulty/difficulty.component.ts | 1 + .../app/components/eight-blocks/eight-blocks.component.ts | 1 + frontend/src/app/components/faucet/faucet.component.ts | 3 ++- .../fee-distribution-graph.component.ts | 1 + frontend/src/app/components/fees-box/fees-box.component.ts | 1 + .../app/components/fiat-selector/fiat-selector.component.ts | 3 ++- frontend/src/app/components/footer/footer.component.ts | 1 + .../github-login.component/github-login.component.ts | 1 + frontend/src/app/components/graphs/graphs.component.ts | 1 + .../components/hashrate-chart/hashrate-chart.component.ts | 1 + .../hashrates-chart-pools/hashrate-chart-pools.component.ts | 1 + .../incoming-transactions-graph.component.ts | 1 + .../indexing-progress/indexing-progress.component.ts | 3 ++- .../language-selector/language-selector.component.ts | 1 + .../components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts | 1 + .../liquid-master-page/liquid-master-page.component.ts | 1 + .../expired-utxos-stats/expired-utxos-stats.component.ts | 1 + .../federation-addresses-list.component.ts | 1 + .../federation-addresses-stats.component.ts | 1 + .../federation-utxos-list/federation-utxos-list.component.ts | 1 + .../federation-wallet/federation-wallet.component.ts | 1 + .../recent-pegs-list/recent-pegs-list.component.ts | 1 + .../recent-pegs-stats/recent-pegs-stats.component.ts | 1 + .../reserves-ratio-stats/reserves-ratio-stats.component.ts | 1 + .../reserves-ratio/reserves-ratio.component.ts | 1 + .../reserves-supply-stats/reserves-supply-stats.component.ts | 1 + .../loading-indicator/loading-indicator.component.ts | 1 + .../master-page-preview/master-page-preview.component.ts | 1 + .../master-page-preview/preview-title.component.ts | 1 + .../src/app/components/master-page/master-page.component.ts | 1 + .../mempool-block-overview.component.ts | 1 + .../mempool-block-view/mempool-block-view.component.ts | 3 ++- .../app/components/mempool-block/mempool-block.component.ts | 1 + .../components/mempool-blocks/mempool-blocks.component.ts | 1 + .../app/components/mempool-graph/mempool-graph.component.ts | 1 + frontend/src/app/components/menu/menu.component.ts | 3 ++- .../mining-dashboard/mining-dashboard.component.ts | 1 + .../ngx-bootstrap-multiselect.component.ts | 1 + .../ngx-bootstrap-multiselect/off-click.directive.ts | 1 + .../ngx-bootstrap-multiselect/search-filter.pipe.ts | 3 ++- frontend/src/app/components/ord-data/ord-data.component.ts | 1 + .../app/components/pool-ranking/pool-ranking.component.ts | 1 + frontend/src/app/components/pool/pool-preview.component.ts | 1 + frontend/src/app/components/pool/pool.component.ts | 1 + .../src/app/components/price-chart/price-chart.component.ts | 1 + .../components/privacy-policy/privacy-policy.component.ts | 3 ++- .../push-transaction/push-transaction.component.ts | 3 ++- frontend/src/app/components/qrcode/qrcode.component.ts | 1 + .../rate-unit-selector/rate-unit-selector.component.ts | 1 + frontend/src/app/components/rbf-list/rbf-list.component.ts | 1 + .../rbf-timeline/rbf-timeline-tooltip.component.ts | 1 + .../app/components/rbf-timeline/rbf-timeline.component.ts | 1 + .../app/components/reward-stats/reward-stats.component.ts | 1 + .../src/app/components/search-form/search-form.component.ts | 1 + .../search-form/search-results/search-results.component.ts | 1 + .../app/components/server-health/server-health.component.ts | 1 + .../app/components/server-health/server-status.component.ts | 1 + .../simpleproof-widget/simpleproof-cubo-widget.component.ts | 1 + .../simpleproof-widget/simpleproof-widget.component.ts | 1 + .../src/app/components/stale-list/stale-list.component.ts | 1 + frontend/src/app/components/start/start.component.ts | 1 + .../src/app/components/statistics/statistics.component.ts | 3 ++- .../src/app/components/status-view/status-view.component.ts | 3 ++- .../stratum/stratum-list/stratum-list.component.ts | 1 + .../src/app/components/svg-images/svg-images.component.ts | 1 + .../taproot-address-scripts.component.ts | 1 + .../terms-of-service/terms-of-service.component.ts | 3 ++- .../test-transactions/test-transactions.component.ts | 3 ++- .../components/theme-selector/theme-selector.component.ts | 1 + frontend/src/app/components/time/time.component.ts | 1 + .../timezone-selector/timezone-selector.component.ts | 1 + frontend/src/app/components/tracker/tracker-bar.component.ts | 1 + frontend/src/app/components/tracker/tracker.component.ts | 1 + .../trademark-policy/trademark-policy.component.ts | 3 ++- .../src/app/components/transaction/cpfp-info.component.ts | 1 + .../transaction-details/transaction-details.component.ts | 1 + .../components/transaction/transaction-preview.component.ts | 1 + .../app/components/transaction/transaction-raw.component.ts | 1 + .../src/app/components/transaction/transaction.component.ts | 1 + .../transactions-list/transactions-list.component.ts | 1 + .../treasuries/supply/treasuries-supply.component.ts | 1 + .../treasuries-graph/treasuries-graph.component.ts | 1 + .../treasuries/treasuries-pie/treasuries-pie.component.ts | 1 + .../src/app/components/treasuries/treasuries.component.ts | 3 ++- .../treasuries/verify/treasuries-verify.component.ts | 1 + .../app/components/twitter-login/twitter-login.component.ts | 1 + .../components/twitter-widget/twitter-widget.component.ts | 1 + .../tx-bowtie-graph-tooltip.component.ts | 1 + .../components/tx-bowtie-graph/tx-bowtie-graph.component.ts | 1 + .../src/app/components/tx-features/tx-features.component.ts | 1 + .../app/components/tx-fee-rating/tx-fee-rating.component.ts | 1 + .../src/app/components/utxo-graph/utxo-graph.component.ts | 1 + .../src/app/components/wallet/wallet-preview.component.ts | 3 ++- frontend/src/app/components/wallet/wallet.component.ts | 3 ++- frontend/src/app/dashboard/dashboard.component.ts | 1 + frontend/src/app/data-cy.directive.ts | 3 ++- frontend/src/app/docs/api-docs/api-docs-nav.component.ts | 3 ++- frontend/src/app/docs/api-docs/api-docs.component.ts | 3 ++- .../src/app/docs/code-template/code-template.component.ts | 3 ++- frontend/src/app/docs/docs/docs.component.ts | 3 ++- frontend/src/app/docs/faq-template/faq-template.component.ts | 3 ++- frontend/src/app/fiat/fiat.component.ts | 1 + frontend/src/app/graphs/echarts.ts | 5 +++-- .../lightning/channel/channel-box/channel-box.component.ts | 1 + .../channel/channel-close-box/channel-close-box.component.ts | 1 + .../src/app/lightning/channel/channel-preview.component.ts | 1 + frontend/src/app/lightning/channel/channel.component.ts | 1 + .../lightning/channel/closing-type/closing-type.component.ts | 1 + .../app/lightning/channels-list/channels-list.component.ts | 1 + .../channels-statistics/channels-statistics.component.ts | 1 + frontend/src/app/lightning/group/group-preview.component.ts | 3 ++- frontend/src/app/lightning/group/group.component.ts | 3 ++- .../src/app/lightning/justice-list/justice-list.component.ts | 1 + .../lightning-dashboard/lightning-dashboard.component.ts | 1 + .../lightning-wrapper/lightning-wrapper.component.ts | 1 + .../app/lightning/node-fee-chart/node-fee-chart.component.ts | 1 + .../node-statistics-chart/node-statistics-chart.component.ts | 1 + .../lightning/node-statistics/node-statistics.component.ts | 1 + frontend/src/app/lightning/node/node-preview.component.ts | 1 + frontend/src/app/lightning/node/node.component.ts | 1 + .../nodes-channels-map/nodes-channels-map.component.ts | 1 + .../app/lightning/nodes-channels/node-channels.component.ts | 1 + .../src/app/lightning/nodes-list/nodes-list.component.ts | 1 + frontend/src/app/lightning/nodes-map/nodes-map.component.ts | 1 + .../nodes-networks-chart/nodes-networks-chart.component.ts | 1 + .../nodes-per-country-chart.component.ts | 1 + .../nodes-per-country/nodes-per-country.component.ts | 1 + .../nodes-per-isp-chart/nodes-per-isp-chart.component.ts | 1 + .../nodes-per-isp/nodes-per-isp-preview.component.ts | 1 + .../app/lightning/nodes-per-isp/nodes-per-isp.component.ts | 1 + .../app/lightning/nodes-ranking/nodes-ranking.component.ts | 1 + .../nodes-ranking/oldest-nodes/oldest-nodes.component.ts | 1 + .../top-nodes-per-capacity.component.ts | 1 + .../top-nodes-per-channels.component.ts | 1 + .../nodes-rankings-dashboard.component.ts | 1 + .../statistics-chart/lightning-statistics-chart.component.ts | 1 + .../shared/components/address-text/address-text.component.ts | 3 ++- .../shared/components/address-type/address-type.component.ts | 3 ++- frontend/src/app/shared/components/asm/asm.component.ts | 1 + frontend/src/app/shared/components/btc/btc.component.ts | 3 ++- .../components/confirmations/confirmations.component.ts | 1 + .../src/app/shared/components/fee-rate/fee-rate.component.ts | 3 ++- .../shared/components/geolocation/geolocation.component.ts | 3 ++- .../components/global-footer/global-footer.component.ts | 1 + .../app/shared/components/http-error/http-error.component.ts | 3 ++- .../components/mempool-error/mempool-error.component.ts | 3 ++- frontend/src/app/shared/components/sats/sats.component.ts | 3 ++- .../components/testnet-alert/testnet-alert.component.ts | 1 + .../app/shared/components/timestamp/timestamp.component.ts | 1 + .../src/app/shared/components/toggle/toggle.component.ts | 1 + .../src/app/shared/components/truncate/truncate.component.ts | 1 + .../shared/components/weight-directives/weight-directives.ts | 4 ++-- frontend/src/app/shared/directives/browser-only.directive.ts | 3 ++- .../src/app/shared/directives/colored-price.directive.ts | 1 + frontend/src/app/shared/directives/server-only.directive.ts | 3 ++- frontend/src/app/shared/pipes/absolute/absolute.pipe.ts | 5 ++++- frontend/src/app/shared/pipes/amount-shortener.pipe.ts | 3 ++- frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts | 3 ++- frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts | 3 ++- frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts | 3 ++- frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts | 3 ++- frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts | 3 ++- .../app/shared/pipes/cap-address-pipe/cap-address-pipe.ts | 5 ++++- .../src/app/shared/pipes/decimal2hex/decimal2hex.pipe.ts | 3 ++- .../src/app/shared/pipes/fee-rounding/fee-rounding.pipe.ts | 1 + frontend/src/app/shared/pipes/fiat-currency.pipe.ts | 3 ++- frontend/src/app/shared/pipes/fiat-shortener.pipe.ts | 3 ++- frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts | 3 ++- .../src/app/shared/pipes/http-error-pipe/http-error.pipe.ts | 5 ++++- frontend/src/app/shared/pipes/math-ceil/math-ceil.pipe.ts | 5 ++++- frontend/src/app/shared/pipes/no-sanitize.pipe.ts | 2 +- .../src/app/shared/pipes/relative-url/relative-url.pipe.ts | 3 ++- .../pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts | 3 ++- .../shared/pipes/shorten-string-pipe/shorten-string.pipe.ts | 5 ++++- 231 files changed, 307 insertions(+), 68 deletions(-) diff --git a/frontend/src/app/components/about/about-sponsors.component.ts b/frontend/src/app/components/about/about-sponsors.component.ts index f42944173..be86a9d93 100644 --- a/frontend/src/app/components/about/about-sponsors.component.ts +++ b/frontend/src/app/components/about/about-sponsors.component.ts @@ -5,6 +5,7 @@ import { EnterpriseService } from '@app/services/enterprise.service'; selector: 'app-about-sponsors', templateUrl: './about-sponsors.component.html', styleUrls: ['./about-sponsors.component.scss'], + standalone: false, }) export class AboutSponsorsComponent { @Input() host = 'https://mempool.space'; diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 5963c371c..01d496c04 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -16,6 +16,7 @@ import { EnterpriseService } from '@app/services/enterprise.service'; selector: 'app-about', templateUrl: './about.component.html', styleUrls: ['./about.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class AboutComponent implements OnInit { 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 e19952d80..2888965a2 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -54,7 +54,8 @@ type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | @Component({ selector: 'app-accelerate-checkout', templateUrl: './accelerate-checkout.component.html', - styleUrls: ['./accelerate-checkout.component.scss'] + styleUrls: ['./accelerate-checkout.component.scss'], + standalone: false, }) export class AccelerateCheckout implements OnInit, OnDestroy { @Input() tx: Transaction; 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 e1c868cb4..ebad9c1e4 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 @@ -17,6 +17,7 @@ interface GraphBar { selector: 'app-accelerate-fee-graph', templateUrl: './accelerate-fee-graph.component.html', styleUrls: ['./accelerate-fee-graph.component.scss'], + standalone: false, }) export class AccelerateFeeGraphComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { @Input() tx: Transaction; 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 index b4b3405fc..5ec889da0 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts @@ -4,6 +4,7 @@ import { Component, ElementRef, ViewChild, Input, OnChanges } from '@angular/cor selector: 'app-acceleration-timeline-tooltip', templateUrl: './acceleration-timeline-tooltip.component.html', styleUrls: ['./acceleration-timeline-tooltip.component.scss'], + standalone: false, }) export class AccelerationTimelineTooltipComponent implements OnChanges { @Input() accelerationInfo: any; 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 59e63d839..31f8706bc 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -8,6 +8,7 @@ import { MiningService } from '@app/services/mining.service'; selector: 'app-acceleration-timeline', templateUrl: './acceleration-timeline.component.html', styleUrls: ['./acceleration-timeline.component.scss'], + standalone: false, }) export class AccelerationTimelineComponent implements OnInit, OnChanges { @Input() transactionTime: number; 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 05602d577..74860be22 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 @@ -27,6 +27,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip } `], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AccelerationFeesGraphComponent implements OnInit, OnChanges, OnDestroy { @Input() widget: boolean = false; 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 65a1e4eb5..5e077ba7d 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 @@ -14,6 +14,7 @@ export type AccelerationStats = { templateUrl: './acceleration-stats.component.html', styleUrls: ['./acceleration-stats.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AccelerationStatsComponent implements OnInit, OnChanges { @Input() timespan: '24h' | '3d' | '1w' | '1m' | 'all' = '1w'; 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 ee5303530..7cde6bcf3 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 @@ -13,6 +13,7 @@ import { MiningService } from '@app/services/mining.service'; templateUrl: './accelerations-list.component.html', styleUrls: ['./accelerations-list.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AccelerationsListComponent implements OnInit, OnDestroy { @Input() widget: boolean = false; 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 2e6e9c402..c1a53ea3c 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 @@ -26,6 +26,7 @@ interface AccelerationBlock extends BlockExtended { selector: 'app-accelerator-dashboard', templateUrl: './accelerator-dashboard.component.html', styleUrls: ['./accelerator-dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class AcceleratorDashboardComponent implements OnInit, OnDestroy { 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 739760017..30ad9884c 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 @@ -21,6 +21,7 @@ function toRGB({r,g,b}): string { templateUrl: './active-acceleration-box.component.html', styleUrls: ['./active-acceleration-box.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class ActiveAccelerationBox implements OnChanges { @Input() acceleratedBy?: number[]; 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 ed63ad098..fd365c504 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 @@ -10,6 +10,7 @@ import { WebsocketService } from '@app/services/websocket.service'; templateUrl: './pending-stats.component.html', styleUrls: ['./pending-stats.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class PendingStatsComponent implements OnInit { @Input() accelerations$: Observable; diff --git a/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts index 2316c996d..baed6b204 100644 --- a/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts +++ b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts @@ -5,6 +5,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inpu templateUrl: './acceleration-sparkles.component.html', styleUrls: ['./acceleration-sparkles.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AccelerationSparklesComponent implements OnChanges { @Input() arrow: ElementRef; 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 0f33bb955..0af7e2937 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -32,6 +32,7 @@ const periodSeconds = { z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddressGraphComponent implements OnChanges, OnDestroy { 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 560308592..c810ed339 100644 --- a/frontend/src/app/components/address-group/address-group.component.ts +++ b/frontend/src/app/components/address-group/address-group.component.ts @@ -14,7 +14,8 @@ import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-group', templateUrl: './address-group.component.html', - styleUrls: ['./address-group.component.scss'] + styleUrls: ['./address-group.component.scss'], + standalone: false, }) export class AddressGroupComponent implements OnInit, OnDestroy { network = ''; 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 0669a22e4..0a86860bd 100644 --- a/frontend/src/app/components/address-labels/address-labels.component.ts +++ b/frontend/src/app/components/address-labels/address-labels.component.ts @@ -8,6 +8,7 @@ import { AddressType, AddressTypeInfo } from '@app/shared/address-utils'; templateUrl: './address-labels.component.html', styleUrls: ['./address-labels.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AddressLabelsComponent implements OnChanges { network = ''; 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 ab9b124c3..01bcad565 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 @@ -9,6 +9,7 @@ import { PriceService } from '@app/services/price.service'; selector: 'app-address-transactions-widget', templateUrl: './address-transactions-widget.component.html', styleUrls: ['./address-transactions-widget.component.scss'], + standalone: false, }) export class AddressTransactionsWidgetComponent implements OnInit, OnChanges, OnDestroy { @Input() address: string; diff --git a/frontend/src/app/components/address/address-preview.component.ts b/frontend/src/app/components/address/address-preview.component.ts index 1106d6096..1eed267ec 100644 --- a/frontend/src/app/components/address/address-preview.component.ts +++ b/frontend/src/app/components/address/address-preview.component.ts @@ -15,7 +15,8 @@ import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-preview', templateUrl: './address-preview.component.html', - styleUrls: ['./address-preview.component.scss'] + styleUrls: ['./address-preview.component.scss'], + standalone: false, }) export class AddressPreviewComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 32867b3ba..c48cd496b 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -92,7 +92,8 @@ class AddressStats implements ChainStats { @Component({ selector: 'app-address', templateUrl: './address.component.html', - styleUrls: ['./address.component.scss'] + styleUrls: ['./address.component.scss'], + standalone: false, }) export class AddressComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts index 5ff3cf502..ccc58e9c2 100644 --- a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -14,6 +14,7 @@ import { formatNumber } from '@angular/common'; templateUrl: './addresses-treemap.component.html', styleUrls: ['./addresses-treemap.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AddressesTreemap implements OnChanges { @Input() addresses: Address[]; diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.ts b/frontend/src/app/components/amount-selector/amount-selector.component.ts index e22542eb3..0961e5e0d 100644 --- a/frontend/src/app/components/amount-selector/amount-selector.component.ts +++ b/frontend/src/app/components/amount-selector/amount-selector.component.ts @@ -7,6 +7,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-amount-selector', templateUrl: './amount-selector.component.html', styleUrls: ['./amount-selector.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class AmountSelectorComponent implements OnInit { diff --git a/frontend/src/app/components/amount/amount.component.ts b/frontend/src/app/components/amount/amount.component.ts index bf40a7567..2ad0c0fc5 100644 --- a/frontend/src/app/components/amount/amount.component.ts +++ b/frontend/src/app/components/amount/amount.component.ts @@ -8,6 +8,7 @@ import { Price } from '@app/services/price.service'; templateUrl: './amount.component.html', styleUrls: ['./amount.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AmountComponent implements OnInit, OnDestroy { conversions$: Observable; diff --git a/frontend/src/app/components/app/app.component.ts b/frontend/src/app/components/app/app.component.ts index 01f887c58..d0384b322 100644 --- a/frontend/src/app/components/app/app.component.ts +++ b/frontend/src/app/components/app/app.component.ts @@ -11,6 +11,7 @@ import { SeoService } from '@app/services/seo.service'; selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], + standalone: false, providers: [NgbTooltipConfig] }) export class AppComponent implements OnInit { 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 ab41492b0..3d3877cbf 100644 --- a/frontend/src/app/components/asset-circulation/asset-circulation.component.ts +++ b/frontend/src/app/components/asset-circulation/asset-circulation.component.ts @@ -11,6 +11,7 @@ import { environment } from '@environments/environment'; templateUrl: './asset-circulation.component.html', styleUrls: ['./asset-circulation.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AssetCirculationComponent implements OnInit { @Input() assetId: string; diff --git a/frontend/src/app/components/asset/asset.component.ts b/frontend/src/app/components/asset/asset.component.ts index 30bbd594b..5afcdbd1d 100644 --- a/frontend/src/app/components/asset/asset.component.ts +++ b/frontend/src/app/components/asset/asset.component.ts @@ -16,7 +16,8 @@ import { moveDec } from '@app/bitcoin.utils'; @Component({ selector: 'app-asset', templateUrl: './asset.component.html', - styleUrls: ['./asset.component.scss'] + styleUrls: ['./asset.component.scss'], + standalone: false, }) export class AssetComponent implements OnInit, OnDestroy { network = ''; 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 3294eed70..4c3d45639 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 @@ -8,7 +8,8 @@ import { AssetsService } from '@app/services/assets.service'; @Component({ selector: 'app-asset-group', templateUrl: './asset-group.component.html', - styleUrls: ['./asset-group.component.scss'] + styleUrls: ['./asset-group.component.scss'], + standalone: false, }) export class AssetGroupComponent implements OnInit { group$: Observable; 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 de6a0e524..861a665bb 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 @@ -6,7 +6,8 @@ import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-assets-featured', templateUrl: './assets-featured.component.html', - styleUrls: ['./assets-featured.component.scss'] + styleUrls: ['./assets-featured.component.scss'], + standalone: false, }) export class AssetsFeaturedComponent implements OnInit { featuredAssets$: Observable; 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 86373a1ce..90bcea9ad 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 @@ -14,7 +14,8 @@ import { environment } from '@environments/environment'; @Component({ selector: 'app-assets-nav', templateUrl: './assets-nav.component.html', - styleUrls: ['./assets-nav.component.scss'] + styleUrls: ['./assets-nav.component.scss'], + standalone: false, }) export class AssetsNavComponent implements OnInit { @ViewChild('instance', {static: true}) instance: NgbTypeahead; diff --git a/frontend/src/app/components/assets/assets.component.ts b/frontend/src/app/components/assets/assets.component.ts index 6a573fcd6..f0f081f58 100644 --- a/frontend/src/app/components/assets/assets.component.ts +++ b/frontend/src/app/components/assets/assets.component.ts @@ -13,7 +13,8 @@ import { StateService } from '@app/services/state.service'; selector: 'app-assets', templateUrl: './assets.component.html', styleUrls: ['./assets.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class AssetsComponent implements OnInit { nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId; 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 bd92a2eb9..82ebde8ee 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.ts +++ b/frontend/src/app/components/balance-widget/balance-widget.component.ts @@ -9,6 +9,7 @@ import { Observable, catchError, of } from 'rxjs'; templateUrl: './balance-widget.component.html', styleUrls: ['./balance-widget.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class BalanceWidgetComponent implements OnInit, OnChanges { @Input() address: string; 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 8bb20947c..2ed677200 100644 --- a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts +++ b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts @@ -8,7 +8,8 @@ import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-bitcoin-invoice', templateUrl: './bitcoin-invoice.component.html', - styleUrls: ['./bitcoin-invoice.component.scss'] + styleUrls: ['./bitcoin-invoice.component.scss'], + standalone: false, }) export class BitcoinInvoiceComponent implements OnInit, OnChanges, OnDestroy { @Input() 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 07361ef42..85dfb9b8a 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 @@ -26,6 +26,7 @@ import { ActivatedRoute, Router } from '@angular/router'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockFeeRatesGraphComponent implements OnInit { 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 c2dea11aa..23ff2faef 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 @@ -26,6 +26,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockFeesGraphComponent implements OnInit { 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 deba874a7..2c03f999e 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 @@ -27,6 +27,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockFeesSubsidyGraphComponent implements OnInit { 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 2a0c0772a..143ce4fd0 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.ts +++ b/frontend/src/app/components/block-filters/block-filters.component.ts @@ -8,6 +8,7 @@ import { Subscription } from 'rxjs'; selector: 'app-block-filters', templateUrl: './block-filters.component.html', styleUrls: ['./block-filters.component.scss'], + standalone: false, }) export class BlockFiltersComponent implements OnInit, OnChanges, OnDestroy { @Input() cssWidth: number = 800; 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 8d893a85f..56afee18f 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 @@ -24,6 +24,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockHealthGraphComponent implements OnInit { diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 06da0b27b..f0a28f071 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -35,6 +35,7 @@ const unmatchedContrastAuditColors = { selector: 'app-block-overview-graph', templateUrl: './block-overview-graph.component.html', styleUrls: ['./block-overview-graph.component.scss'], + standalone: false, }) export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, OnChanges { @Input() isLoading: boolean; 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 ffff1b5ed..e76d6be97 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 @@ -9,6 +9,7 @@ import { Block } from '@interfaces/electrs.interface.js'; selector: 'app-block-overview-tooltip', templateUrl: './block-overview-tooltip.component.html', styleUrls: ['./block-overview-tooltip.component.scss'], + standalone: false, }) export class BlockOverviewTooltipComponent implements OnChanges { @Input() tx: TransactionStripped | void; 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 15dafb151..3f2786504 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 @@ -26,6 +26,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockRewardsGraphComponent implements OnInit { 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 2cc0f0098..915ed66b5 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 @@ -24,6 +24,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockSizesWeightsGraphComponent implements OnInit { 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 19a18383e..16feb098c 100644 --- a/frontend/src/app/components/block-view/block-view.component.ts +++ b/frontend/src/app/components/block-view/block-view.component.ts @@ -28,7 +28,8 @@ function bestFitResolution(min, max, n): number { @Component({ selector: 'app-block-view', templateUrl: './block-view.component.html', - styleUrls: ['./block-view.component.scss'] + styleUrls: ['./block-view.component.scss'], + standalone: false, }) export class BlockViewComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 29a13308c..e6f1ff3c3 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -15,7 +15,8 @@ import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-block-preview', templateUrl: './block-preview.component.html', - styleUrls: ['./block-preview.component.scss'] + styleUrls: ['./block-preview.component.scss'], + standalone: false, }) export class BlockPreviewComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/block/block-transactions.component.ts b/frontend/src/app/components/block/block-transactions.component.ts index 170d8297d..0d904b645 100644 --- a/frontend/src/app/components/block/block-transactions.component.ts +++ b/frontend/src/app/components/block/block-transactions.component.ts @@ -10,6 +10,7 @@ import { PreloadService } from '@app/services/preload.service'; selector: 'app-block-transactions', templateUrl: './block-transactions.component.html', styleUrl: './block-transactions.component.scss', + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockTransactionsComponent implements OnInit { diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index c3ad82b8e..bc20125f8 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -32,6 +32,7 @@ interface ComparisonStats { @Component({ selector: 'app-block', templateUrl: './block.component.html', + standalone: false, styleUrls: ['./block.component.scss'], styles: [` .loadingGraphs { 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 4666683c3..be63af042 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -15,6 +15,7 @@ interface BlockchainBlock extends BlockExtended { selector: 'app-blockchain-blocks', templateUrl: './blockchain-blocks.component.html', styleUrls: ['./blockchain-blocks.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index 2e3224a9c..757bfee7f 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -7,6 +7,7 @@ import { StorageService } from '@app/services/storage.service'; selector: 'app-blockchain', templateUrl: './blockchain.component.html', styleUrls: ['./blockchain.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlockchainComponent implements OnInit, OnDestroy, OnChanges { 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 9c04058e9..43469d179 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -15,6 +15,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip selector: 'app-blocks-list', templateUrl: './blocks-list.component.html', styleUrls: ['./blocks-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class BlocksList implements OnInit { diff --git a/frontend/src/app/components/calculator/calculator.component.ts b/frontend/src/app/components/calculator/calculator.component.ts index 39d2bff8e..1beadeed5 100644 --- a/frontend/src/app/components/calculator/calculator.component.ts +++ b/frontend/src/app/components/calculator/calculator.component.ts @@ -9,6 +9,7 @@ import { WebsocketService } from '@app/services/websocket.service'; selector: 'app-calculator', templateUrl: './calculator.component.html', styleUrls: ['./calculator.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class CalculatorComponent implements OnInit { diff --git a/frontend/src/app/components/change/change.component.ts b/frontend/src/app/components/change/change.component.ts index c4ae965ce..43c089a21 100644 --- a/frontend/src/app/components/change/change.component.ts +++ b/frontend/src/app/components/change/change.component.ts @@ -4,6 +4,7 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/c selector: 'app-change', templateUrl: './change.component.html', styleUrls: ['./change.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChangeComponent implements OnChanges { diff --git a/frontend/src/app/components/clipboard/clipboard.component.ts b/frontend/src/app/components/clipboard/clipboard.component.ts index 31f882d12..d38b8a4c9 100644 --- a/frontend/src/app/components/clipboard/clipboard.component.ts +++ b/frontend/src/app/components/clipboard/clipboard.component.ts @@ -4,6 +4,7 @@ import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@a selector: 'app-clipboard', templateUrl: './clipboard.component.html', styleUrls: ['./clipboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ClipboardComponent { 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 a13594597..47850a214 100644 --- a/frontend/src/app/components/clock-face/clock-face.component.ts +++ b/frontend/src/app/components/clock-face/clock-face.component.ts @@ -6,6 +6,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-clock-face', templateUrl: './clock-face.component.html', styleUrls: ['./clock-face.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ClockFaceComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/clock/clock.component.ts b/frontend/src/app/components/clock/clock.component.ts index 90b3d5d26..8b7db9f5f 100644 --- a/frontend/src/app/components/clock/clock.component.ts +++ b/frontend/src/app/components/clock/clock.component.ts @@ -11,6 +11,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip selector: 'app-clock', templateUrl: './clock.component.html', styleUrls: ['./clock.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ClockComponent implements OnInit { diff --git a/frontend/src/app/components/clockchain/clockchain.component.ts b/frontend/src/app/components/clockchain/clockchain.component.ts index 41faa897b..790585f20 100644 --- a/frontend/src/app/components/clockchain/clockchain.component.ts +++ b/frontend/src/app/components/clockchain/clockchain.component.ts @@ -6,6 +6,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-clockchain', templateUrl: './clockchain.component.html', styleUrls: ['./clockchain.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ClockchainComponent implements OnInit, OnChanges, OnDestroy { 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 36af77d6d..bce4338a5 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -33,6 +33,7 @@ interface MempoolStatsData { selector: 'app-custom-dashboard', templateUrl: './custom-dashboard.component.html', styleUrls: ['./custom-dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewInit { 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 474a8bcfe..42527357a 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 @@ -18,6 +18,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, }) export class DifficultyAdjustmentsTable implements OnInit { hashrateObservable$: Observable; 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 84912c8dc..85f15510a 100644 --- a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts +++ b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts @@ -23,6 +23,7 @@ interface EpochProgress { selector: 'app-difficulty-mining', templateUrl: './difficulty-mining.component.html', styleUrls: ['./difficulty-mining.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class DifficultyMiningComponent implements OnInit { diff --git a/frontend/src/app/components/difficulty/difficulty-tooltip.component.ts b/frontend/src/app/components/difficulty/difficulty-tooltip.component.ts index 42d2a61b4..9ad44a629 100644 --- a/frontend/src/app/components/difficulty/difficulty-tooltip.component.ts +++ b/frontend/src/app/components/difficulty/difficulty-tooltip.component.ts @@ -22,6 +22,7 @@ const EPOCH_BLOCK_LENGTH = 2016; // Bitcoin mainnet selector: 'app-difficulty-tooltip', templateUrl: './difficulty-tooltip.component.html', styleUrls: ['./difficulty-tooltip.component.scss'], + standalone: false, }) export class DifficultyTooltipComponent implements OnChanges { @Input() status: string | void; diff --git a/frontend/src/app/components/difficulty/difficulty.component.ts b/frontend/src/app/components/difficulty/difficulty.component.ts index 3737754df..229b9194b 100644 --- a/frontend/src/app/components/difficulty/difficulty.component.ts +++ b/frontend/src/app/components/difficulty/difficulty.component.ts @@ -39,6 +39,7 @@ const EPOCH_BLOCK_LENGTH = 2016; // Bitcoin mainnet selector: 'app-difficulty', templateUrl: './difficulty.component.html', styleUrls: ['./difficulty.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class DifficultyComponent implements OnInit { 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 0e0861382..00afcad4f 100644 --- a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts +++ b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts @@ -45,6 +45,7 @@ interface BlockInfo extends BlockExtended { ]) ]), ], + standalone: false, }) export class EightBlocksComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/faucet/faucet.component.ts b/frontend/src/app/components/faucet/faucet.component.ts index 6bf55ebac..6b4881176 100644 --- a/frontend/src/app/components/faucet/faucet.component.ts +++ b/frontend/src/app/components/faucet/faucet.component.ts @@ -11,7 +11,8 @@ import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-faucet', templateUrl: './faucet.component.html', - styleUrls: ['./faucet.component.scss'] + styleUrls: ['./faucet.component.scss'], + standalone: false, }) export class FaucetComponent implements OnInit, OnDestroy { loading = true; 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 237bfa5ef..1bc5aaa1d 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 @@ -11,6 +11,7 @@ import { Subscription } from 'rxjs'; templateUrl: './fee-distribution-graph.component.html', styleUrls: ['./fee-distribution-graph.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestroy { @Input() feeRange: number[]; 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 b8689bd3c..a1c8e7698 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -11,6 +11,7 @@ import { ThemeService } from '@app/services/theme.service'; templateUrl: './fees-box.component.html', styleUrls: ['./fees-box.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class FeesBoxComponent implements OnInit, OnDestroy { isLoading$: Observable; 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 a9d4b06a3..a6f3766cb 100644 --- a/frontend/src/app/components/fiat-selector/fiat-selector.component.ts +++ b/frontend/src/app/components/fiat-selector/fiat-selector.component.ts @@ -8,7 +8,8 @@ import { StateService } from '@app/services/state.service'; selector: 'app-fiat-selector', templateUrl: './fiat-selector.component.html', styleUrls: ['./fiat-selector.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class FiatSelectorComponent implements OnInit { fiatForm: UntypedFormGroup; diff --git a/frontend/src/app/components/footer/footer.component.ts b/frontend/src/app/components/footer/footer.component.ts index 4001a3875..1df81bc62 100644 --- a/frontend/src/app/components/footer/footer.component.ts +++ b/frontend/src/app/components/footer/footer.component.ts @@ -20,6 +20,7 @@ interface MempoolInfoData { selector: 'app-footer', templateUrl: './footer.component.html', styleUrls: ['./footer.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class FooterComponent implements OnInit { diff --git a/frontend/src/app/components/github-login.component/github-login.component.ts b/frontend/src/app/components/github-login.component/github-login.component.ts index f27e2bb7f..9a0830a38 100644 --- a/frontend/src/app/components/github-login.component/github-login.component.ts +++ b/frontend/src/app/components/github-login.component/github-login.component.ts @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'app-github-login', templateUrl: './github-login.component.html', + standalone: false, }) export class GithubLogin { @Input() width: string | null = null; diff --git a/frontend/src/app/components/graphs/graphs.component.ts b/frontend/src/app/components/graphs/graphs.component.ts index 1b78327ed..e7c55a5c4 100644 --- a/frontend/src/app/components/graphs/graphs.component.ts +++ b/frontend/src/app/components/graphs/graphs.component.ts @@ -8,6 +8,7 @@ import { handleDemoRedirect } from '@app/shared/common.utils'; selector: 'app-graphs', templateUrl: './graphs.component.html', styleUrls: ['./graphs.component.scss'], + standalone: false, }) export class GraphsComponent implements OnInit { flexWrap = false; 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 751c2d140..d72800aa2 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -27,6 +27,7 @@ import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class HashrateChartComponent implements OnInit { 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 002fdbc07..f7bc7607b 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 @@ -31,6 +31,7 @@ interface Hashrate { z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class HashrateChartPoolsComponent implements OnInit { 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 754d5bdde..1aff1fb1c 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 @@ -20,6 +20,7 @@ const OUTLIERS_MEDIAN_MULTIPLIER = 4; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class IncomingTransactionsGraphComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/indexing-progress/indexing-progress.component.ts b/frontend/src/app/components/indexing-progress/indexing-progress.component.ts index 121e77c7d..c81f7544b 100644 --- a/frontend/src/app/components/indexing-progress/indexing-progress.component.ts +++ b/frontend/src/app/components/indexing-progress/indexing-progress.component.ts @@ -3,7 +3,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; @Component({ selector: 'app-indexing-progress', templateUrl: './indexing-progress.component.html', - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class IndexingProgressComponent implements OnInit { constructor( 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 b6df5599a..51b6e609b 100644 --- a/frontend/src/app/components/language-selector/language-selector.component.ts +++ b/frontend/src/app/components/language-selector/language-selector.component.ts @@ -8,6 +8,7 @@ import { LanguageService } from '@app/services/language.service'; selector: 'app-language-selector', templateUrl: './language-selector.component.html', styleUrls: ['./language-selector.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class LanguageSelectorComponent implements OnInit { 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 f3b095b15..bad891847 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 @@ -18,6 +18,7 @@ import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; } `], templateUrl: './lbtc-pegs-graph.component.html', + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class LbtcPegsGraphComponent implements OnInit, OnChanges { 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 65f391d16..8605b073e 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 @@ -9,6 +9,7 @@ import { NavigationService } from '@app/services/navigation.service'; selector: 'app-liquid-master-page', templateUrl: './liquid-master-page.component.html', styleUrls: ['./liquid-master-page.component.scss'], + standalone: false, }) export class LiquidMasterPageComponent implements OnInit, OnDestroy { env: Env; 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 e9de3cce3..9c36a1883 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 @@ -6,6 +6,7 @@ import { FederationUtxo } from '@interfaces/node-api.interface'; selector: 'app-expired-utxos-stats', templateUrl: './expired-utxos-stats.component.html', styleUrls: ['./expired-utxos-stats.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ExpiredUtxosStatsComponent implements OnInit { 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 e098dfc34..9dc19dc0b 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 @@ -10,6 +10,7 @@ import { WebsocketService } from '@app/services/websocket.service'; selector: 'app-federation-addresses-list', templateUrl: './federation-addresses-list.component.html', styleUrls: ['./federation-addresses-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class FederationAddressesListComponent implements OnInit { diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.ts index 61650fdb4..9e88c3ce3 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.ts @@ -5,6 +5,7 @@ import { Observable, combineLatest, map, of } from 'rxjs'; selector: 'app-federation-addresses-stats', templateUrl: './federation-addresses-stats.component.html', styleUrls: ['./federation-addresses-stats.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class FederationAddressesStatsComponent implements OnInit { 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 44d0e44f8..25440b942 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 @@ -11,6 +11,7 @@ import { WebsocketService } from '@app/services/websocket.service'; selector: 'app-federation-utxos-list', templateUrl: './federation-utxos-list.component.html', styleUrls: ['./federation-utxos-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class FederationUtxosListComponent implements OnInit { 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 1c87a8783..8112fc017 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 @@ -4,6 +4,7 @@ import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-federation-wallet', templateUrl: './federation-wallet.component.html', + standalone: false, styleUrls: ['./federation-wallet.component.scss'] }) export class FederationWalletComponent implements OnInit { 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 f11e03a28..64474b31f 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 @@ -12,6 +12,7 @@ import { SeoService } from '@app/services/seo.service'; selector: 'app-recent-pegs-list', templateUrl: './recent-pegs-list.component.html', styleUrls: ['./recent-pegs-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class RecentPegsListComponent implements OnInit { 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 29033b848..25b719bd0 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 @@ -6,6 +6,7 @@ import { PegsVolume } from '@interfaces/node-api.interface'; selector: 'app-recent-pegs-stats', templateUrl: './recent-pegs-stats.component.html', styleUrls: ['./recent-pegs-stats.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class RecentPegsStatsComponent implements OnInit { diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.ts index e2574b686..0c59e7174 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.ts @@ -5,6 +5,7 @@ import { Observable, map } from 'rxjs'; selector: 'app-reserves-ratio-stats', templateUrl: './reserves-ratio-stats.component.html', styleUrls: ['./reserves-ratio-stats.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ReservesRatioStatsComponent implements OnInit { 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 770940325..554521c16 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 @@ -7,6 +7,7 @@ import { CurrentPegs } from '@interfaces/node-api.interface'; selector: 'app-reserves-ratio', templateUrl: './reserves-ratio.component.html', styleUrls: ['./reserves-ratio.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ReservesRatioComponent implements OnInit, OnChanges { 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 97d1b3da0..4b66d5f4a 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 @@ -7,6 +7,7 @@ import { CurrentPegs } from '@interfaces/node-api.interface'; selector: 'app-reserves-supply-stats', templateUrl: './reserves-supply-stats.component.html', styleUrls: ['./reserves-supply-stats.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ReservesSupplyStatsComponent implements OnInit { 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 9cdb0bd06..58ebf0a34 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts @@ -8,6 +8,7 @@ import { WebsocketService } from '@app/services/websocket.service'; selector: 'app-loading-indicator', templateUrl: './loading-indicator.component.html', styleUrls: ['./loading-indicator.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class LoadingIndicatorComponent implements OnInit { 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 c9db2b143..ab03fe120 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 @@ -8,6 +8,7 @@ import { EnterpriseService } from '@app/services/enterprise.service'; selector: 'app-master-page-preview', templateUrl: './master-page-preview.component.html', styleUrls: ['./master-page-preview.component.scss'], + standalone: false, }) export class MasterPagePreviewComponent implements OnInit { network$: Observable; 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 07883475b..416c5c0d1 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 @@ -6,6 +6,7 @@ import { Observable, merge, of } from 'rxjs'; selector: 'app-preview-title', templateUrl: './preview-title.component.html', styleUrls: [], + standalone: false, }) export class PreviewTitleComponent implements OnInit { network$: Observable; diff --git a/frontend/src/app/components/master-page/master-page.component.ts b/frontend/src/app/components/master-page/master-page.component.ts index d8f7edda4..33d9882f8 100644 --- a/frontend/src/app/components/master-page/master-page.component.ts +++ b/frontend/src/app/components/master-page/master-page.component.ts @@ -12,6 +12,7 @@ import { StorageService } from '@app/services/storage.service'; selector: 'app-master-page', templateUrl: './master-page.component.html', styleUrls: ['./master-page.component.scss'], + standalone: false, }) export class MasterPageComponent implements OnInit, OnDestroy { @Input() headerVisible = true; diff --git a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts index a46be2733..7ab34908b 100644 --- a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts +++ b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts @@ -16,6 +16,7 @@ import { FilterMode, GradientMode } from '@app/shared/filters.utils'; selector: 'app-mempool-block-overview', templateUrl: './mempool-block-overview.component.html', changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class MempoolBlockOverviewComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit { @Input() index: number; diff --git a/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts b/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts index 4d2a21064..2e28483ad 100644 --- a/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts +++ b/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts @@ -21,7 +21,8 @@ function bestFitResolution(min, max, n): number { @Component({ selector: 'app-mempool-block-view', templateUrl: './mempool-block-view.component.html', - styleUrls: ['./mempool-block-view.component.scss'] + styleUrls: ['./mempool-block-view.component.scss'], + standalone: false, }) export class MempoolBlockViewComponent implements OnInit, OnDestroy { autofit: boolean = false; diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.ts b/frontend/src/app/components/mempool-block/mempool-block.component.ts index 029f9c616..6b6bfc758 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.ts +++ b/frontend/src/app/components/mempool-block/mempool-block.component.ts @@ -14,6 +14,7 @@ import { WebsocketService } from '@app/services/websocket.service'; selector: 'app-mempool-block', templateUrl: './mempool-block.component.html', styleUrls: ['./mempool-block.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class MempoolBlockComponent implements OnInit, OnDestroy { 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 3e429fa9f..8617a4bb1 100644 --- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts +++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts @@ -23,6 +23,7 @@ import { ThemeService } from '@app/services/theme.service'; animate('2s 0s ease', style({ transform: '' })), ]), ])], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { 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 3de592cc2..68c5fb9f9 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -21,6 +21,7 @@ import { download, formatterXAxis, formatterXAxisLabel } from '@app/shared/graph z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class MempoolGraphComponent implements OnInit, OnChanges { diff --git a/frontend/src/app/components/menu/menu.component.ts b/frontend/src/app/components/menu/menu.component.ts index 278ec46a1..dadf15ecc 100644 --- a/frontend/src/app/components/menu/menu.component.ts +++ b/frontend/src/app/components/menu/menu.component.ts @@ -10,7 +10,8 @@ import { AuthServiceMempool } from '@app/services/auth.service'; @Component({ selector: 'app-menu', templateUrl: './menu.component.html', - styleUrls: ['./menu.component.scss'] + styleUrls: ['./menu.component.scss'], + standalone: false, }) export class MenuComponent implements OnInit, OnDestroy { 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 464866c40..b9f15f29c 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts @@ -9,6 +9,7 @@ import { EventType, NavigationStart, Router } from '@angular/router'; selector: 'app-mining-dashboard', templateUrl: './mining-dashboard.component.html', styleUrls: ['./mining-dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class MiningDashboardComponent implements OnInit, AfterViewInit { 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 bc835b4d2..766813247 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 @@ -40,6 +40,7 @@ const MULTISELECT_VALUE_ACCESSOR: any = { templateUrl: './ngx-bootstrap-multiselect.component.html', styleUrls: ['./ngx-bootstrap-multiselect.component.css'], providers: [MULTISELECT_VALUE_ACCESSOR, MultiSelectSearchFilter], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class NgxDropdownMultiselectComponent implements OnInit, diff --git a/frontend/src/app/components/ngx-bootstrap-multiselect/off-click.directive.ts b/frontend/src/app/components/ngx-bootstrap-multiselect/off-click.directive.ts index 6620c436c..bbb18a312 100644 --- a/frontend/src/app/components/ngx-bootstrap-multiselect/off-click.directive.ts +++ b/frontend/src/app/components/ngx-bootstrap-multiselect/off-click.directive.ts @@ -5,6 +5,7 @@ import { Output } from '@angular/core'; @Directive({ // tslint:disable-next-line:directive-selector selector: '[offClick]', + standalone: false, }) export class OffClickDirective { 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 8c9232501..f09eb5241 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 @@ -6,7 +6,8 @@ interface StringHashMap { } @Pipe({ - name: 'searchFilter' + name: 'searchFilter', + standalone: false, }) export class MultiSelectSearchFilter implements PipeTransform { diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 4c0318718..b1de98ace 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -6,6 +6,7 @@ import { Inscription } from '@app/shared/ord/inscription.utils'; selector: 'app-ord-data', templateUrl: './ord-data.component.html', styleUrls: ['./ord-data.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class OrdDataComponent implements OnChanges { 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 9dd50c6ca..afb653326 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -17,6 +17,7 @@ import { isMobile } from '@app/shared/common.utils'; selector: 'app-pool-ranking', templateUrl: './pool-ranking.component.html', styleUrls: ['./pool-ranking.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class PoolRankingComponent implements OnInit { diff --git a/frontend/src/app/components/pool/pool-preview.component.ts b/frontend/src/app/components/pool/pool-preview.component.ts index 7478e5f6f..7320eb1bb 100644 --- a/frontend/src/app/components/pool/pool-preview.component.ts +++ b/frontend/src/app/components/pool/pool-preview.component.ts @@ -14,6 +14,7 @@ import { OpenGraphService } from '@app/services/opengraph.service'; selector: 'app-pool-preview', templateUrl: './pool-preview.component.html', styleUrls: ['./pool-preview.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class PoolPreviewComponent implements OnInit { diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index ca65ead56..7035d7c0f 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -23,6 +23,7 @@ interface AccelerationTotal { selector: 'app-pool', templateUrl: './pool.component.html', styleUrls: ['./pool.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class PoolComponent implements OnInit { diff --git a/frontend/src/app/components/price-chart/price-chart.component.ts b/frontend/src/app/components/price-chart/price-chart.component.ts index 446fb947c..ca0f0256d 100644 --- a/frontend/src/app/components/price-chart/price-chart.component.ts +++ b/frontend/src/app/components/price-chart/price-chart.component.ts @@ -26,6 +26,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class PriceChartComponent implements OnInit { diff --git a/frontend/src/app/components/privacy-policy/privacy-policy.component.ts b/frontend/src/app/components/privacy-policy/privacy-policy.component.ts index 339028cd2..77d2a995a 100644 --- a/frontend/src/app/components/privacy-policy/privacy-policy.component.ts +++ b/frontend/src/app/components/privacy-policy/privacy-policy.component.ts @@ -6,7 +6,8 @@ import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-privacy-policy', templateUrl: './privacy-policy.component.html', - styleUrls: ['./privacy-policy.component.scss'] + styleUrls: ['./privacy-policy.component.scss'], + standalone: false, }) export class PrivacyPolicyComponent { officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; 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 6ef2cf587..05ab8bd30 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -12,7 +12,8 @@ import { TxResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-push-transaction', templateUrl: './push-transaction.component.html', - styleUrls: ['./push-transaction.component.scss'] + styleUrls: ['./push-transaction.component.scss'], + standalone: false, }) export class PushTransactionComponent implements OnInit { pushTxForm: UntypedFormGroup; diff --git a/frontend/src/app/components/qrcode/qrcode.component.ts b/frontend/src/app/components/qrcode/qrcode.component.ts index 061625eed..3b6dcee91 100644 --- a/frontend/src/app/components/qrcode/qrcode.component.ts +++ b/frontend/src/app/components/qrcode/qrcode.component.ts @@ -6,6 +6,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-qrcode', templateUrl: './qrcode.component.html', styleUrls: ['./qrcode.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class QrcodeComponent implements AfterViewInit { 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 5e6b324bf..b17fc34ab 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 @@ -8,6 +8,7 @@ import { Subscription } from 'rxjs'; selector: 'app-rate-unit-selector', templateUrl: './rate-unit-selector.component.html', styleUrls: ['./rate-unit-selector.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class RateUnitSelectorComponent implements OnInit, OnDestroy { 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 d835b4a59..479d52fde 100644 --- a/frontend/src/app/components/rbf-list/rbf-list.component.ts +++ b/frontend/src/app/components/rbf-list/rbf-list.component.ts @@ -14,6 +14,7 @@ import { seoDescriptionNetwork } from '@app/shared/common.utils'; selector: 'app-rbf-list', templateUrl: './rbf-list.component.html', styleUrls: ['./rbf-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class RbfList implements OnInit, OnDestroy { 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 3368eeaf3..37d5792b2 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 @@ -5,6 +5,7 @@ import { RbfTree } from '@interfaces/node-api.interface'; selector: 'app-rbf-timeline-tooltip', templateUrl: './rbf-timeline-tooltip.component.html', styleUrls: ['./rbf-timeline-tooltip.component.scss'], + standalone: false, }) export class RbfTimelineTooltipComponent implements OnChanges { @Input() rbfInfo: RbfTree | null; 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 8bf5a0694..909d57549 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts @@ -21,6 +21,7 @@ function isTimelineCell(val: RbfTree | TimelineCell): boolean { selector: 'app-rbf-timeline', templateUrl: './rbf-timeline.component.html', styleUrls: ['./rbf-timeline.component.scss'], + standalone: false, }) export class RbfTimelineComponent implements OnInit, OnChanges { @Input() replacements: RbfTree; 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 34dc55222..b935672f2 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.ts +++ b/frontend/src/app/components/reward-stats/reward-stats.component.ts @@ -9,6 +9,7 @@ import { StateService } from '@app/services/state.service'; templateUrl: './reward-stats.component.html', styleUrls: ['./reward-stats.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, + standalone: false, }) export class RewardStatsComponent implements OnInit { public $rewardStats: Observable; 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 c0654c372..4e3656df3 100644 --- a/frontend/src/app/components/search-form/search-form.component.ts +++ b/frontend/src/app/components/search-form/search-form.component.ts @@ -15,6 +15,7 @@ import { Network, findOtherNetworks, getRegex, getTargetUrl, needBaseModuleChang selector: 'app-search-form', templateUrl: './search-form.component.html', styleUrls: ['./search-form.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class SearchFormComponent implements OnInit { 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 6a4efcd87..cd662faea 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 @@ -5,6 +5,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-search-results', templateUrl: './search-results.component.html', styleUrls: ['./search-results.component.scss'], + standalone: false, }) export class SearchResultsComponent implements OnChanges { @Input() results: any = {}; 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 63f9f952b..1db4bd91a 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -9,6 +9,7 @@ import { DomSanitizer } from '@angular/platform-browser'; selector: 'app-server-health', templateUrl: './server-health.component.html', styleUrls: ['./server-health.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ServerHealthComponent implements OnInit { 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 7941d326d..baa82e437 100644 --- a/frontend/src/app/components/server-health/server-status.component.ts +++ b/frontend/src/app/components/server-health/server-status.component.ts @@ -9,6 +9,7 @@ import { DomSanitizer } from '@angular/platform-browser'; selector: 'app-server-status', templateUrl: './server-status.component.html', styleUrls: ['./server-status.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ServerStatusComponent implements OnInit, OnDestroy { diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts index 87d8836a2..b7b0c9a4e 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts @@ -20,6 +20,7 @@ export type SortDirection = 'asc' | 'desc'; selector: 'app-simpleproof-cubo-widget', templateUrl: './simpleproof-cubo-widget.component.html', styleUrls: ['./simpleproof-widget.component.scss'], + standalone: false, }) export class SimpleProofCuboWidgetComponent implements OnChanges { @Input() key: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof_cubo')?.props?.key ?? ''; diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts index 6cfa31bdb..401eae2a6 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.ts @@ -19,6 +19,7 @@ export interface SimpleProof { selector: 'app-simpleproof-widget', templateUrl: './simpleproof-widget.component.html', styleUrls: ['./simpleproof-widget.component.scss'], + standalone: false, }) export class SimpleProofWidgetComponent implements OnChanges { @Input() key: string = window['__env']?.customize?.dashboard.widgets?.find(w => w.component ==='simpleproof')?.props?.key ?? ''; diff --git a/frontend/src/app/components/stale-list/stale-list.component.ts b/frontend/src/app/components/stale-list/stale-list.component.ts index 8aa7d421a..d3e659008 100644 --- a/frontend/src/app/components/stale-list/stale-list.component.ts +++ b/frontend/src/app/components/stale-list/stale-list.component.ts @@ -11,6 +11,7 @@ import { seoDescriptionNetwork } from '@app/shared/common.utils'; selector: 'app-stale-list', templateUrl: './stale-list.component.html', styleUrls: ['./stale-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class StaleList implements OnInit { diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 16ceab5c8..0bc0fd212 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -10,6 +10,7 @@ import { handleDemoRedirect } from '@app/shared/common.utils'; selector: 'app-start', templateUrl: './start.component.html', styleUrls: ['./start.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 80f92705b..b63b9191c 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -18,7 +18,8 @@ import { IncomingTransactionsGraphComponent } from '@components/incoming-transac @Component({ selector: 'app-statistics', templateUrl: './statistics.component.html', - styleUrls: ['./statistics.component.scss'] + styleUrls: ['./statistics.component.scss'], + standalone: false, }) export class StatisticsComponent implements OnInit { @ViewChild('mempoolgraph') mempoolGraph: MempoolGraphComponent; 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 4a9a75fec..aeda78672 100644 --- a/frontend/src/app/components/status-view/status-view.component.ts +++ b/frontend/src/app/components/status-view/status-view.component.ts @@ -3,7 +3,8 @@ import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-status-view', - templateUrl: './status-view.component.html' + templateUrl: './status-view.component.html', + standalone: false, }) export class StatusViewComponent implements OnInit { constructor( diff --git a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts index be8cf3a8f..36cefa443 100644 --- a/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts +++ b/frontend/src/app/components/stratum/stratum-list/stratum-list.component.ts @@ -66,6 +66,7 @@ function getMerkleBranchIds(merkleBranches: string[], numBranches: number, poolI selector: 'app-stratum-list', templateUrl: './stratum-list.component.html', styleUrls: ['./stratum-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class StratumList implements OnInit, OnDestroy { diff --git a/frontend/src/app/components/svg-images/svg-images.component.ts b/frontend/src/app/components/svg-images/svg-images.component.ts index ab58cf350..d274391a7 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.ts +++ b/frontend/src/app/components/svg-images/svg-images.component.ts @@ -4,6 +4,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; selector: 'app-svg-images', templateUrl: './svg-images.component.html', styleUrls: ['./svg-images.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class SvgImagesComponent { diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 93ee54a31..66c9d4c58 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -32,6 +32,7 @@ interface LeafNode { selector: 'app-taproot-address-scripts', templateUrl: './taproot-address-scripts.component.html', styleUrls: ['./taproot-address-scripts.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TaprootAddressScriptsComponent implements OnChanges { 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 5eb90c0d9..9877ba0ec 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 @@ -5,7 +5,8 @@ import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-terms-of-service', - templateUrl: './terms-of-service.component.html' + templateUrl: './terms-of-service.component.html', + standalone: false, }) export class TermsOfServiceComponent { officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; 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 22a0951ea..8650f7a79 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.ts +++ b/frontend/src/app/components/test-transactions/test-transactions.component.ts @@ -9,7 +9,8 @@ import { TestMempoolAcceptResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-test-transactions', templateUrl: './test-transactions.component.html', - styleUrls: ['./test-transactions.component.scss'] + styleUrls: ['./test-transactions.component.scss'], + standalone: false, }) export class TestTransactionsComponent implements OnInit { testTxsForm: UntypedFormGroup; 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 ca9c5788d..1116cbbee 100644 --- a/frontend/src/app/components/theme-selector/theme-selector.component.ts +++ b/frontend/src/app/components/theme-selector/theme-selector.component.ts @@ -7,6 +7,7 @@ import { Subscription } from 'rxjs'; selector: 'app-theme-selector', templateUrl: './theme-selector.component.html', styleUrls: ['./theme-selector.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class ThemeSelectorComponent implements OnInit { diff --git a/frontend/src/app/components/time/time.component.ts b/frontend/src/app/components/time/time.component.ts index 9ae893d74..c5dbf1895 100644 --- a/frontend/src/app/components/time/time.component.ts +++ b/frontend/src/app/components/time/time.component.ts @@ -5,6 +5,7 @@ import { TimeService } from '@app/services/time.service'; @Component({ selector: 'app-time', templateUrl: './time.component.html', + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TimeComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/timezone-selector/timezone-selector.component.ts b/frontend/src/app/components/timezone-selector/timezone-selector.component.ts index 44c04354e..4aeae09bb 100644 --- a/frontend/src/app/components/timezone-selector/timezone-selector.component.ts +++ b/frontend/src/app/components/timezone-selector/timezone-selector.component.ts @@ -9,6 +9,7 @@ import { timezones } from '@app/app.constants'; selector: 'app-timezone-selector', templateUrl: './timezone-selector.component.html', styleUrls: ['./timezone-selector.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TimezoneSelectorComponent implements OnInit { diff --git a/frontend/src/app/components/tracker/tracker-bar.component.ts b/frontend/src/app/components/tracker/tracker-bar.component.ts index bb073f557..4aa3f4e99 100644 --- a/frontend/src/app/components/tracker/tracker-bar.component.ts +++ b/frontend/src/app/components/tracker/tracker-bar.component.ts @@ -6,6 +6,7 @@ export type TrackerStage = 'waiting' | 'pending' | 'soon' | 'next' | 'confirmed' selector: 'app-tracker-bar', templateUrl: './tracker-bar.component.html', styleUrls: ['./tracker-bar.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TrackerBarComponent implements OnInit, OnChanges { diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 185fcddc2..3c7ac3911 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -56,6 +56,7 @@ interface AuditStatus { selector: 'app-tracker', templateUrl: './tracker.component.html', styleUrls: ['./tracker.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TrackerComponent implements OnInit, OnDestroy { 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 d27848c55..61a5f7895 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.component.ts +++ b/frontend/src/app/components/trademark-policy/trademark-policy.component.ts @@ -6,7 +6,8 @@ import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-trademark-policy', templateUrl: './trademark-policy.component.html', - styleUrls: ['./trademark-policy.component.scss'] + styleUrls: ['./trademark-policy.component.scss'], + standalone: false, }) export class TrademarkPolicyComponent { officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; diff --git a/frontend/src/app/components/transaction/cpfp-info.component.ts b/frontend/src/app/components/transaction/cpfp-info.component.ts index 3d122183b..8407e0b22 100644 --- a/frontend/src/app/components/transaction/cpfp-info.component.ts +++ b/frontend/src/app/components/transaction/cpfp-info.component.ts @@ -6,6 +6,7 @@ import { Transaction } from '@interfaces/electrs.interface'; selector: 'app-cpfp-info', templateUrl: './cpfp-info.component.html', styleUrls: ['./cpfp-info.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class CpfpInfoComponent implements OnInit { 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 index c6260da48..0b15072cf 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts @@ -11,6 +11,7 @@ import { Filter } from '@app/shared/filters.utils'; selector: 'app-transaction-details', templateUrl: './transaction-details.component.html', styleUrls: ['./transaction-details.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TransactionDetailsComponent implements OnInit { diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 4746f9de7..79b001f8b 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -23,6 +23,7 @@ import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; selector: 'app-transaction-preview', templateUrl: './transaction-preview.component.html', styleUrls: ['./transaction-preview.component.scss'], + standalone: false, }) export class TransactionPreviewComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index dd41639c6..e12e97f47 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -21,6 +21,7 @@ import { CpfpInfo } from '@interfaces/node-api.interface'; selector: 'app-transaction-raw', templateUrl: './transaction-raw.component.html', styleUrls: ['./transaction-raw.component.scss'], + standalone: false, }) export class TransactionRawComponent implements OnInit, OnDestroy { diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index fb59e8256..8971c6b6c 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -61,6 +61,7 @@ export interface TxAuditStatus { selector: 'app-transaction', templateUrl: './transaction.component.html', styleUrls: ['./transaction.component.scss'], + standalone: false, }) export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 32e00b177..2ecd9dca2 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -23,6 +23,7 @@ import { SighashFlag } from '@app/shared/transaction.utils'; selector: 'app-transactions-list', templateUrl: './transactions-list.component.html', styleUrls: ['./transactions-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts index 0adf52489..e6bd0bbb6 100644 --- a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts +++ b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts @@ -19,6 +19,7 @@ interface SupplyShare { selector: 'app-treasuries-supply', templateUrl: './treasuries-supply.component.html', styleUrls: ['./treasuries-supply.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TreasuriesSupplyComponent implements OnInit, OnDestroy { diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index ef6281b6d..1cb6bdb30 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -36,6 +36,7 @@ const periodSeconds = { z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index 88bd548c1..917272758 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -14,6 +14,7 @@ import { Treasury } from '@interfaces/node-api.interface'; selector: 'app-treasuries-pie', templateUrl: './treasuries-pie.component.html', styleUrls: ['./treasuries-pie.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TreasuriesPieComponent implements OnChanges { diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index 75fc170b5..a6e9a7d8e 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -11,7 +11,8 @@ import { Treasury } from '@interfaces/node-api.interface'; @Component({ selector: 'app-treasuries', templateUrl: './treasuries.component.html', - styleUrls: ['./treasuries.component.scss'] + styleUrls: ['./treasuries.component.scss'], + standalone: false, }) export class TreasuriesComponent implements OnInit, OnDestroy { treasuries: Treasury[] = []; diff --git a/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts index c2a2ee967..d3d395fee 100644 --- a/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts +++ b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts @@ -19,6 +19,7 @@ interface VerifyShare { selector: 'app-treasuries-verify-progress', templateUrl: './treasuries-verify.component.html', styleUrls: ['./treasuries-verify.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TreasuriesVerifyProgressComponent implements OnInit, OnDestroy { diff --git a/frontend/src/app/components/twitter-login/twitter-login.component.ts b/frontend/src/app/components/twitter-login/twitter-login.component.ts index f9a72ab54..a1202437d 100644 --- a/frontend/src/app/components/twitter-login/twitter-login.component.ts +++ b/frontend/src/app/components/twitter-login/twitter-login.component.ts @@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'app-twitter-login', templateUrl: './twitter-login.component.html', + standalone: false, }) export class TwitterLogin { @Input() width: string | null = null; diff --git a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts index 0890c2135..361fb49fa 100644 --- a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts +++ b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts @@ -6,6 +6,7 @@ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; selector: 'app-twitter-widget', templateUrl: './twitter-widget.component.html', styleUrls: ['./twitter-widget.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TwitterWidgetComponent implements OnChanges { diff --git a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts index 6f4e69be6..ad2d7a299 100644 --- a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts @@ -30,6 +30,7 @@ interface Xput { selector: 'app-tx-bowtie-graph-tooltip', templateUrl: './tx-bowtie-graph-tooltip.component.html', styleUrls: ['./tx-bowtie-graph-tooltip.component.scss'], + standalone: false, }) export class TxBowtieGraphTooltipComponent implements OnChanges { @Input() line: Xput | void; diff --git a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts index 6720bbd2e..aa5fe80a2 100644 --- a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts @@ -42,6 +42,7 @@ interface Xput { selector: 'tx-bowtie-graph', templateUrl: './tx-bowtie-graph.component.html', styleUrls: ['./tx-bowtie-graph.component.scss'], + standalone: false, }) export class TxBowtieGraphComponent implements OnInit, OnChanges { @Input() tx: Transaction; diff --git a/frontend/src/app/components/tx-features/tx-features.component.ts b/frontend/src/app/components/tx-features/tx-features.component.ts index 8cda2bfdf..a1ba15b42 100644 --- a/frontend/src/app/components/tx-features/tx-features.component.ts +++ b/frontend/src/app/components/tx-features/tx-features.component.ts @@ -7,6 +7,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-tx-features', templateUrl: './tx-features.component.html', styleUrls: ['./tx-features.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TxFeaturesComponent implements OnChanges { diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts index 10ade165e..83231ded3 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts @@ -9,6 +9,7 @@ import { CacheService } from '@app/services/cache.service'; selector: 'app-tx-fee-rating', templateUrl: './tx-fee-rating.component.html', styleUrls: ['./tx-fee-rating.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy { diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index ebcad891c..00b119086 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -54,6 +54,7 @@ function sortedInsert(positions: { c1: Circle, c2: Circle, d: number, p: number, z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class UtxoGraphComponent implements OnChanges, OnDestroy { diff --git a/frontend/src/app/components/wallet/wallet-preview.component.ts b/frontend/src/app/components/wallet/wallet-preview.component.ts index a88465261..b19a84021 100644 --- a/frontend/src/app/components/wallet/wallet-preview.component.ts +++ b/frontend/src/app/components/wallet/wallet-preview.component.ts @@ -101,7 +101,8 @@ class WalletStats implements ChainStats { @Component({ selector: 'app-wallet-preview', templateUrl: './wallet-preview.component.html', - styleUrls: ['./wallet-preview.component.scss'] + styleUrls: ['./wallet-preview.component.scss'], + standalone: false, }) export class WalletPreviewComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index 7df5ef695..d64faaab7 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -17,7 +17,8 @@ import { WalletStats } from '@app/shared/wallet-stats'; @Component({ selector: 'app-wallet', templateUrl: './wallet.component.html', - styleUrls: ['./wallet.component.scss'] + styleUrls: ['./wallet.component.scss'], + standalone: false, }) export class WalletComponent implements OnInit, OnDestroy { network = ''; diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index c5c35dce5..d1fc4cf78 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -31,6 +31,7 @@ interface MempoolStatsData { selector: 'app-dashboard', templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { diff --git a/frontend/src/app/data-cy.directive.ts b/frontend/src/app/data-cy.directive.ts index 7bee94346..e3e3732fd 100644 --- a/frontend/src/app/data-cy.directive.ts +++ b/frontend/src/app/data-cy.directive.ts @@ -2,7 +2,8 @@ import { Directive, ElementRef, Renderer2 } from '@angular/core'; import { environment } from '@environments/environment'; @Directive({ - selector: '[data-cy]' + selector: '[data-cy]', + standalone: false, }) export class DataCyDirective { constructor(private el: ElementRef, private renderer: Renderer2) { 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 c3640dfe3..f83c72dc5 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 @@ -8,7 +8,8 @@ import { faqData } from '@app/docs/api-docs/api-docs-data'; @Component({ selector: 'app-api-docs-nav', templateUrl: './api-docs-nav.component.html', - styleUrls: ['./api-docs-nav.component.scss'] + styleUrls: ['./api-docs-nav.component.scss'], + standalone: false, }) export class ApiDocsNavComponent implements OnInit { 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 7fed8c53b..cd084ee4f 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs.component.ts @@ -9,7 +9,8 @@ import { FaqTemplateDirective } from '@app/docs/faq-template/faq-template.compon @Component({ selector: 'app-api-docs', templateUrl: './api-docs.component.html', - styleUrls: ['./api-docs.component.scss'] + styleUrls: ['./api-docs.component.scss'], + standalone: false, }) export class ApiDocsComponent implements OnInit, AfterViewInit { private destroy$: Subject = new Subject(); 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 f112e23f3..2c227d3e8 100644 --- a/frontend/src/app/docs/code-template/code-template.component.ts +++ b/frontend/src/app/docs/code-template/code-template.component.ts @@ -4,7 +4,8 @@ import { Env, StateService } from '@app/services/state.service'; @Component({ selector: 'app-code-template', templateUrl: './code-template.component.html', - styleUrls: ['./code-template.component.scss'] + styleUrls: ['./code-template.component.scss'], + standalone: false, }) export class CodeTemplateComponent implements OnInit { @Input() network: string; diff --git a/frontend/src/app/docs/docs/docs.component.ts b/frontend/src/app/docs/docs/docs.component.ts index 6d3ff4723..35b01be0e 100644 --- a/frontend/src/app/docs/docs/docs.component.ts +++ b/frontend/src/app/docs/docs/docs.component.ts @@ -8,7 +8,8 @@ import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-docs', templateUrl: './docs.component.html', - styleUrls: ['./docs.component.scss'] + styleUrls: ['./docs.component.scss'], + standalone: false, }) export class DocsComponent implements OnInit { diff --git a/frontend/src/app/docs/faq-template/faq-template.component.ts b/frontend/src/app/docs/faq-template/faq-template.component.ts index cf838f681..2564c4622 100644 --- a/frontend/src/app/docs/faq-template/faq-template.component.ts +++ b/frontend/src/app/docs/faq-template/faq-template.component.ts @@ -1,7 +1,8 @@ import { Directive, Input, TemplateRef } from '@angular/core'; @Directive({ - selector: 'ng-template[type]' + selector: 'ng-template[type]', + standalone: false, }) export class FaqTemplateDirective { @Input() type: string; diff --git a/frontend/src/app/fiat/fiat.component.ts b/frontend/src/app/fiat/fiat.component.ts index 95f019723..c901421af 100644 --- a/frontend/src/app/fiat/fiat.component.ts +++ b/frontend/src/app/fiat/fiat.component.ts @@ -7,6 +7,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-fiat', templateUrl: './fiat.component.html', styleUrls: [], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class FiatComponent implements OnInit, OnDestroy { diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index de3f816d4..6d21258af 100644 --- a/frontend/src/app/graphs/echarts.ts +++ b/frontend/src/app/graphs/echarts.ts @@ -4,7 +4,8 @@ import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, GraphicComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; // Typescript interfaces -import { EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption } from 'echarts'; +import type { EChartsCoreOption } from 'echarts/core'; +import type { TreemapSeriesOption, LineSeriesOption, PieSeriesOption } from 'echarts/charts'; echarts.use([ @@ -15,4 +16,4 @@ echarts.use([ LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, CustomChart, GraphicComponent, TreeChart ]); -export { echarts, EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption }; \ No newline at end of file +export { echarts, EChartsCoreOption as EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption }; diff --git a/frontend/src/app/lightning/channel/channel-box/channel-box.component.ts b/frontend/src/app/lightning/channel/channel-box/channel-box.component.ts index f6f735f56..eb8735f44 100644 --- a/frontend/src/app/lightning/channel/channel-box/channel-box.component.ts +++ b/frontend/src/app/lightning/channel/channel-box/channel-box.component.ts @@ -4,6 +4,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; selector: 'app-channel-box', templateUrl: './channel-box.component.html', styleUrls: ['./channel-box.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelBoxComponent { diff --git a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.ts b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.ts index ef42464eb..b44b6425e 100644 --- a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.ts +++ b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.ts @@ -4,6 +4,7 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } f selector: 'app-channel-close-box', templateUrl: './channel-close-box.component.html', styleUrls: ['./channel-close-box.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelCloseBoxComponent implements OnChanges { diff --git a/frontend/src/app/lightning/channel/channel-preview.component.ts b/frontend/src/app/lightning/channel/channel-preview.component.ts index 2af0dcd57..8cffeedf3 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.ts +++ b/frontend/src/app/lightning/channel/channel-preview.component.ts @@ -10,6 +10,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-channel-preview', templateUrl: './channel-preview.component.html', styleUrls: ['./channel-preview.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelPreviewComponent implements OnInit { diff --git a/frontend/src/app/lightning/channel/channel.component.ts b/frontend/src/app/lightning/channel/channel.component.ts index 501fc74f6..19254a5e1 100644 --- a/frontend/src/app/lightning/channel/channel.component.ts +++ b/frontend/src/app/lightning/channel/channel.component.ts @@ -11,6 +11,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-channel', templateUrl: './channel.component.html', styleUrls: ['./channel.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelComponent implements OnInit { diff --git a/frontend/src/app/lightning/channel/closing-type/closing-type.component.ts b/frontend/src/app/lightning/channel/closing-type/closing-type.component.ts index b6313250f..541011469 100644 --- a/frontend/src/app/lightning/channel/closing-type/closing-type.component.ts +++ b/frontend/src/app/lightning/channel/closing-type/closing-type.component.ts @@ -4,6 +4,7 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@a selector: 'app-closing-type', templateUrl: './closing-type.component.html', styleUrls: ['./closing-type.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ClosingTypeComponent implements OnChanges { 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 3439bb2b4..a7a083278 100644 --- a/frontend/src/app/lightning/channels-list/channels-list.component.ts +++ b/frontend/src/app/lightning/channels-list/channels-list.component.ts @@ -9,6 +9,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-channels-list', templateUrl: './channels-list.component.html', styleUrls: ['./channels-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelsListComponent implements OnInit, OnChanges { 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 ee3e13d10..f7d509c16 100644 --- a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts +++ b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts @@ -6,6 +6,7 @@ import { INodesStatistics } from '@interfaces/node-api.interface'; selector: 'app-channels-statistics', templateUrl: './channels-statistics.component.html', styleUrls: ['./channels-statistics.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ChannelsStatisticsComponent implements OnInit { diff --git a/frontend/src/app/lightning/group/group-preview.component.ts b/frontend/src/app/lightning/group/group-preview.component.ts index 4e7d56bbe..71b917a09 100644 --- a/frontend/src/app/lightning/group/group-preview.component.ts +++ b/frontend/src/app/lightning/group/group-preview.component.ts @@ -14,7 +14,8 @@ interface NodeGroup { @Component({ selector: 'app-group-preview', templateUrl: './group-preview.component.html', - styleUrls: ['./group-preview.component.scss'] + styleUrls: ['./group-preview.component.scss'], + standalone: false, }) export class GroupPreviewComponent implements OnInit { nodes$: Observable; diff --git a/frontend/src/app/lightning/group/group.component.ts b/frontend/src/app/lightning/group/group.component.ts index 76f9ef080..fdc689c11 100644 --- a/frontend/src/app/lightning/group/group.component.ts +++ b/frontend/src/app/lightning/group/group.component.ts @@ -8,7 +8,8 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-group', templateUrl: './group.component.html', - styleUrls: ['./group.component.scss'] + styleUrls: ['./group.component.scss'], + standalone: false, }) export class GroupComponent implements OnInit { nodes$: Observable; 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 e075aed93..0fc607dff 100644 --- a/frontend/src/app/lightning/justice-list/justice-list.component.ts +++ b/frontend/src/app/lightning/justice-list/justice-list.component.ts @@ -9,6 +9,7 @@ import { ElectrsApiService } from '@app/services/electrs-api.service'; selector: 'app-justice-list', templateUrl: './justice-list.component.html', styleUrls: ['./justice-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class JusticeList implements OnInit, OnDestroy { 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 47b7700a4..e243d26d2 100644 --- a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts +++ b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts @@ -11,6 +11,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-lightning-dashboard', templateUrl: './lightning-dashboard.component.html', styleUrls: ['./lightning-dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class LightningDashboardComponent implements OnInit, AfterViewInit { 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 220e7eebd..e778f40bc 100644 --- a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts +++ b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts @@ -7,6 +7,7 @@ import { handleDemoRedirect } from '../../shared/common.utils'; selector: 'app-lightning-wrapper', templateUrl: './lightning-wrapper.component.html', styleUrls: ['./lightning-wrapper.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class LightningWrapperComponent implements OnInit { 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 65a12cf38..5d7c74071 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 @@ -11,6 +11,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-node-fee-chart', templateUrl: './node-fee-chart.component.html', styleUrls: ['./node-fee-chart.component.scss'], + standalone: false, styles: [` .loadingGraphs { position: absolute; 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 de9711d01..78fe7bb96 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 @@ -14,6 +14,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-node-statistics-chart', templateUrl: './node-statistics-chart.component.html', styleUrls: ['./node-statistics-chart.component.scss'], + standalone: false, styles: [` .loadingGraphs { position: absolute; 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 a4b061e38..d271a8df7 100644 --- a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts +++ b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts @@ -6,6 +6,7 @@ import { INodesStatistics } from '@interfaces/node-api.interface'; selector: 'app-node-statistics', templateUrl: './node-statistics.component.html', styleUrls: ['./node-statistics.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodeStatisticsComponent implements OnInit { diff --git a/frontend/src/app/lightning/node/node-preview.component.ts b/frontend/src/app/lightning/node/node-preview.component.ts index 7a45ea905..63aecc4ae 100644 --- a/frontend/src/app/lightning/node/node-preview.component.ts +++ b/frontend/src/app/lightning/node/node-preview.component.ts @@ -12,6 +12,7 @@ import { isMobile } from '@app/shared/common.utils'; selector: 'app-node-preview', templateUrl: './node-preview.component.html', styleUrls: ['./node-preview.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodePreviewComponent implements OnInit { diff --git a/frontend/src/app/lightning/node/node.component.ts b/frontend/src/app/lightning/node/node.component.ts index 4ad455dee..a8a2e1851 100644 --- a/frontend/src/app/lightning/node/node.component.ts +++ b/frontend/src/app/lightning/node/node.component.ts @@ -19,6 +19,7 @@ interface CustomRecord { selector: 'app-node', templateUrl: './node.component.html', styleUrls: ['./node.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodeComponent implements OnInit { 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 35d003553..0d7ff06d7 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 @@ -16,6 +16,7 @@ import { lerpColor } from '@app/shared/graphs.utils'; selector: 'app-nodes-channels-map', templateUrl: './nodes-channels-map.component.html', styleUrls: ['./nodes-channels-map.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesChannelsMap implements OnInit { 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 96f74bfed..90876e7f8 100644 --- a/frontend/src/app/lightning/nodes-channels/node-channels.component.ts +++ b/frontend/src/app/lightning/nodes-channels/node-channels.component.ts @@ -13,6 +13,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-node-channels', templateUrl: './node-channels.component.html', styleUrls: ['./node-channels.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodeChannels implements OnChanges { diff --git a/frontend/src/app/lightning/nodes-list/nodes-list.component.ts b/frontend/src/app/lightning/nodes-list/nodes-list.component.ts index 9b9e2d594..799236be1 100644 --- a/frontend/src/app/lightning/nodes-list/nodes-list.component.ts +++ b/frontend/src/app/lightning/nodes-list/nodes-list.component.ts @@ -5,6 +5,7 @@ import { Observable } from 'rxjs'; selector: 'app-nodes-list', templateUrl: './nodes-list.component.html', styleUrls: ['./nodes-list.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesListComponent implements OnInit { 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 c4d56676c..421ca8a61 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts @@ -15,6 +15,7 @@ import { getFlagEmoji } from '@app/shared/common.utils'; selector: 'app-nodes-map', templateUrl: './nodes-map.component.html', styleUrls: ['./nodes-map.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesMap implements OnInit, OnChanges { 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 487dd8920..146e06250 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 @@ -25,6 +25,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesNetworksChartComponent implements OnInit, OnChanges { 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 10d8535b8..5c74f0eeb 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 @@ -15,6 +15,7 @@ import { getFlagEmoji } from '@app/shared/common.utils'; selector: 'app-nodes-per-country-chart', templateUrl: './nodes-per-country-chart.component.html', styleUrls: ['./nodes-per-country-chart.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesPerCountryChartComponent implements OnInit { 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 b2b9e1f5c..213c02408 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 @@ -10,6 +10,7 @@ import { GeolocationData } from '@app/shared/components/geolocation/geolocation. selector: 'app-nodes-per-country', templateUrl: './nodes-per-country.component.html', styleUrls: ['./nodes-per-country.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesPerCountry implements OnInit { 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 76f9cd6ab..460572ea0 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 @@ -15,6 +15,7 @@ import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pip selector: 'app-nodes-per-isp-chart', templateUrl: './nodes-per-isp-chart.component.html', styleUrls: ['./nodes-per-isp-chart.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesPerISPChartComponent implements OnInit { 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 bab34ae8f..78eacccc1 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 @@ -11,6 +11,7 @@ import { GeolocationData } from '@app/shared/components/geolocation/geolocation. selector: 'app-nodes-per-isp-preview', templateUrl: './nodes-per-isp-preview.component.html', styleUrls: ['./nodes-per-isp-preview.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesPerISPPreview implements OnInit { 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 1c8ad3e1b..ad8851942 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 @@ -10,6 +10,7 @@ import { GeolocationData } from '@app/shared/components/geolocation/geolocation. selector: 'app-nodes-per-isp', templateUrl: './nodes-per-isp.component.html', styleUrls: ['./nodes-per-isp.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesPerISP implements OnInit { 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 569bd8827..9d0b2bf77 100644 --- a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts @@ -9,6 +9,7 @@ import { INodesStatistics } from '@interfaces/node-api.interface'; selector: 'app-nodes-ranking', templateUrl: './nodes-ranking.component.html', styleUrls: ['./nodes-ranking.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesRanking implements OnInit { 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 a554341b9..b5cbf0a41 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 @@ -9,6 +9,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-oldest-nodes', templateUrl: './oldest-nodes.component.html', styleUrls: ['./oldest-nodes.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class OldestNodes implements OnInit { 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 24c8757b6..6fb1a45a1 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 @@ -10,6 +10,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-top-nodes-per-capacity', templateUrl: './top-nodes-per-capacity.component.html', styleUrls: ['./top-nodes-per-capacity.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TopNodesPerCapacity implements OnInit { 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 6dbcb9c3e..532cbc50f 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 @@ -10,6 +10,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-top-nodes-per-channels', templateUrl: './top-nodes-per-channels.component.html', styleUrls: ['./top-nodes-per-channels.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TopNodesPerChannels implements OnInit { 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 5561d086e..2e7ced4f7 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 @@ -8,6 +8,7 @@ import { LightningApiService } from '@app/lightning/lightning-api.service'; selector: 'app-nodes-rankings-dashboard', templateUrl: './nodes-rankings-dashboard.component.html', styleUrls: ['./nodes-rankings-dashboard.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesRankingsDashboard implements OnInit { 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 5944e51d8..41245844b 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 @@ -25,6 +25,7 @@ import { StateService } from '@app/services/state.service'; z-index: 99; } `], + standalone: false, }) export class LightningStatisticsChartComponent implements OnInit, OnChanges { @Input() height: number = 150; diff --git a/frontend/src/app/shared/components/address-text/address-text.component.ts b/frontend/src/app/shared/components/address-text/address-text.component.ts index 75a4851da..65ae3006a 100644 --- a/frontend/src/app/shared/components/address-text/address-text.component.ts +++ b/frontend/src/app/shared/components/address-text/address-text.component.ts @@ -4,7 +4,8 @@ import { AddressMatch, AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-text', templateUrl: './address-text.component.html', - styleUrls: ['./address-text.component.scss'] + styleUrls: ['./address-text.component.scss'], + standalone: false, }) export class AddressTextComponent { @Input() address: string; 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 d0ae7a8f1..a6045736d 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 @@ -4,7 +4,8 @@ import { AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-type', templateUrl: './address-type.component.html', - styleUrls: [] + styleUrls: [], + standalone: false, }) export class AddressTypeComponent { @Input() address: AddressTypeInfo; diff --git a/frontend/src/app/shared/components/asm/asm.component.ts b/frontend/src/app/shared/components/asm/asm.component.ts index 9fcb5859e..ba4eb88e7 100644 --- a/frontend/src/app/shared/components/asm/asm.component.ts +++ b/frontend/src/app/shared/components/asm/asm.component.ts @@ -5,6 +5,7 @@ import { SigInfo, SighashLabels } from '@app/shared/transaction.utils'; selector: 'app-asm', templateUrl: './asm.component.html', styleUrls: ['./asm.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush }) export class AsmComponent { diff --git a/frontend/src/app/shared/components/btc/btc.component.ts b/frontend/src/app/shared/components/btc/btc.component.ts index a87be7a4f..e2c4ceb0d 100644 --- a/frontend/src/app/shared/components/btc/btc.component.ts +++ b/frontend/src/app/shared/components/btc/btc.component.ts @@ -5,7 +5,8 @@ import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-btc', templateUrl: './btc.component.html', - styleUrls: ['./btc.component.scss'] + styleUrls: ['./btc.component.scss'], + standalone: false, }) export class BtcComponent implements OnInit, OnChanges { @Input() satoshis: number; diff --git a/frontend/src/app/shared/components/confirmations/confirmations.component.ts b/frontend/src/app/shared/components/confirmations/confirmations.component.ts index d54f80b10..1a6d1c3ce 100644 --- a/frontend/src/app/shared/components/confirmations/confirmations.component.ts +++ b/frontend/src/app/shared/components/confirmations/confirmations.component.ts @@ -5,6 +5,7 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges } from '@angular/c selector: 'app-confirmations', templateUrl: './confirmations.component.html', styleUrls: ['./confirmations.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ConfirmationsComponent implements OnChanges { 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 9a2565cec..857b653c3 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 @@ -5,7 +5,8 @@ import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fee-rate', templateUrl: './fee-rate.component.html', - styleUrls: ['./fee-rate.component.scss'] + styleUrls: ['./fee-rate.component.scss'], + standalone: false, }) export class FeeRateComponent implements OnInit { @Input() fee: number | undefined; diff --git a/frontend/src/app/shared/components/geolocation/geolocation.component.ts b/frontend/src/app/shared/components/geolocation/geolocation.component.ts index 2d9aa684b..2c8e3b8d3 100644 --- a/frontend/src/app/shared/components/geolocation/geolocation.component.ts +++ b/frontend/src/app/shared/components/geolocation/geolocation.component.ts @@ -11,7 +11,8 @@ export interface GeolocationData { @Component({ selector: 'app-geolocation', templateUrl: './geolocation.component.html', - styleUrls: ['./geolocation.component.scss'] + styleUrls: ['./geolocation.component.scss'], + standalone: false, }) export class GeolocationComponent implements OnChanges { @Input() data: GeolocationData; 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 2fad96d24..80729f463 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 @@ -14,6 +14,7 @@ import { EnterpriseService } from '@app/services/enterprise.service'; selector: 'app-global-footer', templateUrl: './global-footer.component.html', styleUrls: ['./global-footer.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class GlobalFooterComponent implements OnInit, OnDestroy, OnChanges { diff --git a/frontend/src/app/shared/components/http-error/http-error.component.ts b/frontend/src/app/shared/components/http-error/http-error.component.ts index 0e4c93e81..fa2ecee5a 100644 --- a/frontend/src/app/shared/components/http-error/http-error.component.ts +++ b/frontend/src/app/shared/components/http-error/http-error.component.ts @@ -4,7 +4,8 @@ import { Component, Input } from '@angular/core'; @Component({ selector: 'app-http-error', templateUrl: './http-error.component.html', - styleUrls: ['./http-error.component.scss'] + styleUrls: ['./http-error.component.scss'], + standalone: false, }) export class HttpErrorComponent { @Input() error: HttpErrorResponse | null; diff --git a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts index 8feedb996..f857b9837 100644 --- a/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts +++ b/frontend/src/app/shared/components/mempool-error/mempool-error.component.ts @@ -43,7 +43,8 @@ export function isMempoolError(error: string) { @Component({ selector: 'app-mempool-error', - templateUrl: './mempool-error.component.html' + templateUrl: './mempool-error.component.html', + standalone: false, }) export class MempoolErrorComponent implements OnInit { @ViewChild('lowBalance', { static: true }) lowBalance!: TemplateRef; diff --git a/frontend/src/app/shared/components/sats/sats.component.ts b/frontend/src/app/shared/components/sats/sats.component.ts index c9fbc741f..9f4136b88 100644 --- a/frontend/src/app/shared/components/sats/sats.component.ts +++ b/frontend/src/app/shared/components/sats/sats.component.ts @@ -5,7 +5,8 @@ import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-sats', templateUrl: './sats.component.html', - styleUrls: ['./sats.component.scss'] + styleUrls: ['./sats.component.scss'], + standalone: false, }) export class SatsComponent implements OnInit { @Input() satoshis: number; diff --git a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts index 47d6bbe34..7ba45d7bb 100644 --- a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts +++ b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts @@ -6,6 +6,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-testnet-alert', templateUrl: './testnet-alert.component.html', styleUrls: ['./testnet-alert.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TestnetAlertComponent { diff --git a/frontend/src/app/shared/components/timestamp/timestamp.component.ts b/frontend/src/app/shared/components/timestamp/timestamp.component.ts index 5ca6a750b..2aacf7c55 100644 --- a/frontend/src/app/shared/components/timestamp/timestamp.component.ts +++ b/frontend/src/app/shared/components/timestamp/timestamp.component.ts @@ -5,6 +5,7 @@ import { StateService } from '@app/services/state.service'; selector: 'app-timestamp', templateUrl: './timestamp.component.html', styleUrls: ['./timestamp.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TimestampComponent implements OnChanges { diff --git a/frontend/src/app/shared/components/toggle/toggle.component.ts b/frontend/src/app/shared/components/toggle/toggle.component.ts index 75d004e74..38caaf655 100644 --- a/frontend/src/app/shared/components/toggle/toggle.component.ts +++ b/frontend/src/app/shared/components/toggle/toggle.component.ts @@ -4,6 +4,7 @@ import { Component, Input, Output, ChangeDetectionStrategy, EventEmitter, AfterV selector: 'app-toggle', templateUrl: './toggle.component.html', styleUrls: ['./toggle.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class ToggleComponent implements AfterViewInit { diff --git a/frontend/src/app/shared/components/truncate/truncate.component.ts b/frontend/src/app/shared/components/truncate/truncate.component.ts index f9ab34ee9..9da856982 100644 --- a/frontend/src/app/shared/components/truncate/truncate.component.ts +++ b/frontend/src/app/shared/components/truncate/truncate.component.ts @@ -4,6 +4,7 @@ import { Component, Input, Inject, LOCALE_ID, ChangeDetectionStrategy } from '@a selector: 'app-truncate', templateUrl: './truncate.component.html', styleUrls: ['./truncate.component.scss'], + standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, }) export class TruncateComponent { diff --git a/frontend/src/app/shared/components/weight-directives/weight-directives.ts b/frontend/src/app/shared/components/weight-directives/weight-directives.ts index 7f0d65ff4..af8737dd7 100644 --- a/frontend/src/app/shared/components/weight-directives/weight-directives.ts +++ b/frontend/src/app/shared/components/weight-directives/weight-directives.ts @@ -38,8 +38,8 @@ function createRateUnitDirective(checkFn: (rateUnit: string) => boolean): any { return RateUnitDirective; } -@Directive({ selector: '[only-vsize]' }) +@Directive({ selector: '[only-vsize]', standalone: false }) export class OnlyVsizeDirective extends createRateUnitDirective(rateUnit => rateUnit !== 'wu') {} -@Directive({ selector: '[only-weight]' }) +@Directive({ selector: '[only-weight]', standalone: false }) export class OnlyWeightDirective extends createRateUnitDirective(rateUnit => rateUnit === 'wu') {} diff --git a/frontend/src/app/shared/directives/browser-only.directive.ts b/frontend/src/app/shared/directives/browser-only.directive.ts index 97df39e2b..a8bbeafd7 100644 --- a/frontend/src/app/shared/directives/browser-only.directive.ts +++ b/frontend/src/app/shared/directives/browser-only.directive.ts @@ -2,7 +2,8 @@ import { Directive, TemplateRef, ViewContainerRef, Inject, PLATFORM_ID } from '@ import { isPlatformBrowser } from '@angular/common'; @Directive({ - selector: '[browserOnly]' + selector: '[browserOnly]', + standalone: false, }) export class BrowserOnlyDirective { constructor( diff --git a/frontend/src/app/shared/directives/colored-price.directive.ts b/frontend/src/app/shared/directives/colored-price.directive.ts index 4ba79174a..4654732f3 100644 --- a/frontend/src/app/shared/directives/colored-price.directive.ts +++ b/frontend/src/app/shared/directives/colored-price.directive.ts @@ -2,6 +2,7 @@ import { Directive, ElementRef, Input, OnChanges } from '@angular/core'; @Directive({ selector: '[appColoredPrice]', + standalone: false, }) export class ColoredPriceDirective implements OnChanges { @Input() appColoredPrice: number; diff --git a/frontend/src/app/shared/directives/server-only.directive.ts b/frontend/src/app/shared/directives/server-only.directive.ts index cd853d812..1a4ac9878 100644 --- a/frontend/src/app/shared/directives/server-only.directive.ts +++ b/frontend/src/app/shared/directives/server-only.directive.ts @@ -2,7 +2,8 @@ import { Directive, TemplateRef, ViewContainerRef, Inject, PLATFORM_ID } from '@ import { isPlatformServer } from '@angular/common'; @Directive({ - selector: '[serverOnly]' + selector: '[serverOnly]', + standalone: false, }) export class ServerOnlyDirective { constructor( diff --git a/frontend/src/app/shared/pipes/absolute/absolute.pipe.ts b/frontend/src/app/shared/pipes/absolute/absolute.pipe.ts index 4a5b8a462..ec74a63bb 100644 --- a/frontend/src/app/shared/pipes/absolute/absolute.pipe.ts +++ b/frontend/src/app/shared/pipes/absolute/absolute.pipe.ts @@ -1,6 +1,9 @@ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'absolute' }) +@Pipe({ + name: 'absolute', + standalone: false, +}) export class AbsolutePipe implements PipeTransform { transform(nr: number) { return Math.abs(nr); diff --git a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts index 4a7fb1569..351ce3f11 100644 --- a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts +++ b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'amountShortener' + name: 'amountShortener', + standalone: false, }) export class AmountShortenerPipe implements PipeTransform { transform(num: number, ...args: any[]): unknown { diff --git a/frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts b/frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts index ab5d9b227..e3a566dd4 100644 --- a/frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts +++ b/frontend/src/app/shared/pipes/asm-styler/asm-styler.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'asmStyler' + name: 'asmStyler', + standalone: false, }) export class AsmStylerPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts b/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts index 7e785e9c8..5f1f97b40 100644 --- a/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts +++ b/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts @@ -2,7 +2,8 @@ import { Pipe, PipeTransform } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; @Pipe({ - name: 'bitcoinsatoshis' + name: 'bitcoinsatoshis', + standalone: false, }) export class BitcoinsatoshisPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts index 7870572bb..3ff8acfcf 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts @@ -5,7 +5,8 @@ import { isNumberFinite, isPositive, isInteger, toDecimal, toSigFigs } from '@ap export type ByteUnit = 'B' | 'kB' | 'MB' | 'GB' | 'TB'; @Pipe({ - name: 'bytes' + name: 'bytes', + standalone: false, }) export class BytesPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts index 4af011201..4e81e17d0 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts @@ -5,7 +5,8 @@ import { isNumberFinite, isPositive, isInteger, toDecimal } from '@app/shared/pi export type ByteUnit = 'vB' | 'kvB' | 'MvB' | 'GvB' | 'TvB'; @Pipe({ - name: 'vbytes' + name: 'vbytes', + standalone: false, }) export class VbytesPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts index ab82dea01..a40f275df 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts @@ -5,7 +5,8 @@ import { isNumberFinite, isPositive, isInteger, toDecimal } from '@app/shared/pi export type ByteUnit = 'WU' | 'kWU' | 'MWU' | 'GWU' | 'TWU'; @Pipe({ - name: 'wuBytes' + name: 'wuBytes', + standalone: false, }) export class WuBytesPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/cap-address-pipe/cap-address-pipe.ts b/frontend/src/app/shared/pipes/cap-address-pipe/cap-address-pipe.ts index c58de52bf..951dc9be9 100644 --- a/frontend/src/app/shared/pipes/cap-address-pipe/cap-address-pipe.ts +++ b/frontend/src/app/shared/pipes/cap-address-pipe/cap-address-pipe.ts @@ -1,6 +1,9 @@ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'capAddress' }) +@Pipe({ + name: 'capAddress', + standalone: false, +}) export class CapAddressPipe implements PipeTransform { transform(str: string, cap: number, leftover: number) { if (!str) { return; } diff --git a/frontend/src/app/shared/pipes/decimal2hex/decimal2hex.pipe.ts b/frontend/src/app/shared/pipes/decimal2hex/decimal2hex.pipe.ts index 6ccd4238b..fa797073b 100644 --- a/frontend/src/app/shared/pipes/decimal2hex/decimal2hex.pipe.ts +++ b/frontend/src/app/shared/pipes/decimal2hex/decimal2hex.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'decimal2hex' + name: 'decimal2hex', + standalone: false, }) export class Decimal2HexPipe implements PipeTransform { transform(decimal: number): string { diff --git a/frontend/src/app/shared/pipes/fee-rounding/fee-rounding.pipe.ts b/frontend/src/app/shared/pipes/fee-rounding/fee-rounding.pipe.ts index 554b0774b..e2a6e9968 100644 --- a/frontend/src/app/shared/pipes/fee-rounding/fee-rounding.pipe.ts +++ b/frontend/src/app/shared/pipes/fee-rounding/fee-rounding.pipe.ts @@ -3,6 +3,7 @@ import { Inject, LOCALE_ID, Pipe, PipeTransform } from "@angular/core"; @Pipe({ name: "feeRounding", + standalone: false, }) export class FeeRoundingPipe implements PipeTransform { constructor( diff --git a/frontend/src/app/shared/pipes/fiat-currency.pipe.ts b/frontend/src/app/shared/pipes/fiat-currency.pipe.ts index 701426134..0b211d4cf 100644 --- a/frontend/src/app/shared/pipes/fiat-currency.pipe.ts +++ b/frontend/src/app/shared/pipes/fiat-currency.pipe.ts @@ -4,7 +4,8 @@ import { Subscription } from 'rxjs'; import { StateService } from '@app/services/state.service'; @Pipe({ - name: 'fiatCurrency' + name: 'fiatCurrency', + standalone: false, }) export class FiatCurrencyPipe implements PipeTransform { fiatSubscription: Subscription; diff --git a/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts b/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts index 7651676b4..48ef3b455 100644 --- a/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts +++ b/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts @@ -4,7 +4,8 @@ import { Subscription } from 'rxjs'; import { StateService } from '@app/services/state.service'; @Pipe({ - name: 'fiatShortener' + name: 'fiatShortener', + standalone: false, }) export class FiatShortenerPipe implements PipeTransform { fiatSubscription: Subscription; diff --git a/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts b/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts index 09b3df762..c6664c619 100644 --- a/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts +++ b/frontend/src/app/shared/pipes/hex2ascii/hex2ascii.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'hex2ascii' + name: 'hex2ascii', + standalone: false, }) export class Hex2asciiPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/http-error-pipe/http-error.pipe.ts b/frontend/src/app/shared/pipes/http-error-pipe/http-error.pipe.ts index 51e9c4c0b..540e284f1 100644 --- a/frontend/src/app/shared/pipes/http-error-pipe/http-error.pipe.ts +++ b/frontend/src/app/shared/pipes/http-error-pipe/http-error.pipe.ts @@ -1,7 +1,10 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'httpErrorMsg' }) +@Pipe({ + name: 'httpErrorMsg', + standalone: false, +}) export class HttpErrorPipe implements PipeTransform { transform(e: HttpErrorResponse | null): string { return e ? `${e.status} ${e.statusText}: ${e.error}` : ''; diff --git a/frontend/src/app/shared/pipes/math-ceil/math-ceil.pipe.ts b/frontend/src/app/shared/pipes/math-ceil/math-ceil.pipe.ts index f4babc545..02f711eb1 100644 --- a/frontend/src/app/shared/pipes/math-ceil/math-ceil.pipe.ts +++ b/frontend/src/app/shared/pipes/math-ceil/math-ceil.pipe.ts @@ -1,6 +1,9 @@ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'ceil' }) +@Pipe({ + name: 'ceil', + standalone: false, +}) export class CeilPipe implements PipeTransform { transform(nr: number) { return Math.ceil(nr); diff --git a/frontend/src/app/shared/pipes/no-sanitize.pipe.ts b/frontend/src/app/shared/pipes/no-sanitize.pipe.ts index 039eafb76..09bd38d91 100644 --- a/frontend/src/app/shared/pipes/no-sanitize.pipe.ts +++ b/frontend/src/app/shared/pipes/no-sanitize.pipe.ts @@ -1,7 +1,7 @@ import { Pipe, PipeTransform } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -@Pipe({ name: 'noSanitize' }) +@Pipe({ name: 'noSanitize', standalone: false, }) export class NoSanitizePipe implements PipeTransform { constructor(private domSanitizer: DomSanitizer) { } diff --git a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts index 499345d3c..e927a73d6 100644 --- a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts +++ b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts @@ -2,7 +2,8 @@ import { Pipe, PipeTransform } from '@angular/core'; import { StateService } from '@app/services/state.service'; @Pipe({ - name: 'relativeUrl' + name: 'relativeUrl', + standalone: false, }) export class RelativeUrlPipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts b/frontend/src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts index fe66b8bd1..cd9e52a03 100644 --- a/frontend/src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts +++ b/frontend/src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts @@ -1,7 +1,8 @@ import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ - name: 'scriptpubkeyType' + name: 'scriptpubkeyType', + standalone: false, }) export class ScriptpubkeyTypePipe implements PipeTransform { diff --git a/frontend/src/app/shared/pipes/shorten-string-pipe/shorten-string.pipe.ts b/frontend/src/app/shared/pipes/shorten-string-pipe/shorten-string.pipe.ts index f9697ff1a..4c3508c9f 100644 --- a/frontend/src/app/shared/pipes/shorten-string-pipe/shorten-string.pipe.ts +++ b/frontend/src/app/shared/pipes/shorten-string-pipe/shorten-string.pipe.ts @@ -1,6 +1,9 @@ import { Pipe, PipeTransform } from '@angular/core'; -@Pipe({ name: 'shortenString' }) +@Pipe({ + name: 'shortenString', + standalone: false, +}) export class ShortenStringPipe implements PipeTransform { transform(str: string, length: number = 12) { if (!str) { return; } From fe7568caba8170d6658c8a2718483fe08bf9a434 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 3 Nov 2025 20:32:58 +0800 Subject: [PATCH 478/534] echart fixes etc --- frontend/package-lock.json | 1551 ++++++++--------- frontend/package.json | 12 +- frontend/src/app/app.module.ts | 8 +- .../lbtc-pegs-graph.component.ts | 10 +- .../transaction-details.component.html | 2 +- .../treasuries-graph.component.ts | 2 +- .../docs/api-docs/api-docs-nav.component.html | 2 +- .../docs/api-docs/api-docs-nav.component.scss | 3 + .../app/docs/api-docs/api-docs.component.html | 4 +- .../app/docs/api-docs/api-docs.component.scss | 4 + 10 files changed, 802 insertions(+), 796 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 113698abf..f3e656fcf 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,9 +33,9 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~5.6.0", + "echarts": "~6.0.0", "esbuild": "^0.25.8", - "ngx-echarts": "~17.2.0", + "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", @@ -47,11 +47,11 @@ "devDependencies": { "@angular/compiler-cli": "^20.3.9", "@angular/language-service": "^20.3.9", - "@types/node": "^18.11.9", - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", + "@types/node": "^24.9.2", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", "browser-sync": "^3.0.3", - "eslint": "^8.57.0", + "eslint": "^9.39.0", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", "source-map-support": "^0.5.21", @@ -68,15 +68,6 @@ "start-server-and-test": "~2.1.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@algolia/abtesting": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", @@ -1017,17 +1008,6 @@ } } }, - "node_modules/@angular/build/node_modules/@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~7.16.0" - } - }, "node_modules/@angular/build/node_modules/@vitejs/plugin-basic-ssl": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", @@ -4683,39 +4663,86 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -4723,64 +4750,57 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.0.tgz", + "integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fortawesome/angular-fontawesome": { @@ -4883,18 +4903,28 @@ "@hapi/hoek": "^9.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -4902,6 +4932,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -4910,11 +4941,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/ansi": { "version": "1.0.1", @@ -7643,9 +7682,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.17.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.18.tgz", - "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==" + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } }, "node_modules/@types/node-forge": { "version": "1.3.14", @@ -7680,12 +7723,6 @@ "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "license": "MIT" }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "node_modules/@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -7765,119 +7802,150 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", - "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/type-utils": "7.4.0", - "@typescript-eslint/utils": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", - "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", + "debug": "^4.3.4" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", - "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/utils": "7.4.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -7885,31 +7953,32 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -7922,31 +7991,12 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7957,62 +8007,60 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", @@ -8214,6 +8262,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -8453,6 +8502,12 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -8464,15 +8519,6 @@ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -10518,22 +10564,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/count-lines": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", @@ -10956,7 +10986,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/default-browser": { "version": "5.2.1", @@ -11153,18 +11184,6 @@ "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -11177,18 +11196,6 @@ "node": ">=6" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -11339,12 +11346,13 @@ } }, "node_modules/echarts": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", - "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz", + "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "2.3.0", - "zrender": "5.6.1" + "zrender": "6.0.0" } }, "node_modules/echarts/node_modules/tslib": { @@ -11818,58 +11826,63 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", + "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.0", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { @@ -11889,6 +11902,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -11896,17 +11910,12 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11915,16 +11924,30 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -11935,6 +11958,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -11944,6 +11968,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11960,6 +11985,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -11967,31 +11993,14 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node": ">= 4" } }, "node_modules/eslint/node_modules/locate-path": { @@ -11999,6 +12008,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -12014,6 +12024,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -12024,18 +12035,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esniff": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", @@ -12056,27 +12055,29 @@ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -12084,6 +12085,19 @@ "node": ">=0.4.0" } }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -12097,10 +12111,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -12113,6 +12128,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -12723,7 +12739,8 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.0.7", @@ -12791,15 +12808,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -12905,17 +12923,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -13305,6 +13323,19 @@ "node": ">=10" } }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -13334,7 +13365,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handle-thing": { "version": "2.0.1", @@ -13749,10 +13781,11 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -14117,7 +14150,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "devOptional": true, + "optional": true, "engines": { "node": ">=8" } @@ -14358,6 +14391,18 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -14381,7 +14426,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -14404,7 +14450,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", @@ -14613,6 +14660,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -14724,6 +14772,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -14890,7 +14939,8 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", @@ -14975,17 +15025,6 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -15723,7 +15762,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/needle": { "version": "3.3.1", @@ -15774,13 +15814,15 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node_modules/ngx-echarts": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-17.2.0.tgz", - "integrity": "sha512-i3XDE9d53zmJH4bp8RQ/271oPlhBkczO1M3VtWk8nCXdxQq9qx8UckjWEQ7oV1AbSDLGK5sRiFu5EaY5hvdWPA==", + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-20.0.2.tgz", + "integrity": "sha512-kDoIFp7SrWCPWG9nX9IX9ARnIh4f5p8VYtRWvhXwlf5gW+GxUbeDKYpvIvBVjaftudLZIMwZ/N4GADQSIus57Q==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { + "@angular/core": ">=20.0.0", "echarts": ">=5.0.0" } }, @@ -16315,17 +16357,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -16891,15 +16934,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -17238,6 +17272,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -17768,7 +17803,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, + "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -18120,12 +18156,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -19086,6 +19120,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -19302,12 +19337,6 @@ "node": ">=0.4.0" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -19633,15 +19662,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-node": { @@ -19781,6 +19811,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -19944,9 +19975,7 @@ "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT", - "optional": true, - "peer": true + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -20730,6 +20759,16 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "license": "MIT" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -20991,9 +21030,10 @@ "license": "MIT" }, "node_modules/zrender": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", - "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz", + "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "license": "BSD-3-Clause", "dependencies": { "tslib": "2.3.0" } @@ -21001,16 +21041,11 @@ "node_modules/zrender/node_modules/tslib": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "license": "0BSD" } }, "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, "@algolia/abtesting": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", @@ -21543,16 +21578,6 @@ "watchpack": "2.4.4" }, "dependencies": { - "@types/node": { - "version": "24.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", - "optional": true, - "peer": true, - "requires": { - "undici-types": "~7.16.0" - } - }, "@vitejs/plugin-basic-ssl": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", @@ -23659,30 +23684,59 @@ "optional": true }, "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "requires": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true }, + "@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + } + }, + "@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "requires": { + "@eslint/core": "^0.17.0" + } + }, + "@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, "@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -23690,44 +23744,36 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true } } }, "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.0.tgz", + "integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==", "dev": true }, + "@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "requires": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + } + }, "@fortawesome/angular-fontawesome": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-3.0.0.tgz", @@ -23808,15 +23854,20 @@ "@hapi/hoek": "^9.0.0" } }, - "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" } }, "@humanwhocodes/module-importer": { @@ -23825,10 +23876,10 @@ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, - "@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true }, "@inquirer/ansi": { @@ -25369,9 +25420,12 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "@types/node": { - "version": "18.17.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.18.tgz", - "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==" + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "requires": { + "undici-types": "~7.16.0" + } }, "@types/node-forge": { "version": "1.3.14", @@ -25404,12 +25458,6 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==" }, - "@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -25485,79 +25533,98 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", - "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.2.tgz", + "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/type-utils": "7.4.0", - "@typescript-eslint/utils": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/type-utils": "8.46.2", + "@typescript-eslint/utils": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/parser": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", - "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", + "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/project-service": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", + "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.46.2", + "@typescript-eslint/types": "^8.46.2", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", - "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", + "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0" + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2" } }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", + "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "dev": true, + "requires": {} + }, "@typescript-eslint/type-utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", - "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.2.tgz", + "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.4.0", - "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2", + "@typescript-eslint/utils": "8.46.2", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" } }, "@typescript-eslint/types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", - "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", + "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", - "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", + "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/visitor-keys": "7.4.0", + "@typescript-eslint/project-service": "8.46.2", + "@typescript-eslint/tsconfig-utils": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/visitor-keys": "8.46.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "dependencies": { "brace-expansion": { @@ -25569,68 +25636,47 @@ "balanced-match": "^1.0.0" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { "brace-expansion": "^2.0.1" } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true } } }, "@typescript-eslint/utils": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", - "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.2.tgz", + "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.4.0", - "@typescript-eslint/types": "7.4.0", - "@typescript-eslint/typescript-estree": "7.4.0", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.2", + "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/typescript-estree": "8.46.2" } }, "@typescript-eslint/visitor-keys": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", - "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", + "version": "8.46.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", + "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", "dev": true, "requires": { - "@typescript-eslint/types": "7.4.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.46.2", + "eslint-visitor-keys": "^4.2.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + } } }, - "@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -25958,6 +26004,11 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -25968,12 +26019,6 @@ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -27454,21 +27499,6 @@ "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - } } }, "count-lines": { @@ -27931,15 +27961,6 @@ "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, "dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -27948,15 +27969,6 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -28070,12 +28082,12 @@ } }, "echarts": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.6.0.tgz", - "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz", + "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", "requires": { "tslib": "2.3.0", - "zrender": "5.6.1" + "zrender": "6.0.0" }, "dependencies": { "tslib": { @@ -28458,57 +28470,47 @@ } }, "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", + "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.0", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -28516,15 +28518,21 @@ "dev": true }, "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -28550,23 +28558,11 @@ "is-glob": "^4.0.3" } }, - "globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true }, "locate-path": { "version": "6.0.0", @@ -28585,12 +28581,6 @@ "requires": { "p-limit": "^3.0.2" } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, @@ -28628,20 +28618,26 @@ } }, "espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "requires": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "dependencies": { "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true } } @@ -28652,9 +28648,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -29169,12 +29165,12 @@ } }, "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "requires": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" } }, "fill-range": { @@ -29246,14 +29242,13 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" }, "flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "requires": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" } }, "flatted": { @@ -29514,6 +29509,12 @@ } } }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, "good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -29816,9 +29817,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true }, "ignore-walk": { @@ -30053,7 +30054,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "devOptional": true + "optional": true }, "is-plain-obj": { "version": "3.0.0", @@ -30215,6 +30216,14 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -30685,14 +30694,6 @@ "get-func-name": "^2.0.1" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -31272,9 +31273,9 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "ngx-echarts": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-17.2.0.tgz", - "integrity": "sha512-i3XDE9d53zmJH4bp8RQ/271oPlhBkczO1M3VtWk8nCXdxQq9qx8UckjWEQ7oV1AbSDLGK5sRiFu5EaY5hvdWPA==", + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-20.0.2.tgz", + "integrity": "sha512-kDoIFp7SrWCPWG9nX9IX9ARnIh4f5p8VYtRWvhXwlf5gW+GxUbeDKYpvIvBVjaftudLZIMwZ/N4GADQSIus57Q==", "requires": { "tslib": "^2.3.0" } @@ -31666,17 +31667,17 @@ } }, "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "requires": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" } }, "ora": { @@ -32050,12 +32051,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==" }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -32667,7 +32662,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "devOptional": true, + "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -32892,12 +32888,9 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==" }, "send": { "version": "0.19.0", @@ -33748,12 +33741,6 @@ } } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -33977,9 +33964,9 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" }, "ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "requires": {} }, @@ -34185,9 +34172,7 @@ "undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "optional": true, - "peer": true + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -34704,6 +34689,12 @@ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -34883,9 +34874,9 @@ "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==" }, "zrender": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.1.tgz", - "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz", + "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", "requires": { "tslib": "2.3.0" }, diff --git a/frontend/package.json b/frontend/package.json index be4ea26b9..1d3a2d58e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -84,8 +84,8 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~5.6.0", - "ngx-echarts": "~17.2.0", + "echarts": "~6.0.0", + "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", @@ -98,10 +98,10 @@ "devDependencies": { "@angular/compiler-cli": "^20.3.9", "@angular/language-service": "^20.3.9", - "@types/node": "^18.11.9", - "@typescript-eslint/eslint-plugin": "^7.4.0", - "@typescript-eslint/parser": "^7.4.0", - "eslint": "^8.57.0", + "@types/node": "^24.9.2", + "@typescript-eslint/eslint-plugin": "^8.46.2", + "@typescript-eslint/parser": "^8.46.2", + "eslint": "^9.39.0", "browser-sync": "^3.0.3", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index d0c5bf9ed..bcb0fb431 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -50,7 +50,6 @@ const providers = [ FiatShortenerPipe, FiatCurrencyPipe, CapAddressPipe, - DatePipe, AppPreloadingStrategy, ServicesApiServices, PreloadService, @@ -64,7 +63,12 @@ const providers = [ bootstrap: [AppComponent], imports: [BrowserModule, AppRoutingModule, BrowserAnimationsModule, - SharedModule], providers: [provideHttpClient(withInterceptorsFromDi())] }) + SharedModule + ], + providers: [ + provideHttpClient(withInterceptorsFromDi()), + DatePipe + ] }) export class AppModule { } @NgModule({}) 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 bad891847..ff65a3db0 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 @@ -272,18 +272,22 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { this.pegsChartOptions = { ...this.pegsChartOptions, grid: { - ...this.pegsChartOptions.grid, + ...(Array.isArray(this.pegsChartOptions?.grid) + ? (this.pegsChartOptions.grid[0] ?? {}) + : (this.pegsChartOptions?.grid ?? {})) as Record, right: this.adjustedRight, left: this.adjustedLeft, }, legend: { - ...this.pegsChartOptions.legend, + ...(Array.isArray(this.pegsChartOptions?.legend) + ? (this.pegsChartOptions.legend[0] ?? {}) + : (this.pegsChartOptions?.legend ?? {})) as Record, selected: this.selected, }, }; } - onChartInit(ec) { + onChartInit(ec: any): void { this.chartInstance = ec; this.chartInstance.on('legendselectchanged', this.onLegendSelectChanged.bind(this)); } 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 index 819e27d89..4ae01e01a 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html @@ -214,7 +214,7 @@
    - + - + - @if (vin['taprootInfo']?.scriptPath) { + @if (vin.taprootInfo?.scriptPath) { } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 7be9e0336..328fd0f68 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -305,15 +305,6 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { // Check for ord data fingerprints in inputs and outputs if (this.stateService.network !== 'liquid' && this.stateService.network !== 'liquidtestnet') { - for (let i = 0; i < tx.vin.length; i++) { - if (tx.vin[i].prevout?.scriptpubkey_type === 'v1_p2tr' && tx.vin[i].witness?.length) { - const hasAnnex = tx.vin[i].witness?.[tx.vin[i].witness.length - 1].startsWith('50'); - if (tx.vin[i].witness.length > (hasAnnex ? 2 : 1) && tx.vin[i].witness[tx.vin[i].witness.length - (hasAnnex ? 3 : 2)].includes('0063036f7264')) { - tx.vin[i].isInscription = true; - tx.largeInput = true; - } - } - } for (let i = 0; i < tx.vout.length; i++) { if (tx.vout[i]?.scriptpubkey?.startsWith('6a5d')) { tx.vout[i].isRunestone = true; @@ -341,9 +332,16 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { // parse taproot spends for (const vin of tx.vin) { if (vin.prevout?.scriptpubkey_type === 'v1_p2tr') { - vin['taprootInfo'] = parseTaproot(vin.witness); - if (vin['taprootInfo']?.scriptPath?.leafVersion === 0xbe) { - vin.inner_simplicityscript = vin.witness[1]; // simplicity program is the second witness element + vin.taprootInfo = parseTaproot(vin.witness); + if (this.stateService.network !== 'liquid' && this.stateService.network !== 'liquidtestnet') { + if (vin.taprootInfo?.scriptPath?.script.includes('0063036f7264')) { + vin.isInscription = true; + tx.largeInput = true; + } + } else { + if (vin.taprootInfo?.scriptPath?.leafVersion === 0xbe) { + vin.inner_simplicityscript = vin.witness[1]; // simplicity program is the second witness element + } } } } @@ -617,10 +615,9 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { this.showOrdData[key] = this.showOrdData[key] || { show: false }; if (type === 'vin') { - if (!this.showOrdData[key].inscriptions) { - const hasAnnex = tx.vin[index].witness?.[tx.vin[index].witness.length - 1].startsWith('50'); - this.showOrdData[key].inscriptions = this.ordApiService.decodeInscriptions(tx.vin[index].witness[tx.vin[index].witness.length - (hasAnnex ? 3 : 2)]); + const tapscript = tx.vin[index].taprootInfo?.scriptPath?.script; + this.showOrdData[key].inscriptions = this.ordApiService.decodeInscriptions(tapscript); } this.showOrdData[key].show = !this.showOrdData[key].show; diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index 04fa0e21d..3eae7e391 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -1,5 +1,6 @@ import { Price } from '@app/services/price.service'; import { IChannel } from '@interfaces/node-api.interface'; +import { ParsedTaproot } from '../shared/transaction.utils'; export interface Transaction { txid: string; @@ -80,6 +81,8 @@ export interface Vin { isInscription?: boolean; // temporary field for extracted raw simplicity scripts inner_simplicityscript?: string; + // parsed taproot info + taprootInfo?: ParsedTaproot; } interface Issuance { diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index f9fd24a0f..71e4bd5f0 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -2,6 +2,7 @@ import '@angular/localize/init'; 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'; +import { parseTaproot } from './transaction.utils'; export type AddressType = 'fee' | 'empty' @@ -158,20 +159,18 @@ export class AddressTypeInfo { if (this.type === 'v1_p2tr') { for (let i = 0; i < vin.length; i++) { const v = vin[i]; - const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); - const isScriptSpend = v.witness.length > (hasAnnex ? 2 : 1); - if (isScriptSpend) { - const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; - const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; - const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; - - if (tapleafVersion === 0xc0 && v.inner_witnessscript_asm) { + if (!v.taprootInfo) { + v.taprootInfo = parseTaproot(v.witness); + } + const taprootInfo = v.taprootInfo; + if (taprootInfo.scriptPath) { + if (taprootInfo.scriptPath.leafVersion === 0xc0 && v.inner_witnessscript_asm) { this.tapscript = true; - this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); - } else if (this.network === 'liquid' || this.network === 'liquidtestnet' && tapleafVersion === 0xbe) { + this.processScript(new ScriptInfo('inner_witnessscript', taprootInfo.scriptPath.script, v.inner_witnessscript_asm, v.witness, taprootInfo, vinIds?.[i])); + } else if (this.network === 'liquid' || this.network === 'liquidtestnet' && taprootInfo.scriptPath.leafVersion === 0xbe) { this.simplicity = true; v.inner_simplicityscript = v.witness[1]; - this.processScript(new ScriptInfo('inner_simplicityscript', scriptHex, null, v.witness, controlBlock, vinIds?.[i])); + this.processScript(new ScriptInfo('inner_simplicityscript', taprootInfo.scriptPath.simplicityScript, null, v.witness, taprootInfo, vinIds?.[i])); } } } diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index 682974521..c777b2f5b 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -1,5 +1,6 @@ import { Vin } from "../interfaces/electrs.interface"; import { AddressType, detectAddressType } from "./address-utils"; +import { ParsedTaproot } from "./transaction.utils"; const opcodes = { OP_FALSE: 0, @@ -175,18 +176,18 @@ export const ScriptTemplates: { [type: string]: (...args: any) => ScriptTemplate export class ScriptInfo { type: ScriptType; - scriptPath?: string; + taprootInfo?: ParsedTaproot; hex?: string; asm?: string; vinId?: string; template: ScriptTemplate; - constructor(type: ScriptType, hex?: string, asm?: string, witness?: string[], scriptPath?: string, vinId?: string) { + constructor(type: ScriptType, hex?: string, asm?: string, witness?: string[], taprootInfo?: ParsedTaproot, vinId?: string) { this.type = type; this.hex = hex; this.asm = asm; - if (scriptPath) { - this.scriptPath = scriptPath; + if (taprootInfo) { + this.taprootInfo = taprootInfo; } if (vinId) { this.vinId = vinId; @@ -201,7 +202,7 @@ export class ScriptInfo { } get key(): string { - return this.type + (this.scriptPath || ''); + return this.type + (this.taprootInfo?.controlBlock || ''); } } diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index bf5d4bffe..8fac8f788 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -55,8 +55,8 @@ export function setSchnorrSighashFlags(flags: bigint, witness: string[]): bigint if (!witness?.length) { return flags; } - const hasAnnex = witness.length > 1 && witness[witness.length - 1].startsWith('50'); - if (witness?.length === (hasAnnex ? 2 : 1)) { + const taprootInfo = parseTaproot(witness); + if (taprootInfo.keyPath) { // keypath spend, signature is the only witness item if (witness[0].length === 130) { flags |= setSighashFlags(flags, witness[0]); @@ -64,12 +64,13 @@ export function setSchnorrSighashFlags(flags: bigint, witness: string[]): bigint flags |= TransactionFlags.sighash_default; } } else { - // scriptpath spend, all items except for the script, control block and annex could be signatures - for (let i = 0; i < witness.length - (hasAnnex ? 3 : 2); i++) { + // scriptpath spend, all initial stack items could be signatures + const stack = taprootInfo.stack; + for (const w of stack) { // handle probable signatures - if (witness[i].length === 130) { - flags |= setSighashFlags(flags, witness[i]); - } else if (witness[i].length === 128) { + if (w.length === 130) { + flags |= setSighashFlags(flags, w); + } else if (w.length === 128) { flags |= TransactionFlags.sighash_default; } } @@ -287,14 +288,8 @@ export function processInputSignatures(vin: Vin): SigInfo[] { signatures = extractDERSignaturesWitness(vin.witness || []); break; case 'v1_p2tr': { - const hasAnnex = vin.witness?.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); - const isKeyspend = vin.witness?.length === (hasAnnex ? 2 : 1); - if (isKeyspend) { - signatures = extractSchnorrSignatures(vin.witness); - } else { - const stackItems = vin.witness?.slice(0, hasAnnex ? -3 : -2); - signatures = extractSchnorrSignatures(stackItems); - } + const taprootInfo = parseTaproot(vin.witness); + signatures = extractSchnorrSignatures(taprootInfo.stack); } break; default: // non-signed input types? @@ -406,12 +401,11 @@ export function fillUnsignedInput(vin: Vin): { missingSigs: number, bytes: numbe } } break; - case 'v1_p2tr': - const hasAnnex = vin.witness?.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); - if (vin.inner_witnessscript_asm) { - const stackItems = vin.witness.slice(0, hasAnnex ? -3 : -2); + case 'v1_p2tr': { + const taprootInfo = parseTaproot(vin.witness); + signatures = extractSchnorrSignatures(taprootInfo.stack); + if (taprootInfo.scriptPath) { if (/^OP_PUSHBYTES_32 [a-fA-F0-9]{64} OP_CHECKSIG$/.test(vin.inner_witnessscript_asm)) { - signatures = extractSchnorrSignatures(stackItems); if (!signatures.length) { missingSigs = 1; bytes = 65; @@ -421,7 +415,6 @@ export function fillUnsignedInput(vin: Vin): { missingSigs: number, bytes: numbe multisig = parseTapscriptMultisig(vin.inner_witnessscript_asm); if (multisig) { - signatures = extractSchnorrSignatures(stackItems); if (multisig.m - signatures.length > 0) { missingSigs = multisig.m - signatures.length; bytes = 65 * missingSigs + (multisig.n - multisig.m); // empty witness items for each non-signing keys @@ -429,9 +422,8 @@ export function fillUnsignedInput(vin: Vin): { missingSigs: number, bytes: numbe } } - let unanimousMultisig = parseTapscriptUnanimousMultisig(vin.inner_witnessscript_asm); + const unanimousMultisig = parseTapscriptUnanimousMultisig(vin.inner_witnessscript_asm); if (unanimousMultisig) { - signatures = extractSchnorrSignatures(stackItems); if (unanimousMultisig - signatures.length > 0) { missingSigs = unanimousMultisig - signatures.length; bytes = 65 * missingSigs; @@ -439,14 +431,13 @@ export function fillUnsignedInput(vin: Vin): { missingSigs: number, bytes: numbe } } } else { // Assume keyspend - signatures = extractSchnorrSignatures(vin.witness?.slice(0, hasAnnex ? -1 : undefined) || []); if (!signatures.length) { missingSigs = 1; bytes = 65; addToWitness = true; } } - break; + } break; default: break; } @@ -516,25 +507,24 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string } // bad-witness-nonstandard if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.witness?.length) { - const hasAnnex = vin.witness.length > 1 && vin.witness[vin.witness.length - 1].startsWith('50'); + const taprootInfo = parseTaproot(vin.witness); // annex is non-standard - if (hasAnnex) { + if (taprootInfo.annex) { return true; } - if (vin.witness.length > (hasAnnex ? 2 : 1)) { + if (taprootInfo.scriptPath) { // script path spend - const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; // control block is required - if (!controlBlock.length) { + if (!taprootInfo.controlBlock.length) { return false; } else { // Leaf version must be 0xc0 (aka Tapscript, see BIP 342) - if ((parseInt(controlBlock.slice(0, 2), 16) & 0xfe) !== 0xc0) { + if (taprootInfo.scriptPath.leafVersion !== 0xc0) { return false; } } // remaining witness items (except for the script) must be within MAX_STANDARD_TAPSCRIPT_STACK_ITEM_SIZE limit - if (vin.witness.slice(0, vin.witness.length - (hasAnnex ? 3 : 2)).some(v => v.length > 160)) { + if (taprootInfo.stack.some(v => v.length > 160)) { return false; } } @@ -805,10 +795,8 @@ export function getTransactionFlags(tx: Transaction, cpfpInfo?: CpfpInfo, replac // created before taproot activation don't need to have any witness data // (see https://mempool.space/tx/b10c007c60e14f9d087e0291d4d0c7869697c6681d979c6639dbd960792b4d41) if (vin.witness?.length) { - // in taproot, if there are at least two witness elements, and the first byte of the last element is 0x50, that last element is an annex - const hasAnnex = vin.witness?.length > 1 && vin.witness?.[vin.witness.length - 1].startsWith('50'); - // script spends have more than one witness item, not counting the annex (if present) - if (vin.witness.length > (hasAnnex ? 2 : 1)) { + const taprootInfo = parseTaproot(vin.witness); + if (taprootInfo.scriptPath) { // the script itself is the second-to-last witness item, not counting the annex const asm = vin.inner_witnessscript_asm; // inscriptions smuggle data within an 'OP_0 OP_IF ... OP_ENDIF' envelope @@ -816,7 +804,7 @@ export function getTransactionFlags(tx: Transaction, cpfpInfo?: CpfpInfo, replac flags |= TransactionFlags.inscription; } } - if (hasAnnex) { + if (taprootInfo.annex) { flags |= TransactionFlags.annex; } } @@ -2165,12 +2153,13 @@ export interface ParsedTaproot { parity: number; script: string; simplicityScript?: string; // liquid only - stack: string[]; merkleBranches: string[]; internalKey: string; isNUMS?: boolean; } + stack: string[]; // witness items excluding annex, script, control block annex?: string; + controlBlock?: string; annexIndex?: number; controlBlockIndex?: number; scriptIndex?: number; @@ -2183,6 +2172,7 @@ export interface ParsedTaproot { export function parseTaproot(witness: string[]): ParsedTaproot { const parsed: ParsedTaproot = { keyPath: true, + stack: witness.slice(0, 1), // assume keyspend for now }; const hasAnnex = witness.length > 1 && witness[witness.length - 1].startsWith('50'); if (hasAnnex) { @@ -2194,14 +2184,12 @@ export function parseTaproot(witness: string[]): ParsedTaproot { parsed.controlBlockIndex = witness.length - (hasAnnex ? 2 : 1); parsed.scriptIndex = witness.length - (hasAnnex ? 3 : 2); // control block is the last non-annex element - const controlblock = witness[parsed.controlBlockIndex]; - const leafVersionParity = parseInt(controlblock.slice(0, 2), 16); - const internalKey = controlblock.slice(2, 66); + parsed.controlBlock = witness[parsed.controlBlockIndex]; + const leafVersionParity = parseInt(parsed.controlBlock.slice(0, 2), 16); + const internalKey = parsed.controlBlock.slice(2, 66); parsed.scriptPath = { // script is the second last non-annex element script: witness[parsed.scriptIndex], - // remaining items are the initial stack - stack: witness.slice(0, (hasAnnex ? -3 : -2)), // first two bytes are the leaf version & parity bit leafVersion: leafVersionParity & 0xfe, parity: leafVersionParity & 0x01, @@ -2209,9 +2197,11 @@ export function parseTaproot(witness: string[]): ParsedTaproot { isNUMS: internalKey === '50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', merkleBranches: [], }; - for (let i = 66; (i + 64) <= controlblock.length; i += 64) { - parsed.scriptPath.merkleBranches.push(controlblock.slice(i, i + 64)); + for (let i = 66; (i + 64) <= parsed.controlBlock.length; i += 64) { + parsed.scriptPath.merkleBranches.push(parsed.controlBlock.slice(i, i + 64)); } + // remaining items are the initial stack + parsed.stack = witness.slice(0, (hasAnnex ? -3 : -2)); if (parsed.scriptPath.leafVersion === 0xbe) { // override script stuff for simplicity From 6b058e16d676d95c314867234699391dd7e6262f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 1 Nov 2025 02:14:24 +0000 Subject: [PATCH 505/534] make taproot control block info toggleable --- .../transactions-list/transactions-list.component.html | 4 ++-- .../transactions-list/transactions-list.component.scss | 1 + .../transactions-list/transactions-list.component.ts | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) 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 77eea66ba..a5a54211f 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -184,7 +184,7 @@ @if (windex === vin.taprootInfo?.controlBlockIndex) { - + @@ -243,7 +243,7 @@ - @if (vin.taprootInfo?.scriptPath) { + @if (vin.taprootInfo?.scriptPath && showTaprootControlBlock[vindex]) {
    Student NameID + Student Name +
    + + +
    +
    + ID +
    + + +
    +
    Proof
    {{ item.student_name }} - @if (item.sanitized_download_url) { - - {{ item.id_code }} - - - - - } @else { - {{ item.id_code }} - } - + @if (item.sanitized_download_url) { + + {{ item.student_name }} + + + + + } @else { + {{ item.student_name }} + } + {{ item.student_name }} + @if (item.sanitized_download_url) { + + {{ item.id_code }} + + + + + } @else { + {{ item.id_code }} + } + diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts index afb6386b4..87d8836a2 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.ts @@ -13,6 +13,9 @@ export interface SimpleProofCubo { parsed?: { type: string; year: number; studentNumber: number }; } +export type SortField = 'student_name' | 'id_code' | null; +export type SortDirection = 'asc' | 'desc'; + @Component({ selector: 'app-simpleproof-cubo-widget', templateUrl: './simpleproof-cubo-widget.component.html', @@ -35,6 +38,8 @@ export class SimpleProofCuboWidgetComponent implements OnChanges { lastPage = 1; itemsPerPage = 15; paginationMaxSize = window.innerWidth <= 767.98 ? 3 : 5; + sortField: SortField = null; + sortDirection: SortDirection = 'asc'; constructor( private servicesApiService: ServicesApiServices, @@ -122,6 +127,11 @@ export class SimpleProofCuboWidgetComponent implements OnChanges { } else { this.filteredVerified = this.verified; } + + if (this.sortField) { + this.applySort(); + } + this.page = 1; this.updatePage(); } @@ -134,4 +144,56 @@ export class SimpleProofCuboWidgetComponent implements OnChanges { this.page = page; this.updatePage(); } + + sortBy(field: SortField, direction?: SortDirection): boolean { + if (field && direction) { + this.sortField = field; + this.sortDirection = direction; + } else { + if (this.sortField === field) { + if (this.sortDirection === 'asc') { + this.sortDirection = 'desc'; + } else { + this.sortField = null; + } + } else { + this.sortField = field; + this.sortDirection = 'asc'; + } + } + + this.applySort(); + this.page = 1; + this.updatePage(); + return false; + } + + applySort(): void { + // default to ascending sort by id + const sortByField = this.sortField || 'id_code'; + const sortDirection = this.sortField ? this.sortDirection : 'asc'; + + const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }); + + this.filteredVerified.sort((a, b) => { + let comparison = 0; + if (sortByField === 'student_name') { + comparison = collator.compare(a.student_name, b.student_name); + } else if (sortByField === 'id_code') { + // For ID sorting, try to use the parsed Cubo key logic first + if (a.parsed && b.parsed) { + if (a.parsed.year !== b.parsed.year) { + comparison = a.parsed.year - b.parsed.year; + } else if (a.parsed.type !== b.parsed.type) { + comparison = a.parsed.type.localeCompare(b.parsed.type); + } else { + comparison = a.parsed.studentNumber - b.parsed.studentNumber; + } + } else { + comparison = collator.compare(a.id_code, b.id_code); + } + } + return sortDirection === 'asc' ? comparison : -comparison; + }); + } } diff --git a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss index ad0bf96dd..e52b383a1 100644 --- a/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss +++ b/frontend/src/app/components/simpleproof-widget/simpleproof-widget.component.scss @@ -60,6 +60,14 @@ tr, td, th { white-space: nowrap; } +.student { + width: 50%; + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + .hash { width: 20%; max-width: 700px; @@ -70,9 +78,7 @@ tr, td, th { td.hash { font-family: monospace; } -.widget .hash { - display: none; -} + @media (max-width: 1200px) { .hash { display: none; @@ -93,10 +99,52 @@ td.verified { } .proof { - width: 25%; + width: 120px; padding-left: 0; } +.widget { + &.id, &.hash { + display: none; + } + &.student { + width: 100%; + } + &.proof { + width: 120px; + } +} + +.sortable { + user-select: none; + transition: background-color 0.2s ease; + + &:hover { + background-color: rgba(0, 0, 0, 0.05); + } +} + +.sort-icons { + display: inline-flex; + line-height: 1; + flex-direction: column; + width: 1em; + height: 100%; + align-items: center; + justify-content: center; + vertical-align: middle; + + fa-icon { + transition: color 0.2s ease; + margin: -0.25em 0; + pointer-events: all; + color: var(--secondary); + &.active { + color: var(--info); + } + } +} + .badge-verify { font-size: 1.05em; font-weight: normal; From 33bfc2c77e8cb87075e8fd5cf4c3291c6dc11f97 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 14 Jul 2025 21:36:18 -1000 Subject: [PATCH 299/534] ops: Use minrelaytxfee=0.000001 for Bitcoin mainnet --- production/bitcoin.conf | 1 + production/bitcoin.minfee.conf | 1 + 2 files changed, 2 insertions(+) diff --git a/production/bitcoin.conf b/production/bitcoin.conf index adff1ef6b..5162cd1d8 100644 --- a/production/bitcoin.conf +++ b/production/bitcoin.conf @@ -20,6 +20,7 @@ logtimemicros=1 #uacomment=@wiz [main] +minrelaytxfee=0.000001 mempoolexpiry=999999 maxmempool=4096 rpcbind=127.0.0.1:8332 diff --git a/production/bitcoin.minfee.conf b/production/bitcoin.minfee.conf index 0bd7f2ed1..d83ea88dd 100644 --- a/production/bitcoin.minfee.conf +++ b/production/bitcoin.minfee.conf @@ -11,6 +11,7 @@ rpcpassword=__BITCOIN_RPC_PASS__ #uacomment=@wiz [main] +minrelaytxfee=0.000001 bind=127.0.0.1:8303 rpcbind=127.0.0.1:8302 rpcport=8302 From 1c0637b6d1b21d7c1df966aa91f067f9a4c027b1 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 15 Jul 2025 14:39:38 +0000 Subject: [PATCH 300/534] bluer <1sat color --- frontend/src/app/app.constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/app.constants.ts b/frontend/src/app/app.constants.ts index 53c7b06c1..4be2a61f9 100644 --- a/frontend/src/app/app.constants.ts +++ b/frontend/src/app/app.constants.ts @@ -1,5 +1,5 @@ export const defaultMempoolFeeColors = [ - '497d2b', + '007d3d', '557d00', '5d7d01', '637d02', @@ -41,7 +41,7 @@ export const defaultMempoolFeeColors = [ ]; export const contrastMempoolFeeColors = [ - '007be9', + '06adef', '0082e6', '0984df', '1285d9', From f51f9ae00f2e27b9e248d7f1ad1d1b6337bcd7c7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 04:10:33 +0000 Subject: [PATCH 301/534] refactor fee recommendations to support unit testing --- backend/src/api/fee-api.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 24fd25a4b..3a9344a66 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -1,4 +1,5 @@ import { MempoolBlock } from '../mempool.interfaces'; +import { IBitcoinApi } from './bitcoin/bitcoin-api.interface'; import config from '../config'; import mempool from './mempool'; import projectedBlocks from './mempool-blocks'; @@ -22,6 +23,11 @@ class FeeApi { public getRecommendedFee(): RecommendedFees { const pBlocks = projectedBlocks.getMempoolBlocks(); const mPool = mempool.getMempoolInfo(); + + return this.calculateRecommendedFee(pBlocks, mPool); + } + + public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo): RecommendedFees { const minimumFee = this.roundUpToNearest(mPool.mempoolminfee * 100000, this.minimumIncrement); const defaultMinFee = Math.max(minimumFee, this.defaultFee); From db686b542979d505eee1d431c3753550d9f4a26f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 04:52:05 +0000 Subject: [PATCH 302/534] initial fee recommendation unit tests --- backend/src/__tests__/api/fee-api.ts | 55 ++++ .../api/test-data/fee-mempool-blocks.json | 289 ++++++++++++++++++ 2 files changed, 344 insertions(+) create mode 100644 backend/src/__tests__/api/fee-api.ts create mode 100644 backend/src/__tests__/api/test-data/fee-mempool-blocks.json diff --git a/backend/src/__tests__/api/fee-api.ts b/backend/src/__tests__/api/fee-api.ts new file mode 100644 index 000000000..64f80bca9 --- /dev/null +++ b/backend/src/__tests__/api/fee-api.ts @@ -0,0 +1,55 @@ +import feeApi from '../../api/fee-api'; +import { IBitcoinApi } from '../../api/bitcoin/bitcoin-api.interface'; +const feeMempoolBlocks = require('./test-data/fee-mempool-blocks.json'); + + +const subSatMempoolInfo: IBitcoinApi.MempoolInfo = { + mempoolminfee: 0.000001, // 0.1 sat/vbyte + loaded: true, + size: 100, + bytes: 10000, + usage: 10000, + total_fee: 10000, + maxmempool: 10000, + minrelaytxfee: 0.000001, // 0.1 sat/vbyte +}; + +const mempoolInfo: IBitcoinApi.MempoolInfo = { + mempoolminfee: 0.00001, + loaded: true, + size: 100, + bytes: 10000, + usage: 10000, + total_fee: 10000, + maxmempool: 10000, + minrelaytxfee: 0.00001, +}; + +describe('Fee API', () => { + test('should calculate recommended fees properly for sub-sat mempool', () => { + const fee = feeApi.calculateRecommendedFee(feeMempoolBlocks.subsat, subSatMempoolInfo); + expect(fee.fastestFee).toBe(2); + expect(fee.halfHourFee).toBe(1); + expect(fee.hourFee).toBe(1); + expect(fee.economyFee).toBe(1); + expect(fee.minimumFee).toBe(1); + }); + + test('should calculate recommended fees properly for full but low fee mempool', () => { + const fee = feeApi.calculateRecommendedFee(feeMempoolBlocks.lowfee, mempoolInfo); + expect(fee.fastestFee).toBe(2); + expect(fee.halfHourFee).toBe(2); + expect(fee.hourFee).toBe(2); + expect(fee.economyFee).toBe(2); + expect(fee.minimumFee).toBe(1); + }); + + test('should calculate recommended fees properly for empty mempool', () => { + const fee = feeApi.calculateRecommendedFee(feeMempoolBlocks.empty, mempoolInfo); + expect(fee.fastestFee).toBe(1); + expect(fee.halfHourFee).toBe(1); + expect(fee.hourFee).toBe(1); + expect(fee.economyFee).toBe(1); + expect(fee.minimumFee).toBe(1); + }); +}); \ No newline at end of file diff --git a/backend/src/__tests__/api/test-data/fee-mempool-blocks.json b/backend/src/__tests__/api/test-data/fee-mempool-blocks.json new file mode 100644 index 000000000..f5a2efb20 --- /dev/null +++ b/backend/src/__tests__/api/test-data/fee-mempool-blocks.json @@ -0,0 +1,289 @@ +{ + "subsat": [ + { + "blockSize": 1746106, + "blockVSize": 997953.25, + "nTx": 3750, + "totalFees": 1764766, + "medianFee": 1.0023586640951265, + "feeRange": [ + 0.6082474226804123, + 0.6082474226804123, + 0.6082474226804123, + 0.6082474226804123, + 1.2076788830715532, + 3.166077738515901, + 73.61111111111111 + ] + }, + { + "blockSize": 1809871, + "blockVSize": 997963, + "nTx": 4861, + "totalFees": 588436, + "medianFee": 0.6082474226804123, + "feeRange": [ + 0.5156626506024097, + 0.5649475055559813, + 0.5670103092783505, + 0.6082474226804123, + 0.6082474226804123, + 0.6082474226804123, + 0.6082474226804123 + ] + }, + { + "blockSize": 2917870, + "blockVSize": 997821.25, + "nTx": 1221, + "totalFees": 535389, + "medianFee": 0.5200034509958588, + "feeRange": [ + 0.35051546391752575, + 0.5649475055559813, + 0.5649475055559813, + 0.5649475055559813, + 0.5649475055559813, + 0.5649475055559813, + 0.5649475055559813 + ] + }, + { + "blockSize": 3937966, + "blockVSize": 997875.25, + "nTx": 18, + "totalFees": 506205, + "medianFee": 0.5100003123470801, + "feeRange": [ + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.5099980684971892, + 0.5100003123470801, + 0.5100020185186144, + 0.5100025244589157 + ] + }, + { + "blockSize": 3917639, + "blockVSize": 997810.25, + "nTx": 62, + "totalFees": 503529, + "medianFee": 0.5099975959779666, + "feeRange": [ + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.5099971889756266, + 0.5100002265056967 + ] + }, + { + "blockSize": 3694897, + "blockVSize": 997893.25, + "nTx": 43, + "totalFees": 503307, + "medianFee": 0.5099952023028946, + "feeRange": [ + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.3704911425797351, + 0.5099952023028946, + 0.5099967157103613 + ] + }, + { + "blockSize": 2486759, + "blockVSize": 997857.5, + "nTx": 498, + "totalFees": 386911, + "medianFee": 0.36001120750903104, + "feeRange": [ + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.5000054632270189 + ] + }, + { + "blockSize": 6681226, + "blockVSize": 3385616.5, + "nTx": 10222, + "totalFees": 1197838, + "medianFee": 0.35051546391752575, + "feeRange": [ + 0.21576460085542437, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.35051546391752575, + 0.3599967979827291, + 0.3600004002561639, + 0.3600040026016911, + 0.3600040026016911, + 0.3600040026016911 + ] + } + ], + + "empty": [{ + "blockSize": 10000, + "blockVSize": 10000, + "nTx": 2000, + "totalFees": 1197838, + "medianFee": 1, + "feeRange": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + } + ], + + "lowfee": [ + { + "blockSize": 1746106, + "blockVSize": 997953.25, + "nTx": 3750, + "totalFees": 1764766, + "medianFee": 1.0023586640951265, + "feeRange": [ + 1.6082474226804123, + 1.6082474226804123, + 1.6082474226804123, + 1.6082474226804123, + 1.2076788830715532, + 3.166077738515901, + 73.61111111111111 + ] + }, + { + "blockSize": 1809871, + "blockVSize": 997963, + "nTx": 4861, + "totalFees": 588436, + "medianFee": 1.6082474226804123, + "feeRange": [ + 1.5156626506024097, + 1.5649475055559813, + 1.5670103092783505, + 1.6082474226804123, + 1.6082474226804123, + 1.6082474226804123, + 1.6082474226804123 + ] + }, + { + "blockSize": 2917870, + "blockVSize": 997821.25, + "nTx": 1221, + "totalFees": 535389, + "medianFee": 1.5200034509958588, + "feeRange": [ + 1.35051546391752575, + 1.5649475055559813, + 1.5649475055559813, + 1.5649475055559813, + 1.5649475055559813, + 1.5649475055559813, + 1.5649475055559813 + ] + }, + { + "blockSize": 3937966, + "blockVSize": 997875.25, + "nTx": 18, + "totalFees": 506205, + "medianFee": 1.5100003123470801, + "feeRange": [ + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.5099980684971892, + 1.5100003123470801, + 1.5100020185186144, + 1.5100025244589157 + ] + }, + { + "blockSize": 3917639, + "blockVSize": 997811.25, + "nTx": 62, + "totalFees": 503529, + "medianFee": 1.5099975959779666, + "feeRange": [ + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.5099971889756266, + 1.5100002265056967 + ] + }, + { + "blockSize": 3694897, + "blockVSize": 997893.25, + "nTx": 43, + "totalFees": 503307, + "medianFee": 1.5099952023028946, + "feeRange": [ + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.3704911425797351, + 1.5099952023028946, + 1.5099967157103613 + ] + }, + { + "blockSize": 2486759, + "blockVSize": 997857.5, + "nTx": 498, + "totalFees": 386911, + "medianFee": 1.36001120750903104, + "feeRange": [ + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.5000054632270189 + ] + }, + { + "blockSize": 6681226, + "blockVSize": 3385616.5, + "nTx": 10222, + "totalFees": 1197838, + "medianFee": 1.35051546391752575, + "feeRange": [ + 1.21576460085542437, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.35051546391752575, + 1.3599967979827291, + 1.3600004002561639, + 1.3600040026016911, + 1.3600040026016911, + 1.3600040026016911 + ] + } + ] +} \ No newline at end of file From 4299219fc17333bb231e8dc7088847cb15d6ea0e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 04:52:36 +0000 Subject: [PATCH 303/534] ignore <1 sat for fee recommendations --- backend/src/api/fee-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 3a9344a66..8efb8f605 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -70,7 +70,7 @@ class FeeApi { private optimizeMedianFee(pBlock: MempoolBlock, nextBlock: MempoolBlock | undefined, previousFee?: number): number { const useFee = previousFee ? (pBlock.medianFee + previousFee) / 2 : pBlock.medianFee; - if (pBlock.blockVSize <= 500000) { + if (pBlock.blockVSize <= 500000 || pBlock.medianFee < 1) { return this.defaultFee; } if (pBlock.blockVSize <= 950000 && !nextBlock) { From c86c35352e5cba090ce48cd58b61ac1773ce7667 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 05:27:50 +0000 Subject: [PATCH 304/534] support sub-1 sat txs in projected block fee charts --- .../fee-distribution-graph.component.ts | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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 aa57f92d9..91de64c15 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 @@ -25,6 +25,8 @@ export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestr simple: boolean = false; data: number[][]; + maxValue: number = 0; + minValue: number = 0; labelInterval: number = 50; smallScreen: boolean = window.innerWidth < 450; @@ -66,7 +68,9 @@ export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestr return; } const samples = []; - const txs = this.transactions.map(tx => { return { vsize: tx.vsize, rate: tx.rate || (tx.fee / tx.vsize) }; }).sort((a, b) => { return b.rate - a.rate; }); + const txs = this.transactions.map(tx => { return { vsize: tx.vsize, rate: tx.rate ?? (tx.fee / tx.vsize) }; }).sort((a, b) => { return b.rate - a.rate; }); + this.maxValue = txs.reduce((max, tx) => Math.max(max, tx.rate), 0); + this.minValue = txs.reduce((min, tx) => Math.min(min, tx.rate), Infinity); const maxBlockVSize = this.stateService.env.BLOCK_WEIGHT_UNITS / 4; const sampleInterval = maxBlockVSize / this.numSamples; let cumVSize = 0; @@ -83,7 +87,7 @@ export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestr } while (txs[txIndex] && nextSample < cumVSize + txs[txIndex].vsize) { - samples.push([(1 - (sampleIndex / this.numSamples)) * 100, txs[txIndex].rate || 0.000001]); + samples.push([(1 - (sampleIndex / this.numSamples)) * 100, txs[txIndex].rate ?? 0.000001]); nextSample += sampleInterval; sampleIndex++; } @@ -121,8 +125,8 @@ export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestr }, yAxis: { type: 'log', - min: 1, - max: this.data.reduce((min, val) => Math.max(min, val[1]), 1), + min: this.minValue >= 1 ? 1 : 0.1, + max: this.maxValue, // name: 'Effective Fee Rate s/vb', // nameLocation: 'middle', splitLine: { @@ -138,7 +142,15 @@ export class FeeDistributionGraphComponent implements OnInit, OnChanges, OnDestr const unitValue = this.weightMode ? value / 4 : value; const selectedPowerOfTen = selectPowerOfTen(unitValue); const scaledValue = unitValue / selectedPowerOfTen.divider; - const newVal = scaledValue >= 100 ? Math.round(scaledValue) : scaledValue.toPrecision(3); + let newVal = ''; + switch (true) { + case scaledValue >= 100: + return Math.round(scaledValue).toString(); + case scaledValue >= 10: + return scaledValue.toFixed(1); + default: + return scaledValue.toFixed(2); + } return `${newVal}${selectedPowerOfTen.unit}`; }, }, From 4889d83203133f6d19729b529feb3af1903bb576 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 13:17:54 +0000 Subject: [PATCH 305/534] tighten missing prevout inscription heuristic --- backend/src/api/common.ts | 49 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 010dc770b..d1cf76844 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -8,6 +8,7 @@ import transactionUtils from './transaction-utils'; import { isPoint } from '../utils/secp256k1'; import logger from '../logger'; import { getVarIntLength, opcodes, parseMultisigScript } from '../utils/bitcoin-script'; +import { IEsploraApi } from './bitcoin/esplora-api.interface'; // Bitcoin Core default policy settings const MAX_STANDARD_TX_WEIGHT = 400_000; @@ -507,6 +508,51 @@ export class Common { return flags; } + static inputIsMaybeInscription(vin: IEsploraApi.Vin): boolean { + // check if this is actually a taproot input + let isTaproot = false; + let isNotTaproot = false; + + // taproot inputs have no scriptsig (otherwise probably wrapped segwit) + if (vin.scriptsig?.length) { + isNotTaproot = true; + } + + // p2wpkh consist of a DER-encoded signature followed by a compressed pubkey + if (!isNotTaproot + && this.isDERSig(vin.witness[0]) + && (vin.witness[1].startsWith('02') || vin.witness[1].startsWith('03')) + && vin.witness[1].length === 66) { + isNotTaproot = true; + } + + // p2wsh could be almost anything, but ends with a script which + // probably doesn't match a valid taproot control block length (32 + 33m) + if (!isNotTaproot + && vin.witness.length >= 2 + ) { + const hasAnnex = vin.witness[vin.witness.length - 1].startsWith('50'); + const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; + if ((controlBlock.length - 66) % 64 === 0) { + isNotTaproot = true; + } + } + + // signed taproot inscriptions should have 3 non-annex witness items: + // 1) schnorr signature + // 2) inscription script + // 3) control block (length 33 + 32m) + if (!isTaproot + && vin.witness.length >= 3 + && vin.witness[0].length === 128 || vin.witness[0].length === 130 + && (vin.witness[2].length - 66) % 64 === 0 + ) { + isTaproot = true; + } + + return isTaproot || !isNotTaproot; + } + static getTransactionFlags(tx: TransactionExtended, height?: number): number { let flags = tx.flags ? BigInt(tx.flags) : 0n; @@ -567,7 +613,8 @@ export class Common { } } else { // no prevouts, optimistically check witness-bearing inputs - if (vin.witness?.length >= 2) { + if (vin.witness?.length >= 2 && Common.inputIsMaybeInscription(vin)) { + // try to parse the witness as a taproot inscription try { flags = Common.isInscription(vin, flags); } catch { From eb5ad36322e41f2cf9488bfeb5ca5f17ef47e2aa Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 16 Jul 2025 13:18:51 +0000 Subject: [PATCH 306/534] reclassify txs after prevouts added --- backend/src/api/bitcoin/bitcoin-api.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index b78c15bf2..5f2e2619a 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -6,6 +6,7 @@ import blocks from '../blocks'; import mempool from '../mempool'; import { TransactionExtended } from '../../mempool.interfaces'; import transactionUtils from '../transaction-utils'; +import { Common } from '../common'; class BitcoinApi implements AbstractBitcoinApi { private rawMempoolCache: IBitcoinApi.RawMempool | null = null; @@ -360,6 +361,7 @@ class BitcoinApi implements AbstractBitcoinApi { } protected async $addPrevouts(transaction: TransactionExtended): Promise { + let addedPrevouts = false; for (const vin of transaction.vin) { if (vin.prevout) { continue; @@ -367,6 +369,12 @@ class BitcoinApi implements AbstractBitcoinApi { const innerTx = await this.$getRawTransaction(vin.txid, false, false); vin.prevout = innerTx.vout[vin.vout]; transactionUtils.addInnerScriptsToVin(vin); + addedPrevouts = true; + } + if (addedPrevouts) { + // re-calculate transaction flags now that we have full prevout data + transaction.flags = undefined; // clear existing flags to force full classification + transaction.flags = Common.getTransactionFlags(transaction, transaction.status?.block_height ?? blocks.getCurrentBlockHeight()); } return transaction; } From 61913842ffffa1064d1764ffda9c5ca2db67de67 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 16 Jul 2025 16:28:46 +0200 Subject: [PATCH 307/534] L-BTC -> LBTC --- frontend/cypress/e2e/liquid/liquid.spec.ts | 10 +++++----- .../cypress/e2e/liquidtestnet/liquidtestnet.spec.ts | 8 ++++---- frontend/cypress/fixtures/assets.minimal.json | 2 +- .../src/app/components/amount/amount.component.html | 4 ++-- .../assets/assets-nav/assets-nav.component.ts | 2 +- .../lbtc-pegs-graph/lbtc-pegs-graph.component.ts | 8 ++++---- .../reserves-ratio-stats.component.html | 2 +- .../reserves-supply-stats.component.html | 4 ++-- frontend/src/app/dashboard/dashboard.component.html | 4 ++-- frontend/src/app/docs/api-docs/api-docs-data.ts | 2 +- frontend/src/app/services/assets.service.ts | 6 +++--- 11 files changed, 26 insertions(+), 26 deletions(-) diff --git a/frontend/cypress/e2e/liquid/liquid.spec.ts b/frontend/cypress/e2e/liquid/liquid.spec.ts index 4fb7431d9..2da3c41f5 100644 --- a/frontend/cypress/e2e/liquid/liquid.spec.ts +++ b/frontend/cypress/e2e/liquid/liquid.spec.ts @@ -139,10 +139,10 @@ describe('Liquid', () => { it('show unblinded TX', () => { cy.visit(`${basePath}/tx/f2f41c0850e8e7e3f1af233161fd596662e67c11ef10ed15943884186fbb7f46#blinded=100000,6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d,0ab9f70650f16b1db8dfada05237f7d0d65191c3a13183da8a2ddddfbde9a2ad,fd98b2edc5530d76acd553f206a431f4c1fab27e10e290ad719582af878e98fc,2364760,6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d,90c7a43b15b905bca045ca42a01271cfe71d2efe3133f4197792c24505cb32ed,12eb5959d9293b8842e7dd8bc9aa9639fd3fd031c5de3ba911adeca94eb57a3a`); cy.waitForSkeletonGone(); - cy.get('.table-tx-vin tr:nth-child(1) .amount').should('contain.text', '0.02465000 L-BTC'); + cy.get('.table-tx-vin tr:nth-child(1) .amount').should('contain.text', '0.02465000 LBTC'); cy.get('.table-tx-vin tr').should('have.class', 'assetBox'); - cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00100000 L-BTC'); - cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.02364760 L-BTC'); + cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00100000 LBTC'); + cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.02364760 LBTC'); cy.get('.table-tx-vout tr').should('have.class', 'assetBox'); }); @@ -169,13 +169,13 @@ describe('Liquid', () => { cy.visit(`${basePath}/tx/f2f41c0850e8e7e3f1af233161fd596662e67c11ef10ed15943884186fbb7f46#blinded=100000,6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d,0ab9f70650f16b1db8dfada05237f7d0d65191c3a13183da8a2ddddfbde9a2ad,fd98b2edc5530d76acd553f206a431f4c1fab27e10e290ad719582af878e98fc`); cy.waitForSkeletonGone(); cy.get('.table-tx-vout tr:nth-child(1)').should('have.class', 'assetBox'); - cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00100000 L-BTC'); + cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00100000 LBTC'); }); it('show second unblinded vout', () => { cy.visit(`${basePath}/tx/f2f41c0850e8e7e3f1af233161fd596662e67c11ef10ed15943884186fbb7f46#blinded=2364760,6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d,90c7a43b15b905bca045ca42a01271cfe71d2efe3133f4197792c24505cb32ed,12eb5959d9293b8842e7dd8bc9aa9639fd3fd031c5de3ba911adeca94eb57a3a`); cy.get('.table-tx-vout tr:nth-child(2').should('have.class', 'assetBox'); - cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.02364760 L-BTC'); + cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.02364760 LBTC'); }); it('show invalid error unblinded TX', () => { diff --git a/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts b/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts index 7befda49f..b5038f89b 100644 --- a/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts +++ b/frontend/cypress/e2e/liquidtestnet/liquidtestnet.spec.ts @@ -103,10 +103,10 @@ describe('Liquid Testnet', () => { it('show unblinded TX', () => { cy.visit(`${basePath}/tx/c3d908ab77891e4c569b0df71aae90f4720b157019ebb20db176f4f9c4d626b8#blinded=100000,144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49,df290ead654d7d110ebc5aaf0bcf11d5b5d360431a467f1cde0a856fde986893,33cb3a2fd2e76643843691cf44a78c5cd28ec652a414da752160ad63fbd37bc9,49741,144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49,edb0713bcbfcb3daabf601cb50978439667d208e15fed8a5ebbfea5696cda1d5,4de70115501e8c7d6bd763e229bf42781edeacf6e75e1d7bdfa4c63104bc508a`); cy.waitForSkeletonGone(); - cy.get('.table-tx-vin tr:nth-child(1) .amount').should('contain.text', '0.00100000 tL-BTC'); + cy.get('.table-tx-vin tr:nth-child(1) .amount').should('contain.text', '0.00100000 tLBTC'); cy.get('.table-tx-vin tr').should('have.class', 'assetBox'); - cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00050000 tL-BTC'); - cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.00049741 tL-BTC'); + cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00050000 tLBTC'); + cy.get('.table-tx-vout tr:nth-child(2) .amount').should('contain.text', '0.00049741 tLBTC'); cy.get('.table-tx-vout tr').should('have.class', 'assetBox'); }); @@ -133,7 +133,7 @@ describe('Liquid Testnet', () => { cy.visit(`${basePath}/tx/0877bc0c7aa5c2b8d0e4b15450425879b8783c40e341806037a605ef836fb886#blinded=5000,38fca2d939696061a8f76d4e6b5eecd54e3b4221c846f24a6b279e79952850a5,328de54e90e867a9154b4f1eb7fcab86267e880fa2ee9e53b41a91e61dab86e6,8885831e6b089eaf06889d53a24843f0da533d300a7b1527b136883a6819f3ae,5000,38fca2d939696061a8f76d4e6b5eecd54e3b4221c846f24a6b279e79952850a5,aca78b953615d69ae0ae68c4c5c3c0ee077c10bc20ad3f0c5960706004e6cb56,d2ec175afe5f761e2dbd443faf46abbb7091f341deb3387e5787d812bdb2df9f,100000,144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49,4b54a4ca809b3844f34dd88b68617c4c866d92a02211f02ba355755bac20a1c6,eddd02e92b0cfbad8cab89828570a50f2c643bb2a54d886c86e25ce47e818685,99729,144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49,8b86d565c9549eb0352bb81ee576d01d064435b64fddcc045decebeb1d9913ce,b082ce3448d40d47b5b39f15d72b285f4a1046b636b56c25f32f498ece29d062,10000,38fca2d939696061a8f76d4e6b5eecd54e3b4221c846f24a6b279e79952850a5,62b04ee86198d6b41681cdd0acb450ab366af727a010aaee8ba0b9e69ff43896,3f98429bca9b538dc943c22111f25d9c4448d45a63ff0f4e58b22fd434c0365e`); cy.waitForSkeletonGone(); cy.get('.table-tx-vout tr:nth-child(1)').should('have.class', 'assetBox'); - cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00099729 tL-BTC'); + cy.get('.table-tx-vout tr:nth-child(1) .amount').should('contain.text', '0.00099729 tLBTC'); }); it('show second unblinded vout (asset)', () => { diff --git a/frontend/cypress/fixtures/assets.minimal.json b/frontend/cypress/fixtures/assets.minimal.json index c80ae7f41..6f5295731 100644 --- a/frontend/cypress/fixtures/assets.minimal.json +++ b/frontend/cypress/fixtures/assets.minimal.json @@ -13,7 +13,7 @@ ], "6f0279e9ed041c3d710a9f57d0c02928416460c4b722ae3457a11eec381c526d": [ null, - "L-BTC", + "LBTC", "Liquid Bitcoin", 8 ], diff --git a/frontend/src/app/components/amount/amount.component.html b/frontend/src/app/components/amount/amount.component.html index cbbdb2dd9..ac469939f 100644 --- a/frontend/src/app/components/amount/amount.component.html +++ b/frontend/src/app/components/amount/amount.component.html @@ -40,8 +40,8 @@ - L- - tL- + L + tL t t s 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 fb280631a..86373a1ce 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 @@ -40,7 +40,7 @@ export class AssetsNavComponent implements OnInit { ngOnInit(): void { this.seoService.setTitle($localize`:@@ee8f8008bae6ce3a49840c4e1d39b4af23d4c263:Assets`); - this.seoService.setDescription($localize`:@@meta.description.liquid.assets:Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more.`); + this.seoService.setDescription($localize`:@@meta.description.liquid.assets:Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more.`); this.typeaheadSearchFn = this.typeaheadSearch; this.searchForm = this.formBuilder.group({ 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 6ccdc59cd..10025eed6 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 @@ -39,7 +39,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { adjustedLeft: number; adjustedRight: number; selected = { - 'L-BTC': true, + 'LBTC': true, 'BTC': true, 'USD': false, }; @@ -118,7 +118,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { legend: { data: [ { - name: 'L-BTC', + name: 'LBTC', inactiveColor: 'var(--grey)', textStyle: { color: 'white', @@ -217,7 +217,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { series: [ { data: pegSeries, - name: 'L-BTC', + name: 'LBTC', yAxisIndex: 0, color: '#116761', type: 'line', @@ -266,7 +266,7 @@ export class LbtcPegsGraphComponent implements OnInit, OnChanges { onLegendSelectChanged(e) { this.selected = e.selected; this.adjustedRight = this.selected['USD'] ? +this.right + 40 : +this.right; - this.adjustedLeft = this.selected['L-BTC'] || this.selected['BTC'] ? +this.left : +this.left - 40; + this.adjustedLeft = this.selected['LBTC'] || this.selected['BTC'] ? +this.left : +this.left - 40; this.pegsChartOptions = { ...this.pegsChartOptions, diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html index 18fdf6319..c2db79b36 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html @@ -3,7 +3,7 @@
    Unpeg
    -
    +
    {{ unbackedMonths.total }} Unpeg Event
    diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html index a88797a74..50c78da6f 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html @@ -1,8 +1,8 @@
    -
    L-BTC in circulation
    +
    LBTC in circulation
    -
    {{ (+currentPeg.amount) / 100000000 | number: '1.2-2' }} L-BTC
    +
    {{ (+currentPeg.amount) / 100000000 | number: '1.2-2' }} LBTC
    As of block 
    {{ currentPeg.lastBlockUpdate }} diff --git a/frontend/src/app/dashboard/dashboard.component.html b/frontend/src/app/dashboard/dashboard.component.html index 7c84351ca..e20436aa3 100644 --- a/frontend/src/app/dashboard/dashboard.component.html +++ b/frontend/src/app/dashboard/dashboard.component.html @@ -181,7 +181,7 @@
    -
    L-BTC Supply Against BTC Holdings
    +
    LBTC Supply Against BTC Holdings
    @@ -321,7 +321,7 @@
    -
    L-BTC Supply Against BTC Holdings
    +
    LBTC Supply Against BTC Holdings
    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 06756063f..32570348d 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -3614,7 +3614,7 @@ export const restApiDocsData = [ fragment: "get-asset-supply", title: "GET Asset Supply", description: { - default: "Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units." + default: "Get the current total supply of the specified asset. For the native asset (LBTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units." }, urlString: "/asset/:asset_id/supply[/decimal]", showConditions: liquidNetworks, diff --git a/frontend/src/app/services/assets.service.ts b/frontend/src/app/services/assets.service.ts index bb8756bd7..1e8d5346a 100644 --- a/frontend/src/app/services/assets.service.ts +++ b/frontend/src/app/services/assets.service.ts @@ -35,14 +35,14 @@ export class AssetsService { // @ts-ignore assets.push({ name: 'Liquid Bitcoin', - ticker: 'L-BTC', + ticker: 'LBTC', asset_id: this.nativeAssetId, }); } else if (this.stateService.network === 'liquidtestnet') { // @ts-ignore assets.push({ name: 'Test Liquid Bitcoin', - ticker: 'tL-BTC', + ticker: 'tLBTC', asset_id: this.nativeAssetId, }); } @@ -60,7 +60,7 @@ export class AssetsService { map((assetsMinimal) => { if (this.stateService.network === 'liquidtestnet') { // Hard coding the Liquid Testnet native asset - assetsMinimal['144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49'] = [null, "tL-BTC", "Test Liquid Bitcoin", 8]; + assetsMinimal['144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49'] = [null, "tLBTC", "Test Liquid Bitcoin", 8]; } return assetsMinimal; }), From 59d78c028cbf21e63c7422a828fb1ab8d2bfe84f Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 16 Jul 2025 17:09:32 +0200 Subject: [PATCH 308/534] Update Liquid logos --- .../svg-images/svg-images.component.html | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) 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 18290a0c7..32c99cc58 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -147,10 +147,10 @@ - + - + @@ -269,33 +269,43 @@ - - + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + From 40c21b9e089ac86d4c2bcd0bd7a76bee0ec8073d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 17 Jul 2025 12:10:52 +0000 Subject: [PATCH 309/534] support branded subdomains on liquid --- .../liquid-master-page.component.html | 74 ++++++++++--------- .../liquid-master-page.component.scss | 67 ++++++++++++++++- .../liquid-master-page.component.ts | 20 ++++- .../svg-images/svg-images.component.html | 34 +++++++++ 4 files changed, 153 insertions(+), 42 deletions(-) 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 6be7a7753..10af378b1 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 @@ -1,48 +1,52 @@ + @if (enterpriseInfo?.header_img) { + + } @else { + +
    + +
    +
    +
    + + }
    Offline
    Reconnecting...
    + + + @if (enterpriseInfo?.header_img) { + + } @else { + +
    + +
    +
    +
    + + @if (enterpriseInfo?.header_img) { + + } @else { + + } +
    +
    Offline
    +
    Reconnecting...
    +
    +
    + } +
    ${asm} ${node.value.script.asm.length > 300 ? '...' : ''} Simplicity tapscript: ${hex} ${node.value.script.hex.length > 300 ? '...' : ''}
    P2TR tapscriptP2WSH witness script -
    -
    - ... - -
    -
    P2TR Simplicity tapscript +
    +
    + ... + +
    +
    P2TR tapscriptP2WSH witness script +
    +
    + ... + +
    +
    nSequenceSimplicity tapscript: ${hex} ${node.value.script.hex.length > 300 ? '...' : ''}Simplicity script: ${hex} ${node.value.script.hex.length > 300 ? '...' : ''}
    P2TR Simplicity tapscriptP2TR Simplicity script
    diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 9c6ac5ca7..247a056a2 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -338,14 +338,15 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { } else { // check for simplicity script spends for (const vin of tx.vin) { if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.inner_witnessscript_asm) { - const hasAnnex = vin.witness?.[vin.witness.length - 1].startsWith('50'); - // script spend - if (vin.witness.length > (hasAnnex ? 2 : 1)) { - const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)]; - const script = vin.witness[vin.witness.length - (hasAnnex ? 3 : 2)]; - // simplicity tapleaf version - if (controlBlock.startsWith('be') || controlBlock.startsWith('bf')) { - vin.inner_simplicityscript = script; + const hasAnnex = vin.witness[vin.witness.length - 1].startsWith('50'); + const isScriptSpend = vin.witness.length > (hasAnnex ? 2 : 1); + if (isScriptSpend) { + const controlBlock = hasAnnex ? vin.witness[vin.witness.length - 2] : vin.witness[vin.witness.length - 1]; + const scriptHex = hasAnnex ? vin.witness[vin.witness.length - 3] : vin.witness[vin.witness.length - 2]; + const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; + // simplicity script spend + if (tapleafVersion === 0xbe) { + vin.inner_simplicityscript = scriptHex; } } } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 6a53b8578..69db4cc4a 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -128,6 +128,7 @@ export class AddressTypeInfo { // flags isMultisig?: { m: number, n: number }; tapscript?: boolean; + simplicity?: boolean; constructor (network: string, address: string, type?: AddressType, vin?: Vin[], vout?: Vout) { this.network = network; @@ -157,19 +158,20 @@ export class AddressTypeInfo { if (this.type === 'v1_p2tr') { for (let i = 0; i < vin.length; i++) { const v = vin[i]; - if (v.inner_witnessscript_asm) { - this.tapscript = true; - const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); + const hasAnnex = v.witness[v.witness.length - 1].startsWith('50'); + const isScriptSpend = v.witness.length > (hasAnnex ? 2 : 1); + if (isScriptSpend) { const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1]; const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2]; + const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; - if ((this.network === 'liquid' || this.network === 'liquidtestnet') - && (controlBlock.startsWith('be') || controlBlock.startsWith('bf')) - ) { + if (tapleafVersion === 0xc0 && v.inner_witnessscript_asm) { + this.tapscript = true; + this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); + } else if (this.network === 'liquid' || this.network === 'liquidtestnet' && tapleafVersion === 0xbe) { + this.simplicity = true; v.inner_simplicityscript = scriptHex; this.processScript(new ScriptInfo('inner_simplicityscript', scriptHex, null, v.witness, controlBlock, vinIds?.[i])); - } else { - this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); } } } From 3a521f9392f70360432ef4a028b61b26d88aac29 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 24 Jul 2025 15:46:18 +0200 Subject: [PATCH 323/534] Fix missing unit for numbers below 1000 in amount shortener --- frontend/src/app/shared/pipes/amount-shortener.pipe.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts index ec50285cb..84e300c30 100644 --- a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts +++ b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts @@ -11,10 +11,16 @@ export class AmountShortenerPipe implements PipeTransform { const sigfigs = args[3] || false; // if true, "digits" is the number of significant digits, not the number of decimal places if (num < 1000) { + let formattedNum: string; if (sigfigs) { - return Number(num.toPrecision(digits)); + formattedNum = Number(num.toPrecision(digits)).toString(); + } else { + formattedNum = num.toFixed(digits); } - return num.toFixed(digits); + + return unit !== undefined + ? formattedNum + ' ' + unit + : formattedNum; } const lookup = [ From 090d2cc4672f334f0f59035203faced108bebae8 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 24 Jul 2025 15:47:17 +0200 Subject: [PATCH 324/534] Larger units in amount shortener --- frontend/src/app/shared/pipes/amount-shortener.pipe.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts index 84e300c30..4a7fb1569 100644 --- a/frontend/src/app/shared/pipes/amount-shortener.pipe.ts +++ b/frontend/src/app/shared/pipes/amount-shortener.pipe.ts @@ -30,7 +30,9 @@ export class AmountShortenerPipe implements PipeTransform { { value: 1e9, symbol: isMoney ? 'B' : 'G' }, { value: 1e12, symbol: 'T' }, { value: 1e15, symbol: 'P' }, - { value: 1e18, symbol: 'E' } + { value: 1e18, symbol: 'E' }, + { value: 1e21, symbol: 'Z' }, + { value: 1e24, symbol: 'Y' } ]; const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; const item = lookup.slice().reverse().find((item) => num >= item.value); From b0a1254ff5b1d2f870c62c02fe3e7f7fa0acfe33 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 24 Jul 2025 15:55:51 +0200 Subject: [PATCH 325/534] Use amount shortener pipe for hashrate related data --- ...difficulty-adjustments-table.components.ts | 8 +++--- .../hashrate-chart.component.html | 2 +- .../hashrate-chart.component.ts | 26 +++++-------------- .../app/components/pool/pool.component.html | 2 +- .../src/app/components/pool/pool.component.ts | 11 +++----- 5 files changed, 16 insertions(+), 33 deletions(-) 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 1257a233a..474a8bcfe 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 @@ -3,7 +3,7 @@ import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { formatNumber } from '@angular/common'; -import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { StateService } from '@app/services/state.service'; @Component({ @@ -27,6 +27,7 @@ export class DifficultyAdjustmentsTable implements OnInit { constructor( @Inject(LOCALE_ID) public locale: string, private apiService: ApiService, + public amountShortenerPipe: AmountShortenerPipe, public stateService: StateService ) { } @@ -43,14 +44,11 @@ export class DifficultyAdjustmentsTable implements OnInit { const data = response.body; const tableData = []; for (const adjustment of data) { - const selectedPowerOfTen: any = selectPowerOfTen(adjustment[2]); tableData.push({ height: adjustment[1], timestamp: adjustment[0], change: (adjustment[3] - 1) * 100, - difficultyShorten: formatNumber( - adjustment[2] / selectedPowerOfTen.divider, - this.locale, `1.${decimals}-${decimals}`) + selectedPowerOfTen.unit + difficultyShorten: this.amountShortenerPipe.transform(adjustment[2], decimals) }); } this.isLoading = false; 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 b8a720743..d60404fb5 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html @@ -7,7 +7,7 @@
    Hashrate (1w)

    - {{ hashrates.currentHashrate | amountShortener: 1 : 'H/s' }} + {{ hashrates.currentHashrate | amountShortener: 3 : 'H/s' : false : true }}

    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 f8dc73b88..751c2d140 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -13,6 +13,7 @@ import { download } from '@app/shared/graphs.utils'; import { ActivatedRoute } from '@angular/router'; import { StateService } from '@app/services/state.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; @Component({ selector: 'app-hashrate-chart', @@ -60,6 +61,7 @@ export class HashrateChartComponent implements OnInit { private storageService: StorageService, private miningService: MiningService, private route: ActivatedRoute, + private amountShortenerPipe: AmountShortenerPipe, public stateService: StateService ) { } @@ -250,29 +252,19 @@ export class HashrateChartComponent implements OnInit { let hashrateString = ''; let difficultyString = ''; let hashrateStringMA = ''; - let hashratePowerOfTen: any = selectPowerOfTen(1); for (const tick of ticks) { if (tick.seriesIndex === 0) { // Hashrate - let hashrate = tick.data[1]; - hashratePowerOfTen = selectPowerOfTen(tick.data[1], 10); - hashrate = tick.data[1] / hashratePowerOfTen.divider; - hashrateString = `${tick.marker} ${tick.seriesName}: ${formatNumber(hashrate, this.locale, '1.0-0')} ${hashratePowerOfTen.unit}H/s
    `; + hashrateString = `${tick.marker} ${tick.seriesName}: ${this.amountShortenerPipe.transform(tick.data[1], 3, 'H/s', false, true)}
    `; } else if (tick.seriesIndex === 1) { // Difficulty - let difficultyPowerOfTen = hashratePowerOfTen; let difficulty = tick.data[1]; if (difficulty === null) { difficultyString = `${tick.marker} ${tick.seriesName}: No data
    `; } else { - difficultyPowerOfTen = selectPowerOfTen(tick.data[1]); - difficulty = tick.data[1] / difficultyPowerOfTen.divider; - difficultyString = `${tick.marker} ${tick.seriesName}: ${formatNumber(difficulty, this.locale, '1.2-2')} ${difficultyPowerOfTen.unit}
    `; + difficultyString = `${tick.marker} ${tick.seriesName}: ${this.amountShortenerPipe.transform(tick.data[1], 2, '', false)}
    `; } } else if (tick.seriesIndex === 2) { // Hashrate MA - let hashrate = tick.data[1]; - hashratePowerOfTen = selectPowerOfTen(tick.data[1], 10); - hashrate = tick.data[1] / hashratePowerOfTen.divider; - hashrateStringMA = `${tick.marker} ${tick.seriesName}: ${formatNumber(hashrate, this.locale, '1.0-0')} ${hashratePowerOfTen.unit}H/s`; + hashrateStringMA = `${tick.marker} ${tick.seriesName}: ${this.amountShortenerPipe.transform(tick.data[1], 3, 'H/s', false, true)}
    `; } } @@ -346,9 +338,7 @@ export class HashrateChartComponent implements OnInit { axisLabel: { color: 'rgb(110, 112, 121)', formatter: (val): string => { - const selectedPowerOfTen: any = selectPowerOfTen(val); - const newVal = Math.round(val / selectedPowerOfTen.divider); - return `${newVal} ${selectedPowerOfTen.unit}H/s`; + return this.amountShortenerPipe.transform(val, 3, 'H/s', false, true).toString(); }, showMinLabel: false, showMaxLabel: false, @@ -384,9 +374,7 @@ export class HashrateChartComponent implements OnInit { if (this.stateService.network === 'signet') { return `${val}`; } - const selectedPowerOfTen: any = selectPowerOfTen(val); - const newVal = Math.round(val / selectedPowerOfTen.divider); - return `${newVal} ${selectedPowerOfTen.unit}`; + return this.amountShortenerPipe.transform(val, 3, '', false, true).toString(); }, showMinLabel: false, showMaxLabel: false, diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index 2ee25f001..a493b2038 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -98,7 +98,7 @@
    {{ poolStats.estimatedHashrate | amountShortener : 1 : 'H/s' }}{{ poolStats.estimatedHashrate | amountShortener : 3 : 'H/s' : false : true }} {{ poolStats.avgBlockHealth }}% diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index 4b4b643a2..352e5972c 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -6,7 +6,7 @@ import { catchError, distinctUntilChanged, filter, map, share, switchMap, tap } 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 { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { formatNumber } from '@angular/common'; import { SeoService } from '@app/services/seo.service'; import { HttpErrorResponse } from '@angular/common/http'; @@ -63,6 +63,7 @@ export class PoolComponent implements OnInit { private websocketService: WebsocketService, private miningService: MiningService, private seoService: SeoService, + public amountShortenerPipe: AmountShortenerPipe, ) { this.auditAvailable = this.stateService.env.AUDIT; } @@ -217,9 +218,7 @@ export class PoolComponent implements OnInit { for (const tick of ticks) { if (tick.seriesIndex === 0) { - let hashratePowerOfTen = selectPowerOfTen(tick.data[1], 10); - let hashrateData = tick.data[1] / hashratePowerOfTen.divider; - hashrateString = `${tick.marker} ${tick.seriesName}: ${formatNumber(hashrateData, this.locale, '1.0-0')} ${hashratePowerOfTen.unit}H/s
    `; + hashrateString = `${tick.marker} ${tick.seriesName}: ${this.amountShortenerPipe.transform(tick.data[1], 3, 'H/s', false, true)}
    `; } else if (tick.seriesIndex === 1) { dominanceString = `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.0-2')}%`; } @@ -271,9 +270,7 @@ export class PoolComponent implements OnInit { axisLabel: { color: 'rgb(110, 112, 121)', formatter: (val) => { - const selectedPowerOfTen: any = selectPowerOfTen(val); - const newVal = Math.round(val / selectedPowerOfTen.divider); - return `${newVal} ${selectedPowerOfTen.unit}H/s` + return this.amountShortenerPipe.transform(val, 3, 'H/s', false, true).toString(); } }, splitLine: { From ae57b85c53ca811c6c80d31f48d7ac3a914e1b63 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 25 Jul 2025 17:44:00 +0900 Subject: [PATCH 326/534] ops: Update check script for new servers --- production/check | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/production/check b/production/check index d1bba7826..8b97fdcbe 100755 --- a/production/check +++ b/production/check @@ -1,5 +1,4 @@ #!/usr/bin/env zsh -#for j in fmt va1 fra tk7;do for i in 1 2 3 4 5 6;do echo -n 20$i.$j: ;curl -i -s https://node20$i.$j.mempool.space/api/v1/services/accelerator/accelerations|head -1;done;done check_mempoolspace_frontend_git_hash() { echo -n $(curl -s --connect-to "::node${1}.${2}.mempool.space:443" https://mempool.space/en-US/resources/config.js|grep GIT_COMMIT_HASH_MEMPOOL_SPACE|cut -d "'" -f2|cut -c1-8) } @@ -27,13 +26,13 @@ check_liquid_electrs_git_hash() { check_contributors_md5_hash() { echo -n $(curl -s --connect-to "::node${1}.${2}.mempool.space:443" https://mempool.space/api/v1/contributors|md5|cut -c1-8) } -for site in va1 fra tk7 sg1 hnl;do +for site in hnl sv1 fra tk7 va1 sg1;do echo "${site}" for node in 201 202 203 204 205 206 207 208 209 210 211 212 213 214;do - [ "${site}" = "fmt" ] && [ "${node}" = 203 ] && continue + [ "${site}" = "sv1" ] && [ "${node}" -lt 202 ] && continue + [ "${site}" = "sv1" ] && [ "${node}" -gt 203 ] && continue [ "${site}" = "sg1" ] && [ "${node}" -gt 204 ] && continue [ "${site}" = "hnl" ] && [ "${node}" -gt 204 ] && continue - [ "${site}" = "fmt" ] && [ "${node}" -gt 206 ] && continue [ "${site}" = "tk7" ] && [ "${node}" -gt 206 ] && continue echo -n "node${node}.${site}: " # check_mempoolspace_frontend_git_hash $node $site From 9441b928185c1ccd3fcd41bbb26adecffcab4d9b Mon Sep 17 00:00:00 2001 From: natsoni Date: Fri, 25 Jul 2025 12:16:57 +0200 Subject: [PATCH 327/534] Add special block for Simplicity activation --- frontend/src/app/app.constants.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/app.constants.ts b/frontend/src/app/app.constants.ts index 4be2a61f9..2b6661fcc 100644 --- a/frontend/src/app/app.constants.ts +++ b/frontend/src/app/app.constants.ts @@ -274,7 +274,12 @@ export const specialBlocks = { labelEvent: 'Bitcoin\'s 15th Halving', labelEventCompleted: 'Block Subsidy has halved to 0.00152587 BTC per block', networks: ['mainnet', 'testnet', 'testnet4'], - } + }, + '3477600': { + labelEvent: 'Simplicity activation', + labelEventCompleted: 'Simplicity has been activated!', + networks: ['liquid'], + }, }; export const fiatCurrencies = { From 981cb35240f2bd730ede18bd74cc71883153cca6 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 26 Jul 2025 01:40:15 +0000 Subject: [PATCH 328/534] improve op_return display --- .../transactions-list.component.html | 24 +++++++++++++++++-- .../transactions-list.component.ts | 7 ++++++ 2 files changed, 29 insertions(+), 2 deletions(-) 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 70c559c33..5ec98d488 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -341,7 +341,18 @@ @if (vout.isRunestone) { } @else { - {{ vout.scriptpubkey_asm | slice:0:200 | hex2ascii }} + + {{ vout.scriptpubkey_asm | hex2ascii | slice:0:200 }} + + @if ((vout.scriptpubkey_asm | hex2ascii).length > 200) { + @if (!showFullOpReturnPreview[vindex]) { + Show more + } @else { + Show less + } + } + + } {{ vout.scriptpubkey_type | scriptpubkeyType }} @@ -392,6 +403,15 @@
    + {{ vout.scriptpubkey_asm | hex2ascii | slice:0:8000 }} +
    @@ -428,7 +448,7 @@ -
    OP_RETURN data + @if (!showFullOpReturnData[vindex]) { {{ (vout.scriptpubkey_asm | hex2ascii | slice:0:1000) }} } @else { diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 241c39101..80a144ca8 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -66,6 +66,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { showFullScriptPubkeyAsm: { [voutIndex: number]: boolean } = {}; showFullScriptPubkeyHex: { [voutIndex: number]: boolean } = {}; showFullOpReturnData: { [voutIndex: number]: boolean } = {}; + showFullOpReturnPreview: { [voutIndex: number]: boolean } = {}; showOrdData: { [key: string]: { show: boolean; inscriptions?: Inscription[]; runestone?: Runestone, runeInfo?: { [id: string]: { etching: Etching; txid: string; } }; } } = {}; similarityMatches: Map> = new Map(); @@ -551,6 +552,12 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { this.showFullOpReturnData[voutIndex] = !this.showFullOpReturnData[voutIndex]; } + toggleShowFullOpReturnPreview(voutIndex: number): void { + console.log('toggleShowFullOpReturnPreview', voutIndex); + this.showFullOpReturnPreview[voutIndex] = !this.showFullOpReturnPreview[voutIndex]; + console.log(this.showFullOpReturnPreview[voutIndex]); + } + toggleOrdData(txid: string, type: 'vin' | 'vout', index: number) { const tx = this.transactions.find((tx) => tx.txid === txid); if (!tx) { From 048a706b2516120f0d3e90978959482e766ef854 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 26 Jul 2025 10:23:31 +0000 Subject: [PATCH 329/534] fix op_return toggle overflow --- .../transactions-list.component.html | 22 +++++++++++-------- .../transactions-list.component.scss | 22 +++++++++++++++++++ .../transactions-list.component.ts | 2 -- 3 files changed, 35 insertions(+), 11 deletions(-) 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 5ec98d488..bb5fa4930 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -342,16 +342,20 @@ } @else { - {{ vout.scriptpubkey_asm | hex2ascii | slice:0:200 }} - - @if ((vout.scriptpubkey_asm | hex2ascii).length > 200) { - @if (!showFullOpReturnPreview[vindex]) { - Show more - } @else { - Show less + @if ((vout.scriptpubkey_asm | hex2ascii).length > 200) { + {{ vout.scriptpubkey_asm | hex2ascii | slice:0:200 }} + + @if ((vout.scriptpubkey_asm | hex2ascii).length > 200) { + @if (!showFullOpReturnPreview[vindex]) { + Show more + } @else { + Show less + } } - } - + + } @else { + {{ vout.scriptpubkey_asm | hex2ascii }} + } } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 4aa93907b..24e459d44 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -324,3 +324,25 @@ h2 { background-color: var(--primary); } } + +.scriptmessage.opreturn-msg { + max-width: 20px; + @media (min-width: 476px) { + max-width: 110px; + } + @media (min-width: 576px) { + max-width: 190px; + } + @media (min-width: 768px) { + max-width: 330px; + } + @media (min-width: 850px) { + max-width: 452px; + } + @media (min-width: 992px) { + max-width: 120px; + } + @media (min-width: 1200px) { + max-width: 180px; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 80a144ca8..582f6a92a 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -553,9 +553,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { } toggleShowFullOpReturnPreview(voutIndex: number): void { - console.log('toggleShowFullOpReturnPreview', voutIndex); this.showFullOpReturnPreview[voutIndex] = !this.showFullOpReturnPreview[voutIndex]; - console.log(this.showFullOpReturnPreview[voutIndex]); } toggleOrdData(txid: string, type: 'vin' | 'vout', index: number) { From 4a69473e3e67cf77c70d3141a3a9803bbce0f06d Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 28 Jul 2025 00:47:43 +0700 Subject: [PATCH 330/534] extract i18n from source --- .../accelerator-dashboard.component.html | 2 +- .../app/components/pool/pool.component.html | 5 +- .../transaction-raw.component.html | 2 +- .../transactions-list.component.html | 2 +- .../address-type/address-type.component.html | 2 +- frontend/src/app/shared/filters.utils.ts | 2 +- frontend/src/locale/messages.xlf | 3166 ++++++++++------- 7 files changed, 1947 insertions(+), 1234 deletions(-) diff --git a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html index 9095a8129..b2a0aad0f 100644 --- a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html +++ b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html @@ -52,7 +52,7 @@ [ngClass]="{'inactive': timespan === '1m'}">1m | all + [ngClass]="{'inactive': timespan === 'all'}">all diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index a493b2038..40a45f3e3 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -219,9 +219,8 @@ - diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 7fc449ca4..502bca6d9 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -13,7 +13,7 @@ -

    Error decoding transaction, reason: {{ error }}

    +

    Error decoding transaction, reason: {{ error }}

    } 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 70c559c33..1bc284d3f 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -120,7 +120,7 @@ - + From c4b6f0b35da04bcd6f8e79f4772d43a86443d218 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 1 Aug 2025 05:36:52 +0000 Subject: [PATCH 339/534] handle missing USD price data --- backend/src/repositories/PricesRepository.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/backend/src/repositories/PricesRepository.ts b/backend/src/repositories/PricesRepository.ts index 13392f0cf..e12027a74 100644 --- a/backend/src/repositories/PricesRepository.ts +++ b/backend/src/repositories/PricesRepository.ts @@ -296,6 +296,7 @@ class PricesRepository { id, USD FROM prices + WHERE USD >= 0 ORDER BY time `); return times as {time: number, id: number, USD: number}[]; @@ -305,6 +306,7 @@ class PricesRepository { const [rates] = await DB.query(` SELECT ${ApiPriceFields} FROM prices + WHERE USD >= 0 ORDER BY time DESC LIMIT 1` ); @@ -321,6 +323,7 @@ class PricesRepository { SELECT ${ApiPriceFields} FROM prices WHERE UNIX_TIMESTAMP(time) < ? + AND USD >= 0 ORDER BY time DESC LIMIT 1`, [timestamp] @@ -332,6 +335,7 @@ class PricesRepository { const [latestPrices] = await DB.query(` SELECT ${ApiPriceFields} FROM prices + WHERE USD >= 0 ORDER BY time DESC LIMIT 1 `); @@ -429,6 +433,7 @@ class PricesRepository { const [rates] = await DB.query(` SELECT ${ApiPriceFields} FROM prices + WHERE USD >= 0 ORDER BY time DESC `); if (!Array.isArray(rates)) { From 35cd476d0e72fa8a572c22352db59be9ef16b8cb Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 1 Aug 2025 07:08:24 +0000 Subject: [PATCH 340/534] Add db migration to remove bad price data --- backend/src/api/database-migration.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index a10f65a00..973dab7e1 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 = 100; + private static currentVersion = 101; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -1299,6 +1299,10 @@ class DatabaseMigration { queries.push(`DELETE FROM state WHERE name = 'last_weekly_hashrates_indexing'`); } + if (version < 101) { + queries.push(`DELETE FROM prices WHERE USD = -1`); + } + return queries; } From 66eb31bb4625e8c1e77426abbef8a3f2bb235286 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 1 Aug 2025 07:09:12 +0000 Subject: [PATCH 341/534] Fix broken blocks_prices data during indexing --- backend/src/repositories/BlocksRepository.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 1935ed4e2..309cff2ce 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -887,7 +887,9 @@ class BlocksRepository { SELECT UNIX_TIMESTAMP(blocks.blockTimestamp) as timestamp, blocks.height FROM blocks LEFT JOIN blocks_prices ON blocks.height = blocks_prices.height + LEFT JOIN prices ON blocks_prices.price_id = prices.id WHERE blocks_prices.height IS NULL + OR prices.id IS NULL ORDER BY blocks.height `); return rows; @@ -907,6 +909,7 @@ class BlocksRepository { query += ` (${price.height}, ${price.priceId}),`; } query = query.slice(0, -1); + query += ` ON DUPLICATE KEY UPDATE price_id = VALUES(price_id)`; await DB.query(query); } catch (e: any) { if (e.errno === 1062) { // ER_DUP_ENTRY - This scenario is possible upon node backend restart From 252b7961d18aafdda84a9b24819053495f966569 Mon Sep 17 00:00:00 2001 From: natsoni Date: Fri, 1 Aug 2025 14:50:38 +0200 Subject: [PATCH 342/534] Add 'None' filter mode to mempool goggles --- .../block-filters/block-filters.component.html | 5 ++++- .../block-filters/block-filters.component.scss | 15 +++++++++++++++ .../block-overview-graph.component.ts | 14 +++++++++++++- frontend/src/app/shared/filters.utils.ts | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) 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 be692cfa9..d85b22f72 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.html +++ b/frontend/src/app/components/block-filters/block-filters.component.html @@ -1,4 +1,4 @@ -
    +
    @@ -23,6 +23,9 @@ +
    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 4312dd7b2..bdcf17675 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.scss +++ b/frontend/src/app/components/block-filters/block-filters.component.scss @@ -94,6 +94,15 @@ } } + &.none-mode { + .filter-tag { + border: solid 1px var(--danger); + &.selected { + background-color: var(--danger); + } + } + } + .btn-group { font-size: 0.9em; margin-right: 0.25em; @@ -126,6 +135,12 @@ background: var(--success); } } + &.red { + border: solid 1px var(--danger); + &.active { + background: var(--danger); + } + } &.yellow { border: solid 1px #bf7815; &.active { diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 419a51995..db92b294b 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -656,7 +656,19 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, On getFilterColorFunction(flags: bigint, gradient: 'fee' | 'age'): ((tx: TxView) => Color) { return (tx: TxView) => { - if ((this.filterMode === 'and' && (tx.bigintFlags & flags) === flags) || (this.filterMode === 'or' && (flags === 0n || (tx.bigintFlags & flags) > 0n))) { + let matches = false; + switch (this.filterMode) { + case 'and': + matches = (tx.bigintFlags & flags) === flags; + break; + case 'or': + matches = flags === 0n || (tx.bigintFlags & flags) > 0n; + break; + case 'nor': + matches = flags === 0n || (tx.bigintFlags & flags) === 0n; + break; + } + if (matches) { if (this.themeService.theme !== 'contrast' && this.themeService.theme !== 'bukele') { return (gradient === 'age') ? ageColorFunction(tx, defaultColors.fee, defaultAuditColors, this.relativeTime || (Date.now() / 1000)) : defaultColorFunction(tx, defaultColors.fee, defaultAuditColors, this.relativeTime || (Date.now() / 1000)); } else { diff --git a/frontend/src/app/shared/filters.utils.ts b/frontend/src/app/shared/filters.utils.ts index c772f017e..f78903f5f 100644 --- a/frontend/src/app/shared/filters.utils.ts +++ b/frontend/src/app/shared/filters.utils.ts @@ -9,7 +9,7 @@ export interface Filter { txPage?: boolean, } -export type FilterMode = 'and' | 'or'; +export type FilterMode = 'and' | 'or' | 'nor'; export type GradientMode = 'fee' | 'age'; From a04df3f4ee078cfbfbfb5333f19bbb4d612f9f03 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 1 Aug 2025 13:14:16 +0000 Subject: [PATCH 343/534] add hybrid build hash to monitoring --- backend/src/api/bitcoin/esplora-api.ts | 46 ++++++++++++++++++- .../server-health.component.html | 5 +- .../server-health/server-health.component.ts | 7 +++ 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index 6ee51fda4..950bb18b4 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -1,6 +1,7 @@ import config from '../../config'; import axios, { isAxiosError } from 'axios'; import http from 'http'; +import https from 'https'; import { AbstractBitcoinApi, HealthCheckHost } from './bitcoin-api-abstract-factory'; import { IEsploraApi } from './esplora-api.interface'; import logger from '../../logger'; @@ -23,6 +24,7 @@ interface FailoverHost { publicDomain: string, hashes: { frontend?: string, + hybrid?: string, backend?: string, electrs?: string, lastUpdated: number, @@ -142,7 +144,8 @@ class FailoverRouter { if (Date.now() - host.hashes.lastUpdated > this.gitHashInterval) { await Promise.all([ this.$updateFrontendGitHash(host), - this.$updateBackendGitHash(host) + this.$updateBackendGitHash(host), + config.MEMPOOL.OFFICIAL ? this.$updateHybridGitHash(host) : Promise.resolve(), ]); host.hashes.lastUpdated = Date.now(); } @@ -251,6 +254,47 @@ class FailoverRouter { if (match && match[1]?.length) { host.hashes.frontend = match[1]; } + const hybridMatch = response.data.match(/GIT_COMMIT_HASH_MEMPOOL_SPACE\s*=\s*['"](.*?)['"]/); + if (hybridMatch && hybridMatch[1]?.length) { + host.hashes.hybrid = hybridMatch[1]; + } + } catch (e) { + // failed to get frontend build hash - do nothing + } + } + + private async $updateHybridGitHash(host: FailoverHost): Promise { + try { + const response: string = await new Promise((resolve, reject) => { + const req = https.request({ + hostname: host.publicDomain.replace('https://', '').replace('http://', ''), + port: 443, + path: '/en-US/resources/config.js', + method: 'GET', + headers: { + 'Host': 'mempool.space' + }, + timeout: config.ESPLORA.FALLBACK_TIMEOUT, + }, (res) => { + let data = ''; + res.on('data', chunk => data += chunk); + res.on('end', () => { + if (res.statusCode === 200) { + resolve(data); + } else { + reject(new Error(`Failed to get hybrid git hash: ${res.statusCode}`)); + } + }); + }); + req.on('error', (e) => { + reject(e); + }); + req.end(); + }); + const match = response.match(/GIT_COMMIT_HASH_MEMPOOL_SPACE\s*=\s*['"](.*?)['"]/); + if (match && match[1]?.length) { + host.hashes.hybrid = match[1]; + } } catch (e) { // failed to get frontend build hash - do nothing } 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 a3a4a31e5..e5dfd5038 100644 --- a/frontend/src/app/components/server-health/server-health.component.html +++ b/frontend/src/app/components/server-health/server-health.component.html @@ -19,6 +19,7 @@
    + @@ -31,10 +32,10 @@ - + - + From 62dd1ca1db4b2170a4fcc713c47e579b7270d0fa Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 7 Aug 2025 19:19:13 +0200 Subject: [PATCH 350/534] [prices] only print "latest avg price from exchanges" upon success --- backend/src/tasks/price-updater.ts | 3 ++- frontend/src/app/app-routing.module.ts | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 8fd2779cf..2cf0fbdb4 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -271,7 +271,6 @@ class PriceUpdater { } this.latestPrices.time = Math.round(new Date().getTime() / 1000); - logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestPrices)}`); if (!forceUpdate) { this.cyclePosition++; @@ -280,6 +279,8 @@ class PriceUpdater { if (this.latestPrices.USD === -1) { this.latestPrices = await PricesRepository.$getLatestConversionRates(); logger.warn(`No BTC price available, falling back to latest known price: ${JSON.stringify(this.latestPrices)}`); + } else { + logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestPrices)}`); } if (this.ratesChangedCallback && this.latestPrices.USD > 0) { diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index d1748312d..5f69b55cf 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -7,8 +7,6 @@ import { MempoolBlockViewComponent } from '@components/mempool-block-view/mempoo 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 || {}; From 3925eba3bbbabad7d46b7f2298f35cc2b9fa5be5 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 9 Aug 2025 08:52:00 +0000 Subject: [PATCH 351/534] add treasuries dashboard supply widget --- .../supply/treasuries-supply.component.html | 109 ++++++++ .../supply/treasuries-supply.component.scss | 240 ++++++++++++++++++ .../supply/treasuries-supply.component.ts | 189 ++++++++++++++ .../treasuries-pie.component.ts | 2 - .../treasuries/treasuries.component.html | 8 +- frontend/src/app/graphs/graphs.module.ts | 2 + 6 files changed, 547 insertions(+), 3 deletions(-) create mode 100644 frontend/src/app/components/treasuries/supply/treasuries-supply.component.html create mode 100644 frontend/src/app/components/treasuries/supply/treasuries-supply.component.scss create mode 100644 frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts diff --git a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.html b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.html new file mode 100644 index 000000000..e8c2c9e12 --- /dev/null +++ b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.html @@ -0,0 +1,109 @@ +
    Bitcoin Supply
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    in treasuries
    +
    +
    +
    + {{ percentSupply | number: '1.2-2' }} + % +
    +
    of total supply
    +
    +
    +
    + +
    +
    yet to be mined
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    In Treasuries
    +
    + +
    Mined
    +
    + +
    Lost
    +
    + +
    Yet to be mined
    +
    +
    +
    {{ (hoverSection.share * 100) | number: '1.2-2' }}%
    +
    + +
    +
    diff --git a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.scss b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.scss new file mode 100644 index 000000000..18d212b6e --- /dev/null +++ b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.scss @@ -0,0 +1,240 @@ +.treasury-supply-container { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.supply-stats { + display: flex; + flex-direction: row; + justify-content: space-around; + height: 50.5px; + .shared-block { + color: var(--transparent-fg); + font-size: 12px; + } + .item { + padding: 0 5px; + width: 100%; + &:nth-child(1) { + display: none; + @media (min-width: 485px) { + display: table-cell; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: table-cell; + } + } + } + .card-text { + font-size: 18px; + margin: auto; + position: relative; + margin-bottom: 0.2rem; + &.bigger { + font-size: 20px; + margin-bottom: 0; + } + } +} + + +.supply-skeleton { + display: flex; + flex-direction: row; + justify-content: space-around; + height: 50.5px; + @media (min-width: 376px) { + flex-direction: row; + } + .item { + min-width: 120px; + max-width: 150px; + margin: 0; + width: -webkit-fill-available; + @media (min-width: 376px) { + margin: 0 auto 0px; + } + &:first-child{ + display: none; + @media (min-width: 485px) { + display: block; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: block; + } + } + &:last-child { + margin-bottom: 0; + } + } + .card-text { + .skeleton-loader { + width: 100%; + display: block; + &:first-child { + margin: 10px auto 4px; + max-width: 80px; + } + &:last-child { + margin: 10px auto 0; + max-width: 120px; + } + } + } +} + +.card { + background-color: var(--bg); + height: 100%; +} + +.card-title { + color: var(--title-fg); + font-size: 1rem; +} + +.progress { + display: inline-flex; + width: 100%; + background-color: var(--secondary); + height: 1.1rem; + max-width: 180px; +} + +.skeleton-loader { + max-width: 100%; +} + +.more-padding { + padding: 18px; +} + +.small-bar { + height: 8px; + top: -4px; + max-width: 120px; +} + +.loading-container { + min-height: 50.5px; +} + +.main-title { + position: relative; + color: var(--fg); + opacity: var(--opacity); + margin-top: -13px; + font-size: 10px; + text-transform: uppercase; + font-weight: 500; + text-align: center; + padding-bottom: 3px; +} + +.card-wrapper { + .card { + height: auto !important; + } + .card-body { + display: flex; + flex: inherit; + text-align: center; + flex-direction: column; + justify-content: space-around; + padding: 20px; + } +} + +.retarget-sign { + margin-right: -3px; + font-size: 14px; + top: -2px; + position: relative; +} + +.previous-retarget-sign { + margin-right: -2px; + font-size: 10px; +} + +.symbol { + font-size: 13px; + white-space: nowrap; +} + +.supply-progress, .halving-progress { + width: 100%; + height: 22px; + margin-bottom: 12px; +} + +.supply-shares { + display: block; + width: 100%; + background: var(--secondary); + + .rect { + fill: var(--secondary); + + &.lost { + fill: var(--red); + } + &.mined { + fill: url(#supply-gradient); + } + &.treasuries { + fill: var(--success); + } + + &.hover { + fill: #535e84; + &.lost { + fill: #e94d86; + } + &.mined { + fill: url(#supply-hover-gradient); + } + &.treasuries { + fill: #29d951; + } + } + } +} + +.inactive { + color: var(--transparent-fg); +} + +.supply-tooltip { + position: absolute; + z-index: 1000; + background-color: var(--bg); + padding: 10px; + border-radius: 5px; +} + +.supply-tooltip { + position: fixed; + 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); + padding: 10px 15px; + text-align: left; + pointer-events: none; + max-width: 300px; + min-width: 200px; + text-align: center; + + p { + margin: 0; + white-space: nowrap; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts new file mode 100644 index 000000000..9c36f6fbf --- /dev/null +++ b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts @@ -0,0 +1,189 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, LOCALE_ID, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core'; +import { combineLatest, map, Observable, startWith, Subscription } from 'rxjs'; +import { StateService } from '@app/services/state.service'; +import { WalletStats } from '../../../shared/wallet-stats'; +import { AddressTxSummary } from '../../../interfaces/electrs.interface'; +import { Treasury } from '../../../interfaces/node-api.interface'; + + +interface SupplyShare { + share: number; + btc: number; + x: string; + w: string; + label: string; + type: string; +} + +@Component({ + selector: 'app-treasuries-supply', + templateUrl: './treasuries-supply.component.html', + styleUrls: ['./treasuries-supply.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TreasuriesSupplyComponent implements OnInit, OnDestroy { + @Input() walletStats: Record; + @Input() walletSummaries$: Observable>; + @Input() treasuries: Treasury[] = []; + @Input() showTitle = true; + + loadingTreasurySupply = true; + isMobile: boolean; + + walletBalance: Record = {}; + + @ViewChild('supplySvg') supplySvgElement: ElementRef; + @ViewChild('tooltip') tooltipElement: ElementRef; + + isLoadingWebSocket$: Observable; + subscription: Subscription; + + currentHeight: number; + shares: SupplyShare[]; + + totalTreasuries: number; + percentSupply: number; + toBeMined: number; + + tooltipPosition = { x: 0, y: 0 }; + hoverSection: SupplyShare | void; + + constructor( + public stateService: StateService, + private cd: ChangeDetectorRef, + @Inject(LOCALE_ID) private locale: string, + ) { } + + ngOnInit(): void { + this.isLoadingWebSocket$ = this.stateService.isLoadingWebSocket$; + this.init(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.walletSummaries$ || changes.treasuries || changes.walletStats) { + this.init(); + } + } + + init(): void { + if (this.walletSummaries$ && this.treasuries && this.walletStats) { + this.subscription?.unsubscribe(); + this.subscription = combineLatest([this.stateService.chainTip$.pipe(startWith(this.stateService.latestBlockHeight)), this.walletSummaries$]).pipe( + map(([chainTip, summaries]) => { + this.currentHeight = chainTip; + this.walletBalance = {}; + for (const treasury of this.treasuries) { + const total = this.walletStats[treasury.wallet] ? this.walletStats[treasury.wallet].balance : summaries[treasury.wallet]?.reduce((acc, tx) => acc + tx.value, 0) || 0; + this.walletBalance[treasury.wallet] = total / 100_000_000; + } + this.processSupplyShares(); + }) + ).subscribe(); + } + } + + processSupplyShares(): void { + const total = 20999999.9769; + + // calculate total mined based on block height & subsidy schedule + let mined = 0; + for (let i = 0; i < this.currentHeight; i += 210000) { + const subsidy = 50 / Math.pow(2, Math.floor(i / 210000)); + if ((i + 210000) <= this.currentHeight) { + mined += subsidy * 210000; + } else { + mined += subsidy * (this.currentHeight - i); + } + } + + const lost = 1456206; // TODO: track this dynamically + const treasuryTotal = Object.values(this.walletBalance).reduce((acc, balance) => acc + balance, 0); + const otherMined = mined - treasuryTotal - lost; + const yetToBeMined = total - mined; + + this.totalTreasuries = treasuryTotal; + this.percentSupply = (treasuryTotal / total) * 100; + this.toBeMined = yetToBeMined; + + // calculate share of total supply for each treasury + this.shares = []; + let runningTotal = 0; + this.shares.push({ + share: (treasuryTotal / total), + btc: treasuryTotal, + x: ((runningTotal / total) * 100).toFixed(2) + '%', + w: ((treasuryTotal / total) * 100).toFixed(2) + '%', + label: 'Treasuries', + type: 'treasuries', + }); + runningTotal += treasuryTotal; + this.shares.push({ + share: (otherMined / total), + btc: otherMined, + x: ((runningTotal / total) * 100).toFixed(2) + '%', + w: ((otherMined / total) * 100).toFixed(2) + '%', + label: 'Other mined', + type: 'mined', + }); + runningTotal += otherMined; + this.shares.push({ + share: (yetToBeMined / total), + btc: yetToBeMined, + x: ((runningTotal / total) * 100).toFixed(2) + '%', + w: ((yetToBeMined / total) * 100).toFixed(2) + '%', + label: 'Yet to be mined', + type: 'unmined', + }); + runningTotal += yetToBeMined; + this.shares.push({ + share: (lost / total), + btc: lost, + x: ((runningTotal / total) * 100).toFixed(2) + '%', + w: ((lost / total) * 100).toFixed(2) + '%', + label: 'Lost', + type: 'lost', + }); + runningTotal += lost; + this.loadingTreasurySupply = false; + } + + @HostListener('pointerdown', ['$event']) + onPointerDown(event): void { + if (this.supplySvgElement?.nativeElement?.contains(event.target)) { + this.onPointerMove(event); + event.preventDefault(); + } + } + + @HostListener('pointermove', ['$event']) + onPointerMove(event): void { + if (this.supplySvgElement?.nativeElement?.contains(event.target)) { + let x = event.clientX; + const y = event.clientY - 100; + if (this.tooltipElement) { + const elementBounds = this.tooltipElement.nativeElement.getBoundingClientRect(); + x -= elementBounds.width / 2; + x = Math.min(Math.max(x, 20), (window.innerWidth - 20 - elementBounds.width)); + } + this.tooltipPosition = { x, y }; + this.cd.markForCheck(); + } + } + + onHover(_, share: SupplyShare): void { + this.hoverSection = share; + } + + onBlur(): void { + this.hoverSection = undefined; + } + + @HostListener('window:resize', ['$event']) + onResize(): void { + this.isMobile = window.innerWidth <= 767.98; + } + + ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } +} diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index 0219f4642..29685807f 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -128,8 +128,6 @@ export class TreasuriesPieComponent implements OnChanges { share: ((total - treasuriesTotal) / total) * 100, color: 'orange' }); - - console.log('ALL! ', entries); } const otherEntry = { id: 'other', label: 'Other', balance: 0, share: 0 }; diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index f86a3ccf3..84056b7cc 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -1,6 +1,12 @@
    -
    + +
    +
    +
    + +
    +
    diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index a6847af3b..7426acc09 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -40,6 +40,7 @@ import { WalletPreviewComponent } from '@components/wallet/wallet-preview.compon import { AddressGraphComponent } from '@components/address-graph/address-graph.component'; import { TreasuriesGraphComponent } from '@components/treasuries/treasuries-graph/treasuries-graph.component'; import { TreasuriesPieComponent } from '@components/treasuries/treasuries-pie/treasuries-pie.component'; +import { TreasuriesSupplyComponent } from '@components/treasuries/supply/treasuries-supply.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'; @@ -87,6 +88,7 @@ import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; AddressGraphComponent, TreasuriesGraphComponent, TreasuriesPieComponent, + TreasuriesSupplyComponent, UtxoGraphComponent, ActiveAccelerationBox, AddressesTreemap, From d0b2c4cdcb01ba3eb2bc6b0b7b967b9e09881196 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 9 Aug 2025 08:52:42 +0000 Subject: [PATCH 352/534] add treasuries dashboard verification progress widget --- .../treasuries/treasuries.component.html | 1 + .../verify/treasuries-verify.component.html | 106 ++++++++ .../verify/treasuries-verify.component.scss | 233 ++++++++++++++++++ .../verify/treasuries-verify.component.ts | 177 +++++++++++++ frontend/src/app/graphs/graphs.module.ts | 2 + .../src/app/interfaces/node-api.interface.ts | 2 + frontend/src/app/shared/wallet-stats.ts | 37 ++- 7 files changed, 554 insertions(+), 4 deletions(-) create mode 100644 frontend/src/app/components/treasuries/verify/treasuries-verify.component.html create mode 100644 frontend/src/app/components/treasuries/verify/treasuries-verify.component.scss create mode 100644 frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index 84056b7cc..36a15ef04 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -2,6 +2,7 @@
    +
    diff --git a/frontend/src/app/components/treasuries/verify/treasuries-verify.component.html b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.html new file mode 100644 index 000000000..0a9bfd7e9 --- /dev/null +++ b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.html @@ -0,0 +1,106 @@ +
    Verified Treasuries
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    +
    +
    +
    + {{ verifiedTotalAddresses }} +
    +
    verified addresses
    +
    +
    +
    + {{ percentVerified | number: '1.2-2' }} + % +
    +
    verified of total
    +
    +
    +
    + +
    +
    verified holdings
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    + + +
    Verified
    +
    + +
    Public
    +
    + +
    All Treasuries
    +
    +
    +
    {{ (hoverSection.share * 100) | number: '1.2-2' }}%
    +
    + +
    +
    diff --git a/frontend/src/app/components/treasuries/verify/treasuries-verify.component.scss b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.scss new file mode 100644 index 000000000..0d1972ca6 --- /dev/null +++ b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.scss @@ -0,0 +1,233 @@ +.treasury-verify-container { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.verify-stats { + display: flex; + flex-direction: row; + justify-content: space-around; + height: 50.5px; + .shared-block { + color: var(--transparent-fg); + font-size: 12px; + } + .item { + padding: 0 5px; + width: 100%; + &:nth-child(1) { + display: none; + @media (min-width: 485px) { + display: table-cell; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: table-cell; + } + } + } + .card-text { + font-size: 18px; + margin: auto; + position: relative; + margin-bottom: 0.2rem; + &.bigger { + font-size: 20px; + margin-bottom: 0; + } + } +} + + +.verify-skeleton { + display: flex; + flex-direction: row; + justify-content: space-around; + height: 50.5px; + @media (min-width: 376px) { + flex-direction: row; + } + .item { + min-width: 120px; + max-width: 150px; + margin: 0; + width: -webkit-fill-available; + @media (min-width: 376px) { + margin: 0 auto 0px; + } + &:first-child{ + display: none; + @media (min-width: 485px) { + display: block; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: block; + } + } + &:last-child { + margin-bottom: 0; + } + } + .card-text { + .skeleton-loader { + width: 100%; + display: block; + &:first-child { + margin: 10px auto 4px; + max-width: 80px; + } + &:last-child { + margin: 10px auto 0; + max-width: 120px; + } + } + } +} + +.card { + background-color: var(--bg); + height: 100%; +} + +.card-title { + color: var(--title-fg); + font-size: 1rem; +} + +.progress { + display: inline-flex; + width: 100%; + background-color: var(--secondary); + height: 1.1rem; + max-width: 180px; +} + +.skeleton-loader { + max-width: 100%; +} + +.more-padding { + padding: 18px; +} + +.small-bar { + height: 8px; + top: -4px; + max-width: 120px; +} + +.loading-container { + min-height: 50.5px; +} + +.main-title { + position: relative; + color: var(--fg); + opacity: var(--opacity); + margin-top: -13px; + font-size: 10px; + text-transform: uppercase; + font-weight: 500; + text-align: center; + padding-bottom: 3px; +} + +.card-wrapper { + .card { + height: auto !important; + } + .card-body { + display: flex; + flex: inherit; + text-align: center; + flex-direction: column; + justify-content: space-around; + padding: 20px; + } +} + +.retarget-sign { + margin-right: -3px; + font-size: 14px; + top: -2px; + position: relative; +} + +.previous-retarget-sign { + margin-right: -2px; + font-size: 10px; +} + +.symbol { + font-size: 13px; + white-space: nowrap; +} + +.verify-progress, .halving-progress { + width: 100%; + height: 22px; + margin-bottom: 12px; +} + +.verify-shares { + display: block; + width: 100%; + background: var(--secondary); + + .rect { + fill: var(--secondary); + &.public { + fill: url(#verify-gradient); + } + &.verified { + fill: var(--success); + } + + &.hover { + fill: #535e84; + &.public { + fill: url(#verify-hover-gradient); + } + &.verified { + fill: #29d951; + } + } + } +} + +.inactive { + color: var(--transparent-fg); +} + +.verify-tooltip { + position: absolute; + z-index: 1000; + background-color: var(--bg); + padding: 10px; + border-radius: 5px; +} + +.verify-tooltip { + position: fixed; + 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); + padding: 10px 15px; + text-align: left; + pointer-events: none; + max-width: 300px; + min-width: 200px; + text-align: center; + + p { + margin: 0; + white-space: nowrap; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts new file mode 100644 index 000000000..c2a2ee967 --- /dev/null +++ b/frontend/src/app/components/treasuries/verify/treasuries-verify.component.ts @@ -0,0 +1,177 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Inject, Input, LOCALE_ID, OnDestroy, OnInit, SimpleChanges, ViewChild } from '@angular/core'; +import { combineLatest, map, Observable, startWith, Subscription, tap } from 'rxjs'; +import { StateService } from '@app/services/state.service'; +import { WalletStats } from '../../../shared/wallet-stats'; +import { AddressTxSummary } from '../../../interfaces/electrs.interface'; +import { Treasury } from '../../../interfaces/node-api.interface'; + + +interface VerifyShare { + share: number; + btc: number; + x: string; + w: string; + label: string; + type: string; +} + +@Component({ + selector: 'app-treasuries-verify-progress', + templateUrl: './treasuries-verify.component.html', + styleUrls: ['./treasuries-verify.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class TreasuriesVerifyProgressComponent implements OnInit, OnDestroy { + @Input() walletStats: Record; + @Input() treasuries: Treasury[] = []; + @Input() showTitle = true; + + loading = true; + isMobile: boolean; + + walletBalance: Record = {}; + + @ViewChild('verifySvg') verifySvgElement: ElementRef; + @ViewChild('tooltip') tooltipElement: ElementRef; + + isLoadingWebSocket$: Observable; + subscription: Subscription; + + currentHeight: number; + shares: VerifyShare[]; + + verifiedTotalAddresses: number; + percentVerified: number; + verifiedTotalBtc: number; + + tooltipPosition = { x: 0, y: 0 }; + hoverSection: VerifyShare | void; + + constructor( + public stateService: StateService, + private cd: ChangeDetectorRef, + @Inject(LOCALE_ID) private locale: string, + ) { } + + ngOnInit(): void { + this.isLoadingWebSocket$ = this.stateService.isLoadingWebSocket$; + this.init(); + } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.treasuries || changes.walletStats) { + this.init(); + } + } + + init(): void { + if (this.treasuries && this.walletStats) { + this.subscription?.unsubscribe(); + this.subscription = this.stateService.chainTip$.pipe( + startWith(this.stateService.latestBlockHeight), + ).subscribe((chainTip) => { + this.currentHeight = chainTip; + this.processVerifyShares(); + }); + } + } + + processVerifyShares(): void { + let total = 0; + let publicTotal = 0; + let verifiedTotal = 0; + this.verifiedTotalAddresses = 0; + + for (const treasury of this.treasuries) { + const walletStats = this.walletStats[treasury.wallet]; + if (walletStats) { + for (const address of walletStats.addresses) { + const stats = walletStats.addressStats[address]; + if (stats) { + const addressBalance = (stats.funded_txo_sum - stats.spent_txo_sum) / 100_000_000; + if (treasury.verifiedAddresses?.includes(address)) { + verifiedTotal += addressBalance; + } + if (address !== 'private') { + publicTotal += addressBalance; + } + total += addressBalance; + } + } + } + this.verifiedTotalAddresses += treasury.verifiedAddresses?.length || 0; + } + + this.percentVerified = (verifiedTotal / total) * 100; + this.verifiedTotalBtc = verifiedTotal; + + // calculate share of total verify for each treasury + this.shares = [ + { + share: 1, + btc: total, + x: '0', + w: '100%', + label: 'All Treasuries', + type: 'treasuries', + }, + { + share: (publicTotal / total), + btc: publicTotal, + x: '0', + w: ((publicTotal / total) * 100).toFixed(2) + '%', + label: 'Public Holdings', + type: 'public', + }, + { + share: (verifiedTotal / total), + btc: verifiedTotal, + x: '0', + w: ((verifiedTotal / total) * 100).toFixed(2) + '%', + label: 'Verified Holdings', + type: 'verified', + } + ]; + this.loading = false; + } + + @HostListener('pointerdown', ['$event']) + onPointerDown(event): void { + if (this.verifySvgElement?.nativeElement?.contains(event.target)) { + this.onPointerMove(event); + event.preventDefault(); + } + } + + @HostListener('pointermove', ['$event']) + onPointerMove(event): void { + if (this.verifySvgElement?.nativeElement?.contains(event.target)) { + let x = event.clientX; + const y = event.clientY - 100; + if (this.tooltipElement) { + const elementBounds = this.tooltipElement.nativeElement.getBoundingClientRect(); + x -= elementBounds.width / 2; + x = Math.min(Math.max(x, 20), (window.innerWidth - 20 - elementBounds.width)); + } + this.tooltipPosition = { x, y }; + this.cd.markForCheck(); + } + } + + onHover(_, share: VerifyShare): void { + this.hoverSection = share; + } + + onBlur(): void { + this.hoverSection = undefined; + } + + @HostListener('window:resize', ['$event']) + onResize(): void { + this.isMobile = window.innerWidth <= 767.98; + } + + ngOnDestroy(): void { + this.subscription?.unsubscribe(); + } +} diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index 7426acc09..e9178698d 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -41,6 +41,7 @@ import { AddressGraphComponent } from '@components/address-graph/address-graph.c import { TreasuriesGraphComponent } from '@components/treasuries/treasuries-graph/treasuries-graph.component'; import { TreasuriesPieComponent } from '@components/treasuries/treasuries-pie/treasuries-pie.component'; import { TreasuriesSupplyComponent } from '@components/treasuries/supply/treasuries-supply.component'; +import { TreasuriesVerifyProgressComponent } from '@components/treasuries/verify/treasuries-verify.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'; @@ -89,6 +90,7 @@ import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; TreasuriesGraphComponent, TreasuriesPieComponent, TreasuriesSupplyComponent, + TreasuriesVerifyProgressComponent, UtxoGraphComponent, ActiveAccelerationBox, AddressesTreemap, diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 29a021dfa..d697a8f65 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -487,4 +487,6 @@ export interface Treasury { name: string, wallet: string, enterprise: string, + verifiedAddresses: string[]; + balances?: { balance: number, time: number }[]; } diff --git a/frontend/src/app/shared/wallet-stats.ts b/frontend/src/app/shared/wallet-stats.ts index 98052f9b6..483dddc48 100644 --- a/frontend/src/app/shared/wallet-stats.ts +++ b/frontend/src/app/shared/wallet-stats.ts @@ -7,8 +7,13 @@ export class WalletStats implements ChainStats { spent_txo_count: number; spent_txo_sum: number; tx_count: number; + addressStats: Record = {}; constructor (stats: ChainStats[], addresses: string[]) { + this.addressStats = {}; + for (let i = 0; i < stats.length; i++) { + this.addressStats[addresses[i]] = stats[i]; + } Object.assign(this, stats.reduce((acc, stat) => { acc.funded_txo_count += stat.funded_txo_count; acc.funded_txo_sum += stat.funded_txo_sum; @@ -28,30 +33,54 @@ export class WalletStats implements ChainStats { } public addTx(tx: Transaction): void { + const seenAddresses = new Set; for (const vin of tx.vin) { - if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + const address = vin.prevout?.scriptpubkey_address; + if (this.addresses.includes(address)) { + seenAddresses.add(address); + this.addressStats[address].spent_txo_count++; + this.addressStats[address].spent_txo_sum += vin.prevout.value; this.spendTxo(vin.prevout.value); } } for (const vout of tx.vout) { - if (this.addresses.includes(vout.scriptpubkey_address)) { + const address = vout.scriptpubkey_address; + if (this.addresses.includes(address)) { + seenAddresses.add(address); + this.addressStats[address].funded_txo_count++; + this.addressStats[address].funded_txo_sum += vout.value; this.fundTxo(vout.value); } } + for (const address of seenAddresses.values()) { + this.addressStats[address].tx_count++; + } this.tx_count++; } public removeTx(tx: Transaction): void { + const seenAddresses = new Set; for (const vin of tx.vin) { - if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + const address = vin.prevout?.scriptpubkey_address; + if (this.addresses.includes(address)) { + seenAddresses.add(address); + this.addressStats[address].spent_txo_count--; + this.addressStats[address].spent_txo_sum -= vin.prevout.value; this.unspendTxo(vin.prevout.value); } } for (const vout of tx.vout) { - if (this.addresses.includes(vout.scriptpubkey_address)) { + const address = vout.scriptpubkey_address; + if (this.addresses.includes(address)) { + seenAddresses.add(address); + this.addressStats[address].funded_txo_count--; + this.addressStats[address].funded_txo_sum -= vout.value; this.unfundTxo(vout.value); } } + for (const address of seenAddresses.values()) { + this.addressStats[address].tx_count--; + } this.tx_count--; } From b5f6de1ff13267a6a7917f5bd4788775a85ebeab Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 9 Aug 2025 08:53:19 +0000 Subject: [PATCH 353/534] add support for private treasury balance data --- backend/src/api/services/wallets.ts | 44 +++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index b7f81af92..e4578f5dc 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -31,6 +31,8 @@ interface Treasury { name: string, wallet: string, enterprise: string, + verifiedAddresses: string[], + balances: { balance: number, time: number }[], // off-chain balances } const POLL_FREQUENCY = 5 * 60 * 1000; // 5 minutes @@ -180,7 +182,6 @@ class WalletApi { // update list of treasuries const treasuriesResponse = await axios.get(config.MEMPOOL_SERVICES.API + `/treasuries`); - console.log(treasuriesResponse.data); this.treasuries = treasuriesResponse.data || []; } catch (e) { logger.err(`Error updating active wallets: ${(e instanceof Error ? e.message : e)}`); @@ -197,6 +198,15 @@ class WalletApi { } catch (e) { logger.err(`Error updating active treasuries: ${(e instanceof Error ? e.message : e)}`); } + + // insert dummy address data to represent off-chain balance history + for (const treasury of this.treasuries) { + if (treasury.balances?.length) { + if (this.wallets[treasury.wallet]) { + this.wallets[treasury.wallet].addresses['private'] = convertBalancesToWalletAddress(treasury.wallet, treasury.balances); + } + } + } } for (const walletKey of Object.keys(this.wallets)) { @@ -212,7 +222,7 @@ class WalletApi { } // remove old addresses for (const address of Object.keys(wallet.addresses)) { - if (!addresses[address]) { + if (address !== 'private' && !addresses[address]) { delete wallet.addresses[address]; } } @@ -305,4 +315,34 @@ class WalletApi { } } +function convertBalancesToWalletAddress(wallet: string, balances: { balance: number, time: number }[]): WalletAddress { + // represent the off-chain balance as a series of transactions modifying a single notional UTXO + const sortedBalances = balances.sort((a, b) => a.time - b.time); + const walletAddress: WalletAddress = { + address: 'private', + active: false, + stats: { + funded_txo_count: 0, + funded_txo_sum: sortedBalances[sortedBalances.length - 1].balance, + spent_txo_count: 0, + spent_txo_sum: 0, + tx_count: 0, + }, + transactions: [], + lastSync: sortedBalances[sortedBalances.length - 1].time, + }; + let lastBalance = 0; + for (const [index, entry] of sortedBalances.entries()) { + const diff = entry.balance - lastBalance; + walletAddress.transactions.push({ + txid: `${wallet}-private-${index}`, + value: diff, + height: index, + time: entry.time, + }); + lastBalance = entry.balance; + } + return walletAddress; +} + export default new WalletApi(); \ No newline at end of file From 47112aec030cd78815d56c144405ad4bc5390c82 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 10 Aug 2025 10:09:10 +0000 Subject: [PATCH 354/534] Add price chart --- .../price-chart/price-chart.component.html | 81 +++++ .../price-chart/price-chart.component.scss | 119 +++++++ .../price-chart/price-chart.component.ts | 294 ++++++++++++++++++ .../treasuries-graph.component.ts | 13 +- .../treasuries/treasuries.component.html | 12 +- .../treasuries/treasuries.component.scss | 4 + .../treasuries/treasuries.component.ts | 1 + frontend/src/app/graphs/graphs.module.ts | 2 + .../src/app/graphs/graphs.routing.module.ts | 6 + 9 files changed, 528 insertions(+), 4 deletions(-) create mode 100644 frontend/src/app/components/price-chart/price-chart.component.html create mode 100644 frontend/src/app/components/price-chart/price-chart.component.scss create mode 100644 frontend/src/app/components/price-chart/price-chart.component.ts diff --git a/frontend/src/app/components/price-chart/price-chart.component.html b/frontend/src/app/components/price-chart/price-chart.component.html new file mode 100644 index 000000000..6ac53a8e3 --- /dev/null +++ b/frontend/src/app/components/price-chart/price-chart.component.html @@ -0,0 +1,81 @@ + + +
    + +
    +
    +
    +
    Bitcoin Price
    +

    + +

    +
    +
    +
    % Change
    +

    + {{ stats.percentChange > 0 ? '+' : '' }}{{ stats.percentChange | number:'1.2-2' }}% +

    +
    +
    +
    + +
    +
    + Bitcoin Price + +
    + +
    +
    + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    + +
    + + +
    +
    +
    Bitcoin Price
    +

    + +

    +
    +
    +
    % Change
    +

    + +

    +
    +
    +
    \ No newline at end of file diff --git a/frontend/src/app/components/price-chart/price-chart.component.scss b/frontend/src/app/components/price-chart/price-chart.component.scss new file mode 100644 index 000000000..4ef1f91c6 --- /dev/null +++ b/frontend/src/app/components/price-chart/price-chart.component.scss @@ -0,0 +1,119 @@ +.card-header { + border-bottom: 0; + font-size: 18px; + @media (min-width: 465px) { + font-size: 20px; + } + @media (min-width: 992px) { + height: 40px; + } +} + +.main-title { + position: relative; + color: var(--fg); + opacity: var(--opacity); + margin-top: -13px; + font-size: 10px; + text-transform: uppercase; + font-weight: 500; + text-align: center; + padding-bottom: 3px; +} + +.full-container { + display: flex; + flex-direction: column; + padding: 0px 15px; + width: 100%; + height: calc(100vh - 225px); + min-height: 400px; + @media (min-width: 992px) { + height: calc(100vh - 150px); + } +} + +.chart { + display: flex; + flex: 1; + width: 100%; + padding-bottom: 20px; + padding-right: 10px; + @media (max-width: 992px) { + padding-bottom: 25px; + } + @media (max-width: 829px) { + padding-bottom: 50px; + } + @media (max-width: 767px) { + padding-bottom: 25px; + } + @media (max-width: 629px) { + padding-bottom: 55px; + } + @media (max-width: 567px) { + padding-bottom: 55px; + } +} +.chart-widget { + width: 100%; +} + +.pool-distribution { + min-height: 56px; + display: block; + @media (min-width: 485px) { + display: flex; + flex-direction: row; + } + h5 { + margin-bottom: 10px; + } + .item { + width: 50%; + display: inline-block; + margin: 0px auto 20px; + &:nth-child(2) { + order: 2; + @media (min-width: 485px) { + order: 3; + } + } + &:nth-child(3) { + order: 3; + @media (min-width: 485px) { + order: 2; + display: block; + } + @media (min-width: 768px) { + display: none; + } + @media (min-width: 992px) { + display: block; + } + } + .card-title { + font-size: 1rem; + color: var(--title-fg); + } + .card-text { + font-size: 18px; + span { + color: var(--transparent-fg); + font-size: 12px; + } + } + } +} + +.skeleton-loader { + width: 100%; + display: block; + max-width: 80px; + margin: 15px auto 3px; + &.skeleton-loader-big { + height: 24px; + background-color: var(--secondary); + border-radius: 3px; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/price-chart/price-chart.component.ts b/frontend/src/app/components/price-chart/price-chart.component.ts new file mode 100644 index 000000000..446fb947c --- /dev/null +++ b/frontend/src/app/components/price-chart/price-chart.component.ts @@ -0,0 +1,294 @@ +import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; +import { Observable } from 'rxjs'; +import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; +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 '@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 '@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-price-chart', + templateUrl: './price-chart.component.html', + styleUrls: ['./price-chart.component.scss'], + styles: [` + .loadingGraphs { + position: absolute; + top: 50%; + left: calc(50% - 15px); + z-index: 99; + } + `], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class PriceChartComponent implements OnInit { + @Input() widget = false; + @Input() height: number = 300; + @Input() right: number | string = 45; + @Input() left: number | string = 75; + @Input() timespan: string = ''; + @Input() currency: string = 'USD'; + + miningWindowPreference: string; + radioGroupForm: UntypedFormGroup; + + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + + statsObservable$: Observable; + isLoading = true; + formatNumber = formatNumber; + chartInstance: any = undefined; + currentTimespan = ''; + + constructor( + @Inject(LOCALE_ID) public locale: string, + private seoService: SeoService, + private apiService: ApiService, + private formBuilder: UntypedFormBuilder, + private storageService: StorageService, + private miningService: MiningService, + public stateService: StateService, + private route: ActivatedRoute, + private fiatShortenerPipe: FiatShortenerPipe, + private fiatCurrencyPipe: FiatCurrencyPipe, + ) { + this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' }); + this.radioGroupForm.controls.dateSpan.setValue('1y'); + } + + ngOnInit(): void { + // Use input timespan if provided, otherwise use defaults + if (this.timespan) { + this.miningWindowPreference = this.timespan; + } else if (this.widget) { + this.miningWindowPreference = '1y'; + } else { + this.seoService.setTitle($localize`:@@price-chart.title:Bitcoin Price`); + this.seoService.setDescription($localize`:@@price-chart.description:See the Bitcoin price in USD visualized over time.`); + this.miningWindowPreference = this.miningService.getDefaultTimespan('1m'); + } + this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference }); + this.radioGroupForm.controls.dateSpan.setValue(this.miningWindowPreference); + + this.route + .fragment + .subscribe((fragment) => { + if (['1m', '3m', '6m', '1y', '2y', '3y', 'all'].indexOf(fragment) > -1) { + this.radioGroupForm.controls.dateSpan.setValue(fragment, { emitEvent: false }); + } + }); + + this.statsObservable$ = this.radioGroupForm.get('dateSpan').valueChanges + .pipe( + startWith(this.radioGroupForm.controls.dateSpan.value), + switchMap((timespan) => { + this.isLoading = true; + if (!this.widget) { + this.storageService.setValue('miningWindowPreference', timespan); + } + this.currentTimespan = timespan; + this.isLoading = true; + return this.apiService.getHistoricalBlockFees$(timespan) + .pipe( + tap((response) => { + this.prepareChartOptions({ + priceData: response.body.filter(val => val[this.currency] > 0).map(val => [val.timestamp * 1000, val[this.currency], val.avgHeight]), + }); + this.isLoading = false; + }), + map((response) => { + const priceData = response.body.filter(val => val[this.currency] > 0); + const latestPrice = priceData.length > 0 ? priceData[priceData.length - 1][this.currency] : null; + const firstPrice = priceData.length > 0 ? priceData[0][this.currency] : null; + const percentChange = (latestPrice && firstPrice) ? ((latestPrice - firstPrice) / firstPrice) * 100 : 0; + + return { + blockCount: parseInt(response.headers.get('x-total-count'), 10), + latestPrice: latestPrice, + percentChange: percentChange, + }; + }), + ); + }), + share() + ); + } + + prepareChartOptions(data) { + let title: object; + if (data.priceData.length === 0) { + title = { + textStyle: { + color: 'grey', + fontSize: 15 + }, + text: $localize`:@@23555386d8af1ff73f297e89dd4af3f4689fb9dd:Indexing blocks`, + left: 'center', + top: 'center' + }; + } + + this.chartOptions = { + title: title, + color: [ + new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: '#C0CA33' }, + { offset: 1, color: '#1B5E20' }, + ]), + ], + animation: false, + grid: { + height: (this.widget && this.height) ? this.height - 30 : undefined, + top: this.widget ? 20 : 30, + bottom: this.widget ? 30 : 80, + right: this.right, + left: this.left, + }, + tooltip: { + show: !this.isMobile() || !this.widget, + trigger: 'axis', + axisPointer: { + type: 'line' + }, + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: 'var(--tooltip-grey)', + align: 'left', + }, + borderColor: '#000', + formatter: function (data) { + if (data.length <= 0) { + return ''; + } + let tooltip = ` + ${formatterXAxis(this.locale, this.currentTimespan, parseInt(data[0].axisValue, 10))}
    `; + + for (const tick of data) { + tooltip += `${tick.marker} ${tick.seriesName}: ${this.fiatCurrencyPipe.transform(tick.data[1], null, this.currency)}
    `; + } + + tooltip += `* On average around block ${data[0].data[2]}`; + return tooltip; + }.bind(this) + }, + xAxis: data.priceData.length === 0 ? undefined : + { + type: 'time', + splitNumber: (this.isMobile() || this.widget) ? 5 : 10, + axisLabel: { + hideOverlap: true, + } + }, + // legend: data.priceData.length === 0 ? undefined : { + // data: [ + // { + // name: 'BTC Price (' + this.currency + ')', + // inactiveColor: 'rgb(110, 112, 121)', + // textStyle: { + // color: 'white', + // }, + // icon: 'roundRect', + // }, + // ], + // }, + yAxis: data.priceData.length === 0 ? undefined : [ + { + type: 'value', + min: 'dataMin', + axisLabel: { + color: 'rgb(110, 112, 121)', + formatter: function(val) { + return this.fiatShortenerPipe.transform(val, null, this.currency); + }.bind(this) + }, + splitLine: { + lineStyle: { + type: 'dotted', + color: 'var(--transparent-fg)', + opacity: 0.25, + } + }, + }, + ], + series: data.priceData.length === 0 ? undefined : [ + { + // legendHoverLink: false, + zlevel: 0, + yAxisIndex: 0, + name: 'BTC Price (' + this.currency + ')', + data: data.priceData, + type: 'line', + smooth: 0.25, + symbol: 'none', + lineStyle: { + width: 2, + opacity: 1, + } + }, + ], + dataZoom: (this.widget || data.priceData.length === 0) ? undefined : [{ + type: 'inside', + realtime: true, + zoomLock: true, + maxSpan: 100, + minSpan: 5, + moveOnMouseMove: false, + }, { + showDetail: false, + show: true, + type: 'slider', + brushSelect: false, + realtime: true, + left: 20, + right: 15, + selectedDataBackground: { + lineStyle: { + color: '#fff', + opacity: 0.45, + }, + areaStyle: { + opacity: 0, + } + }, + }], + }; + } + + onChartInit(ec) { + this.chartInstance = ec; + } + + isMobile() { + return (window.innerWidth <= 767.98); + } + + onSaveChart() { + // @ts-ignore + const prevBottom = this.chartOptions.grid.bottom; + const now = new Date(); + // @ts-ignore + this.chartOptions.grid.bottom = 40; + this.chartOptions.backgroundColor = 'var(--active-bg)'; + this.chartInstance.setOption(this.chartOptions); + download(this.chartInstance.getDataURL({ + pixelRatio: 2, + excludeComponents: ['dataZoom'], + }), `btc-price-${this.currentTimespan}-${Math.round(now.getTime() / 1000)}.svg`); + // @ts-ignore + this.chartOptions.grid.bottom = prevBottom; + this.chartOptions.backgroundColor = 'none'; + this.chartInstance.setOption(this.chartOptions); + } +} \ No newline at end of file diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 3b4cc6ea4..ef6281b6d 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -220,7 +220,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { color: chartColors, animation: false, grid: { - top: 20, + top: this.showLegend ? 50 : 20, bottom: this.allowZoom ? 65 : 20, right: this.adjustedRight, left: this.adjustedLeft, @@ -230,6 +230,17 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { selected: this.selectedWallets, formatter: (name) => { return this.seriesNameToLabel[name]; + }, + type: 'plain', + orient: 'horizontal', + top: 0, + left: 80, + right: 20, + itemGap: 10, + itemWidth: 18, + itemHeight: 10, + textStyle: { + fontSize: 11 } } : undefined, tooltip: { diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index 36a15ef04..731f28eef 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -62,9 +62,7 @@
    -
    -
    -
    +
    Balance History
    @@ -87,6 +85,14 @@
    +
    +
    +
    + + +
    +
    +
    diff --git a/frontend/src/app/components/treasuries/treasuries.component.scss b/frontend/src/app/components/treasuries/treasuries.component.scss index fd19065ff..a673374e5 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.scss +++ b/frontend/src/app/components/treasuries/treasuries.component.scss @@ -6,6 +6,10 @@ } } +.fixed-mempool-graph { + height: 440px; +} + .card { background-color: var(--bg); height: 100%; diff --git a/frontend/src/app/components/treasuries/treasuries.component.ts b/frontend/src/app/components/treasuries/treasuries.component.ts index bce684727..75fc170b5 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.ts +++ b/frontend/src/app/components/treasuries/treasuries.component.ts @@ -21,6 +21,7 @@ export class TreasuriesComponent implements OnInit, OnDestroy { error: any; walletSubscriptions: Subscription[] = []; currentSortedTreasuries: Treasury[] = []; + priceGraphHeight = 335; // Individual wallet data walletObservables: Record>> = {}; diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index e9178698d..0fd4e6913 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -6,6 +6,7 @@ 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 { PriceChartComponent } from '@components/price-chart/price-chart.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'; @@ -68,6 +69,7 @@ import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; AccelerationFeesGraphComponent, BlockFeesGraphComponent, BlockFeesSubsidyGraphComponent, + PriceChartComponent, BlockRewardsGraphComponent, BlockFeeRatesGraphComponent, BlockSizesWeightsGraphComponent, diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index d025fd95e..8655de8d5 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -5,6 +5,7 @@ import { BlockFeeRatesGraphComponent } from '@components/block-fee-rates-graph/b 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 { PriceChartComponent } from '@components/price-chart/price-chart.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'; @@ -168,6 +169,11 @@ const routes: Routes = [ data: { networks: ['bitcoin'] }, component: BlockHealthGraphComponent, }, + { + path: 'price', + data: { networks: ['bitcoin'] }, + component: PriceChartComponent, + }, ] }, { From 3855034da81fbf1558b5301a0bbc6a26d8e62b76 Mon Sep 17 00:00:00 2001 From: mononaut <83316221+mononaut@users.noreply.github.com> Date: Sun, 10 Aug 2025 19:57:54 +0000 Subject: [PATCH 355/534] Update frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts --- .../block-overview-graph/block-overview-graph.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index db92b294b..06da0b27b 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -665,7 +665,7 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, On matches = flags === 0n || (tx.bigintFlags & flags) > 0n; break; case 'nor': - matches = flags === 0n || (tx.bigintFlags & flags) === 0n; + matches = (tx.bigintFlags & flags) === 0n; break; } if (matches) { From f835aa4f8f5a65289e64311f6f5620cc124b88a2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 10 Aug 2025 21:10:26 +0000 Subject: [PATCH 356/534] fix treasury pie --- .../treasuries/treasuries-pie/treasuries-pie.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index 29685807f..88bd548c1 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -88,9 +88,9 @@ export class TreasuriesPieComponent implements OnChanges { } generateChartSeriesData(): PieSeriesOption[] { - let sliceThreshold = 1; + let sliceThreshold = 0.5; if (isMobile()) { - sliceThreshold = 2; + sliceThreshold = 1; } const data: object[] = []; @@ -195,8 +195,8 @@ export class TreasuriesPieComponent implements OnChanges { }, borderColor: '#000', formatter: () => { - return `${otherEntry.id} (${otherEntry.share}%)
    - ${formatNumber(otherEntry.balance, this.locale, '1.3-3')}
    `; + return `${otherEntry.label} (${otherEntry.share.toFixed(2)}%)
    + ${formatNumber(otherEntry.balance / 100_000_000, this.locale, '1.3-3')} BTC
    `; } }, } as PieSeriesOption); From 2ecb5f7f153512ac804d715eb90071e3aa1726ff Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 10 Aug 2025 21:10:57 +0000 Subject: [PATCH 357/534] treasury leaderboard 0dp --- .../src/app/components/treasuries/treasuries.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index 731f28eef..122e77183 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -32,7 +32,7 @@
    diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 7591d02a9..67e1ee8d1 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -6,8 +6,12 @@

    - Block - Genesis + @if (!block?.stale) { + Block + Genesis + } @else { + Stale Block + }

    - - Coinbase tag   + + Coinbase tag   - +
    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 598c21a6e..f5cbd5916 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 @@ -24,7 +24,7 @@ anchor } @case (null) { - unknown + unknown } @default { {{ address.type.toUpperCase() }} diff --git a/frontend/src/app/shared/filters.utils.ts b/frontend/src/app/shared/filters.utils.ts index 05fba85b2..c772f017e 100644 --- a/frontend/src/app/shared/filters.utils.ts +++ b/frontend/src/app/shared/filters.utils.ts @@ -101,7 +101,7 @@ export const TransactionFilters: { [key: string]: Filter } = { /* data */ op_return: { key: 'op_return', label: 'OP_RETURN', flag: TransactionFlags.op_return, important: true, tooltip: true, txPage: true, }, fake_pubkey: { key: 'fake_pubkey', label: 'Fake pubkey', flag: TransactionFlags.fake_pubkey, tooltip: true, txPage: true, }, - inscription: { key: 'inscription', label: 'Inscription', flag: TransactionFlags.inscription, important: true, tooltip: true, txPage: true, }, + inscription: { key: 'inscription', label: $localize`:@@99264845cdffed75db1a32df6e66febbdf1d99f1:Inscription`, flag: TransactionFlags.inscription, important: true, tooltip: true, txPage: true, }, fake_scripthash: { key: 'fake_scripthash', label: 'Fake scripthash', flag: TransactionFlags.fake_scripthash, tooltip: true, txPage: true,}, annex: { key: 'annex', label: 'Annex', flag: TransactionFlags.annex, important: false, tooltip: true, txPage: true,}, /* heuristics */ diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index 175d406e8..abab60e3d 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -271,7 +271,7 @@ Enterprise Sponsors 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -279,7 +279,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -287,7 +287,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -295,7 +295,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -303,7 +303,7 @@ Community Integrations src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -311,7 +311,7 @@ Community Alliances src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -319,7 +319,7 @@ Project Translators src/app/components/about/about.component.html - 367 + 395 about.translators @@ -327,7 +327,7 @@ Project Contributors src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -335,7 +335,7 @@ Project Members src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -343,7 +343,7 @@ Project Maintainers src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -353,14 +353,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -373,7 +365,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -381,7 +373,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -389,11 +381,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -401,7 +393,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -409,7 +401,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -417,7 +409,7 @@ Virtual size src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -428,12 +420,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -442,7 +438,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -450,7 +446,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -458,55 +454,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -516,6 +544,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -574,7 +622,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -582,7 +630,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -590,7 +638,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -598,7 +646,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -606,7 +654,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -614,11 +662,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -635,7 +683,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -643,7 +691,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -651,15 +699,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -667,7 +715,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -675,7 +723,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -683,7 +731,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -691,7 +739,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -699,7 +747,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -707,7 +755,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -715,15 +763,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -731,7 +779,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -739,7 +787,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -747,11 +795,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -759,7 +807,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -767,7 +815,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -775,20 +823,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -796,7 +843,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -804,19 +851,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -825,7 +872,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -833,15 +880,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -849,7 +896,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -857,7 +904,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -865,7 +912,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -873,7 +920,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -881,7 +928,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -889,7 +936,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -897,7 +944,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -905,7 +952,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -913,7 +960,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -921,23 +968,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594,595 + + + src/app/components/tracker/tracker.component.html + 146,147 + + + src/app/components/tracker/tracker.component.html + 180,181 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -945,7 +1024,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -953,7 +1032,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -961,15 +1040,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -978,59 +1053,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block @@ -1105,7 +1131,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1128,12 +1154,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1170,27 +1196,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1202,11 +1228,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1222,11 +1248,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1265,12 +1291,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1306,12 +1332,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1339,8 +1365,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1358,6 +1384,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1366,7 +1404,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1378,14 +1416,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1404,7 +1442,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1473,6 +1511,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1563,12 +1605,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1633,11 +1679,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1653,7 +1699,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1673,7 +1719,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1681,7 +1727,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1689,7 +1735,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1745,12 +1791,28 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1783,10 +1845,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1809,7 +1867,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1844,7 +1902,7 @@ Balance src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1852,15 +1910,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -1947,7 +2009,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -1967,7 +2029,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -1979,7 +2041,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -1999,19 +2065,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2021,6 +2087,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2039,7 +2109,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2063,7 +2133,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2079,57 +2149,77 @@ Address: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2137,7 +2227,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2145,11 +2235,11 @@ Error loading address data. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2157,7 +2247,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2165,7 +2255,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2173,7 +2267,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2181,7 +2279,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2189,18 +2287,27 @@ Type src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset @@ -2389,10 +2496,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2410,11 +2513,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2430,11 +2533,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2442,7 +2545,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2466,7 +2569,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2646,7 +2749,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2658,7 +2761,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2706,35 +2809,11 @@ Mempool Goggles™ tooltip - - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2746,7 +2825,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2754,7 +2833,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2762,7 +2841,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2774,7 +2853,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2836,22 +2915,22 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 not available src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2859,7 +2938,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -2906,8 +2985,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -2923,12 +3002,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -2944,8 +3027,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -2979,7 +3062,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3014,8 +3097,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3027,21 +3118,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3108,7 +3216,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3128,15 +3236,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3163,19 +3275,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3197,11 +3313,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3212,11 +3328,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3227,11 +3343,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3257,23 +3373,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3309,15 +3429,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3337,8 +3457,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3351,7 +3471,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3373,7 +3493,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3437,6 +3557,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3447,11 +3571,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3459,7 +3587,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3487,11 +3615,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3552,7 +3680,11 @@ Expected src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3560,7 +3692,7 @@ Actual src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3568,7 +3700,7 @@ Expected Block src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3576,7 +3708,7 @@ Actual Block src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3584,11 +3716,15 @@ Version src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3596,7 +3732,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3625,7 +3761,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3633,7 +3769,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3641,7 +3777,7 @@ Difficulty src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3657,11 +3793,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3669,7 +3805,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3677,7 +3813,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3685,11 +3821,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3698,23 +3834,31 @@ Details src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3743,7 +3887,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3751,7 +3895,7 @@ Why is this block empty? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3759,7 +3903,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3767,31 +3915,27 @@ Blocks src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks Height src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3803,11 +3947,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3819,11 +3967,11 @@ Reward src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3831,19 +3979,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3851,15 +4003,15 @@ Fees src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -3867,11 +4019,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3883,11 +4035,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -3903,14 +4055,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -3921,7 +4073,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -3929,7 +4081,7 @@ Copied! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4148,7 +4300,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4170,6 +4322,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4178,13 +4338,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4192,7 +4356,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4200,14 +4364,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4215,14 +4379,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4230,7 +4394,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4511,7 +4675,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4519,7 +4683,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4670,7 +4834,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4778,23 +4942,27 @@ lightning.nodes-channels-world-map - - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4806,11 +4974,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -4818,18 +4986,18 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -4868,11 +5036,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -4884,11 +5052,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -4900,50 +5068,6 @@ master-page.layer2-networks-header - - Dashboard - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -4974,6 +5098,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5080,7 +5208,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5108,11 +5236,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5156,7 +5292,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5200,8 +5336,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5247,8 +5383,8 @@ 163 - - L-BTC in circulation + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5267,46 +5403,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5357,15 +5453,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5393,6 +5489,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5400,6 +5507,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) @@ -5416,7 +5575,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5444,7 +5603,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5468,7 +5627,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5512,11 +5671,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5552,7 +5711,7 @@ All miners src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5572,17 +5731,17 @@ blocks - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5593,15 +5752,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5644,11 +5807,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5656,11 +5819,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5678,20 +5841,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5701,6 +5888,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5711,11 +5902,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5727,11 +5918,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5743,11 +5934,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5767,23 +5958,59 @@ 1m + + Next block + + src/app/components/pool/pool.component.html + 178 + + pool.next_block + Coinbase tag src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -5791,18 +6018,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -5818,7 +6045,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -5829,24 +6056,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -5882,17 +6182,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -5904,7 +6228,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -5990,11 +6314,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6098,6 +6422,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) @@ -6114,27 +6506,15 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6142,7 +6522,7 @@ Invert src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6150,7 +6530,7 @@ Transaction vBytes per second (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6158,10 +6538,17 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6169,22 +6556,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6197,359 +6601,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6583,11 +6638,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6596,11 +6651,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6609,7 +6664,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6617,7 +6672,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6625,7 +6680,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6633,7 +6688,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6641,7 +6696,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6649,7 +6704,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6657,7 +6712,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6665,7 +6720,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6673,15 +6728,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6693,11 +6760,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6708,42 +6775,31 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -6751,17 +6807,378 @@ Ancestor - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -6769,7 +7186,7 @@ RBF Timeline src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -6778,100 +7195,16 @@ Acceleration Timeline src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -6879,115 +7212,23 @@ Waiting for it to appear in the mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -6995,15 +7236,23 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7012,7 +7261,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7021,7 +7270,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7029,15 +7278,23 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7045,7 +7302,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7053,7 +7310,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7061,7 +7318,7 @@ Previous output script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7069,7 +7326,7 @@ Previous output type src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7077,7 +7334,7 @@ Peg-out to src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7085,7 +7342,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7094,7 +7351,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7103,10 +7360,42 @@ Show more inputs to reveal fee data src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs @@ -7314,6 +7603,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7338,8 +7685,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7388,10 +7735,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7402,20 +7745,27 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. + + Websocket service src/app/docs/api-docs/api-docs.component.html - 120 + 127 + + api-docs.title-websocket + + + Payload + + src/app/docs/api-docs/api-docs.component.html + 141 - api-docs.websocket.websocket Code Example @@ -7453,6 +7803,14 @@ API Docs API response + + Documentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -7817,7 +8175,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8401,6 +8759,17 @@ lightning.connectivity-ranking + + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8506,7 +8875,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -8963,7 +9332,7 @@ Lightning nodes on ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -8974,7 +9343,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9070,6 +9439,331 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9102,6 +9796,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9151,15 +9853,27 @@ sat/WU shared.sat-weight-units + + Be your own explorer + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + shared.be-your-own-explorer + My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9167,7 +9881,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9175,7 +9889,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9184,7 +9898,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9192,7 +9906,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9200,7 +9914,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9208,7 +9922,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9216,7 +9930,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9224,7 +9938,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9232,15 +9946,23 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming + + Be your own explorer™ + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + faq.be-your-own-explorer + More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9248,7 +9970,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9256,7 +9978,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9264,7 +9986,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9272,7 +9994,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9280,7 +10002,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9288,7 +10010,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9296,7 +10018,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9304,7 +10026,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9312,7 +10034,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9320,7 +10042,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9328,7 +10050,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9336,7 +10058,7 @@ Terms of Service src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9345,7 +10067,7 @@ Privacy Policy src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9354,7 +10076,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9363,13 +10085,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9392,47 +10114,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9544,7 +10258,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 From ab45911d8839596dda69a902d7ee6e7a21f11c93 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 28 Jul 2025 10:56:03 +0700 Subject: [PATCH 331/534] i18n updates --- .../app/components/about/about.component.html | 2 +- .../accelerate-checkout.component.html | 2 +- .../app/components/pool/pool.component.html | 2 +- .../components/tracker/tracker.component.html | 4 +- .../app/docs/api-docs/api-docs.component.html | 4 +- .../global-footer.component.html | 2 +- frontend/src/locale/messages.xlf | 77 +++++++------------ 7 files changed, 37 insertions(+), 56 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 902f6a370..671e35ce9 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -12,7 +12,7 @@
    The Mempool Open Source Project ®

    Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties.

    -
    Be your own explorer™
    +
    Be your own explorer
    @if (accelerationResponse?.receiptUrl) { } diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index 40a45f3e3..eabfc7c63 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -175,7 +175,7 @@ -

    Next block

    +

    Next Block

    diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index f4fcd07af..b324062e9 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -143,7 +143,7 @@
    Your transaction has been accelerated @if (paymentReceiptUrl) { - Get a receipt. + Get a receipt. } } @else { @switch (trackerStage) { @@ -177,7 +177,7 @@
    Your transaction is confirmed! @if (paymentReceiptUrl) { - Get a receipt. + Get a receipt. } } @case ('replaced') { diff --git a/frontend/src/app/docs/api-docs/api-docs.component.html b/frontend/src/app/docs/api-docs/api-docs.component.html index cace339b7..396c8b3ac 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.html +++ b/frontend/src/app/docs/api-docs/api-docs.component.html @@ -124,7 +124,7 @@
    -

    Below is a reference for the {{ network.val === '' ? 'Bitcoin' : network.val.charAt(0).toUpperCase() + network.val.slice(1) }} Websocket service running at {{ websocketUrl(network.val) }}.

    +

    Below is a reference for the {{ network.val === '' ? 'Bitcoin' : network.val.charAt(0).toUpperCase() + network.val.slice(1) }} Websocket service running at {{ websocketUrl(network.val) }}.

    Note that usage limits apply to our WebSocket API. Consider an enterprise sponsorship if you need higher API limits, such as higher tracking limits.

    @@ -138,7 +138,7 @@
    -
    Payload
    +
    Payload
    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 0dcea9245..2df2727ec 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 @@ -86,7 +86,7 @@

    What is a block explorer?

    What is a mempool explorer?

    Why isn't my transaction confirming?

    -

    Be your own explorer™

    +

    Be your own explorer

    More FAQs »

    Research

    diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index abab60e3d..6e7d06633 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -267,6 +267,26 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 @@ -996,19 +1016,19 @@ accelerator.confirmed-acceleration-with-miners-third-party - - Get a receipt. + + Get a receipt. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 594,595 + 594 src/app/components/tracker/tracker.component.html - 146,147 + 146 src/app/components/tracker/tracker.component.html - 180,181 + 180 accelerator.receipt-label @@ -1075,6 +1095,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -5958,14 +5982,6 @@ 1m - - Next block - - src/app/components/pool/pool.component.html - 178 - - pool.next_block - Coinbase tag @@ -7752,21 +7768,6 @@ 17 - - Websocket service - - src/app/docs/api-docs/api-docs.component.html - 127 - - api-docs.title-websocket - - - Payload - - src/app/docs/api-docs/api-docs.component.html - 141 - - Code Example @@ -9853,18 +9854,6 @@ sat/WU shared.sat-weight-units - - Be your own explorer - - src/app/shared/components/global-footer/global-footer.component.html - 20 - - - src/app/shared/components/global-footer/global-footer.component.html - 64 - - shared.be-your-own-explorer - My Account @@ -9950,14 +9939,6 @@ faq.why-isnt-my-transaction-confirming - - Be your own explorer™ - - src/app/shared/components/global-footer/global-footer.component.html - 89 - - faq.be-your-own-explorer - More FAQs » From 23ee270502d58189b9ac163fd1fd491b02b57011 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 28 Jul 2025 11:46:35 +0700 Subject: [PATCH 332/534] update from transifex --- frontend/package.json | 2 +- .../transaction-raw.component.html | 2 +- frontend/src/locale/messages.ar.xlf | 3240 +++-- frontend/src/locale/messages.bqi.xlf | 10263 +++++++++++++++ frontend/src/locale/messages.ca.xlf | 3167 +++-- frontend/src/locale/messages.cs.xlf | 3247 +++-- frontend/src/locale/messages.da.xlf | 3244 +++-- frontend/src/locale/messages.de.xlf | 3246 +++-- frontend/src/locale/messages.es.xlf | 3244 +++-- frontend/src/locale/messages.fa.xlf | 3241 +++-- frontend/src/locale/messages.fi.xlf | 3244 +++-- frontend/src/locale/messages.fr.xlf | 3244 +++-- frontend/src/locale/messages.he.xlf | 3211 +++-- frontend/src/locale/messages.hi.xlf | 3244 +++-- frontend/src/locale/messages.hr.xlf | 3244 +++-- frontend/src/locale/messages.hu.xlf | 3867 +++--- frontend/src/locale/messages.it.xlf | 3244 +++-- frontend/src/locale/messages.ja.xlf | 3244 +++-- frontend/src/locale/messages.ka.xlf | 3064 +++-- frontend/src/locale/messages.ko.xlf | 3068 +++-- frontend/src/locale/messages.lt.xlf | 3226 +++-- frontend/src/locale/messages.mk.xlf | 3066 +++-- frontend/src/locale/messages.nb.xlf | 3244 +++-- frontend/src/locale/messages.ne.xlf | 3065 +++-- frontend/src/locale/messages.nl.xlf | 3244 +++-- frontend/src/locale/messages.pl.xlf | 3250 +++-- frontend/src/locale/messages.pt.xlf | 3246 +++-- frontend/src/locale/messages.ro.xlf | 3244 +++-- frontend/src/locale/messages.ru.xlf | 3244 +++-- frontend/src/locale/messages.sl.xlf | 3061 +++-- frontend/src/locale/messages.sr.xlf | 10393 ++++++++++++++++ frontend/src/locale/messages.sv.xlf | 3319 +++-- frontend/src/locale/messages.th.xlf | 3222 +++-- frontend/src/locale/messages.tr.xlf | 3244 +++-- frontend/src/locale/messages.uk.xlf | 3148 +++-- frontend/src/locale/messages.vi.xlf | 3153 +++-- frontend/src/locale/messages.zh.xlf | 3246 +++-- 37 files changed, 85411 insertions(+), 41774 deletions(-) create mode 100644 frontend/src/locale/messages.bqi.xlf create mode 100644 frontend/src/locale/messages.sr.xlf diff --git a/frontend/package.json b/frontend/package.json index 785092fb8..56a552195 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -23,7 +23,7 @@ "ng": "./node_modules/@angular/cli/bin/ng.js", "tsc": "./node_modules/typescript/bin/tsc", "i18n-extract-from-source": "npm run ng -- extract-i18n --out-file ./src/locale/messages.xlf", - "i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force", + "i18n-pull-from-transifex": "tx pull -a --minimum-perc 1 --force", "serve": "npm run generate-config && npm run ng -- serve -c local", "serve:local-prod": "npm run generate-config && npm run ng -- serve -c local-prod", "serve:parameterized": "npm run generate-config && npm run ng -- serve -c parameterized", diff --git a/frontend/src/app/components/transaction/transaction-raw.component.html b/frontend/src/app/components/transaction/transaction-raw.component.html index 502bca6d9..52b0fa2c2 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.html +++ b/frontend/src/app/components/transaction/transaction-raw.component.html @@ -225,7 +225,7 @@ @if (isLoading) {
    -

    +

    Loading {{ isLoadingPrevouts ? 'transaction prevouts' : isLoadingCpfpInfo ? 'CPFP' : '' }}

    diff --git a/frontend/src/locale/messages.ar.xlf b/frontend/src/locale/messages.ar.xlf index 2a098550c..453033368 100644 --- a/frontend/src/locale/messages.ar.xlf +++ b/frontend/src/locale/messages.ar.xlf @@ -301,12 +301,32 @@ 14
    + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 رعاة المشروع 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ رعاة مثل حيتان src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ الرعاة الأبطال src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ رعاة OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ تكاملات (Integrations) مجتمعية src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ التحالفات المجتمعية src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ مترجمو المشروع src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ المساهمون في المشروع src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ أعضاء المشروع src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ فريق صيانة المشروع src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ عذرا، هناك خطأ ما! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ لم نتمكن من تسريع هذه المعاملة. الرجاء إعادة المحاولة في وقت لاحق. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ إغلاق src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ معاملتك src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ بالإضافة إلى أسلاف غير مؤكدين src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ الحجم الافتراضي src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ الحجم بالـ vbytes لهذه المعاملة (بإضافة الأصول غير المؤكدة) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -503,7 +519,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -512,55 +528,87 @@ ساتوشي src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -570,6 +618,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -629,7 +697,7 @@ الرسوم مدفوعة بهذه المعاملة (بإضافة الأصول غير المؤكدة) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -638,7 +706,7 @@ كم اسرع؟ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -647,7 +715,7 @@ سيؤدي هذا إلى تقليل وقت الانتظار المتوقع حتى التأكيد الأول على src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -656,7 +724,7 @@ ملخص src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -665,7 +733,7 @@ سعر السوق للكتلة التالية src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -674,11 +742,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -696,7 +764,7 @@ الرسوم الإضافية المقدرة مطلوبة src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -705,7 +773,7 @@ المعدل المستهدف src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -714,16 +782,15 @@ رسوم إضافية مطلوبة src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - رسوم Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -732,7 +799,7 @@ رسوم خدمة المسرع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -741,7 +808,7 @@ رسوم إضافية على حجم المعاملة src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -750,7 +817,7 @@ تكلفة التسارع المقدرة src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -759,7 +826,7 @@ الحد الأقصى لتكلفة التسارع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -768,7 +835,7 @@ تكلفة التسارع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -777,7 +844,7 @@ الرصيد المتوفر src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -786,15 +853,15 @@ عُد src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -803,7 +870,7 @@ تسريع معاملاتك بالبيتكوين؟ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -812,7 +879,7 @@ انتظر src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -821,11 +888,11 @@ من المتوقع التأكيد src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -834,7 +901,7 @@ التأكيد ليس متوقعا في أي وقت قريب src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -843,7 +910,7 @@ للحصول على إضافية src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -852,20 +919,19 @@ تقليل وقت التأكيد المتوقع إلى src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - الدفع إلى mempool.space لتسريع txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -874,7 +940,7 @@ سيتم الخصم من حسابك بما لا يزيد عن src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -883,19 +949,19 @@ ادفع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -905,7 +971,7 @@ فشل تحميل الفاتورة src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -914,16 +980,15 @@ جارٍ تحميل الفاتورة... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - أو + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -932,7 +997,7 @@ تأكيد الدفع الخاص بك src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -941,7 +1006,7 @@ إجمالي التكلفة الإضافية src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -950,7 +1015,7 @@ مع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -959,7 +1024,7 @@ جارٍ تحميل طريقة الدفع... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -968,7 +1033,7 @@ تأكيد الدفع الخاص بك src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -977,7 +1042,7 @@ نحن نقوم بمعالجة دفعتك... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -986,7 +1051,7 @@ تسريع معاملتك src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -995,7 +1060,7 @@ تأكيد تسريعك مع شركائنا في مجمع التعدين... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1004,7 +1069,7 @@ ...عذرًا، يستغرق هذا وقتًا أطول من المتوقع... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1013,25 +1078,57 @@ يتم تسريع معاملتك! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. لقد تم قبول معاملتك لتسريعها من قبل شركائنا في مجمع التعدين. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... حساب التكلفة... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1040,7 +1137,7 @@ يعدل أو يكيف src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1049,7 +1146,7 @@ التسريع إلى ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1058,15 +1155,11 @@ تسريع src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1076,60 +1169,10 @@ سيتم إعطاء الأولوية لمعاملتك لما يصل إلى % من عمال التعدين . src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block الكتلة القادمة @@ -1149,6 +1192,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1209,7 +1256,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1232,12 +1279,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1275,27 +1322,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1308,11 +1355,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1328,11 +1375,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1372,12 +1419,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1414,12 +1461,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1448,8 +1495,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1468,6 +1515,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees رسوم التسريع @@ -1477,7 +1536,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1490,7 +1549,7 @@ لا توجد معاملة معجلة لهذا الإطار الزمني src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1498,7 +1557,7 @@ في الكتلة: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1518,7 +1577,7 @@ عند الكتلة: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1591,6 +1650,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1685,12 +1748,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1760,11 +1827,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1781,7 +1848,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1803,7 +1870,7 @@ فشل src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1812,7 +1879,7 @@ لا توجد تسارعات نشطة src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1821,7 +1888,7 @@ لا توجد تسارعات الأخيرة src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1883,6 +1950,19 @@ mining.all-time + + all + الجميع + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » عرض المزيد 》 @@ -1890,6 +1970,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1924,10 +2008,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1953,7 +2033,7 @@ لا يتسارع src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1992,7 +2072,7 @@ الرصيد src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2000,15 +2080,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2100,7 +2184,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2121,7 +2205,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2134,7 +2218,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2156,19 +2244,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2178,6 +2266,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2198,7 +2290,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2222,7 +2314,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2239,11 +2331,11 @@ العنوان: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2251,50 +2343,69 @@ راجع معاملات mempool والمعاملات المؤكدة والرصيد والمزيد لعنوان <x id="PH" equiv-text="this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'"/><x id="PH_1" equiv-text="seoDescriptionNetwork(this.stateService.network)"/> <span class='notranslate'><x id="INTERPOLATION" equiv-text="this.addressString"/></ فترة>. src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History تاريخ الرصيد src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - الجميع - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent مؤخرًا src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction من المعاملة src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2303,7 +2414,7 @@ من المعاملات src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2312,11 +2423,11 @@ خطأ في تحميل بيانات العنوان. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ الرصيد المؤكد src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ UTXOs المؤكدة src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ UTXOs في انتظار src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ نوع src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset أصل @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - استكشف جميع الأصول الصادرة على شبكة Liquid مثل L-BTC وL-CAD وUSDT والمزيد. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - تجريبي - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match مطابق src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ أي واحد src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ لون src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ كلاسيكي src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ عمر src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ غير متاح src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ متصفحك لا يدعم هذه الخاصية. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict صراع src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ متوقع src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ فعلي src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ الكتله المتوقعه src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ الكتله الحاليه src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ الاصدار src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ وحدات صغيرة. src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ الصعوبه src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ رمز أحادي فردي الإستخدام. src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ عنوان الكتلة الست عشري src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ مراجعة src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ التفاصيل src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ حدث خطأ أثناء تحميل بيانات الكتلة. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ لماذا الكتلة فارغة؟ src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ رسوم التسريع مدفوعة خارج النطاق src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ الكتل src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ ارتفاع src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ المكافأة src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ الرسوم src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ التحويلات src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ اطلع على أحدث كتل Liquid بالإضافة إلى الإحصائيات الأساسية مثل ارتفاع الكتلة وحجم الكتلة والمزيد. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ اطلع على أحدث كتل Bitcoin بالإضافة إلى الإحصائيات الأساسية مثل ارتفاع الكتلة ومكافأة الكتلة وحجم الكتلة والمزيد. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ تم النسخ! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ الجدول الزمني X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ الدمج src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ بيانات src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ المبلغ (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ طلب عملات Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - معدل التجزئة + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + معدل التجزئة src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ شاهد معدل التجزئة والصعوبة لشبكة Bitcoin التي تم تصورها مع مرور الوقت. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ (متوسط) معدل التجزئة src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - لوحة التحكم - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - الرسوم البيانية - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - توثيق - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired انتهت صلاحية غير الغبار @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ كتلة src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Peg out جارى... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - عدد المرات التي انخفضت فيها ممتلكات الاتحاد من BTC إلى أقل من 95% من إجمالي المعروض من L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - L-BTC المتداول + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - لوحة التعدين - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - مستكشف البرق - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - صنبور - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. اطلع على إحصائيات معاملات في mempool: نطاق الرسوم، والحجم الإجمالي، والمزيد. يتم تحديث كتل Mempool في الوقت الفعلي حيث تتلقى الشبكة معاملات جديدة. @@ -5771,15 +5878,15 @@ تسجيل الدخول src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + لوحة التعدين + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. احصل على إحصائيات تعدين البيتكوين في الوقت الفعلي مثل معدل التجزئة وتعديل الصعوبة ومكافآت الكتلة والسيطرة على المجمع والمزيد. @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) حظ حوض التعدين (١ اسبوع) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ كل المعدنين src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks كتل - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ أخرى () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ راجع إحصائيات مجمع التعدين لـ : أحدث الكتل التي تم تعدينها، ومعدل التجزئة بمرور الوقت، وإجمالي مكافأة الكتلة حتى الآن، وعناوين coinbase المعروفة، والمزيد. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6216,20 +6419,48 @@ علامة كوين بيس src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. حدث خطأ أثناء تحميل بيانات التجمع. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6238,7 +6469,7 @@ لا توجد بيانات كافية حتى الآن src/app/components/pool/pool.component.ts - 142 + 177 @@ -6246,11 +6477,11 @@ سيطرة المجمعات src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6267,7 +6498,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6279,18 +6510,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + قائمة مفصولة بفواصل من المعاملات الأولية + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + الحد الأقصى لمعدل الرسوم (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + مسموح؟ + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + سبب الرفض + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction بث معاملة src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6298,7 +6606,7 @@ بث معاملة إلى شبكة باستخدام تجزئة المعاملة. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6338,17 +6646,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6361,7 +6693,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6455,11 +6787,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6575,6 +6907,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) المعاملات الغير مؤكدة بالبايتات الافتراضية (ساتوشي/بايت افتراضي) @@ -6593,29 +6993,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - وضع التلفزيون - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter تصفية src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6624,7 +7011,7 @@ عكس src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6633,7 +7020,7 @@ حجم التحويلات في الثانية (بايت افتراضي/ثانية) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6641,10 +7028,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + الرسوم البيانية + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. راجع حجم mempool (في MvB) والمعاملات في الثانية (في vB/s) التي تم تصورها مع مرور الوقت. @@ -6653,24 +7048,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - شاهد كتل Bitcoin وازدحام mempool في الوقت الفعلي بتنسيق مبسط مثالي للتلفزيون. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions المعاملات الاختبارية src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6684,370 +7095,10 @@ الترميز السداسي الخام src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - قائمة مفصولة بفواصل من المعاملات الأولية - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - الحد الأقصى لمعدل الرسوم (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - مسموح؟ - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - سبب الرفض - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - على الفور - - src/app/components/time/time.component.ts - 107 - - - - Just now - الآن - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - منذ - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - في ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - ضمن ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - بعد - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - قبل - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent مرسل @@ -7085,11 +7136,11 @@ الوقت المقدر للوصول src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7099,11 +7150,11 @@ ليس في الوقت القريب src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7113,7 +7164,7 @@ تم التأكيد عند src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7122,7 +7173,7 @@ ارتفاع الكتلة src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7131,7 +7182,7 @@ لقد تم تسريع معاملتك src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7140,7 +7191,7 @@ في انتظار ظهور معاملتك في مجمع الذاكرة src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7149,7 +7200,7 @@ معاملتك موجودة في mempool، ولكن لن يتم تأكيدها لبعض الوقت. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7158,7 +7209,7 @@ معاملتك موجودة بالقرب من أعلى mempool، ومن المتوقع أن يتم تأكيدها قريبًا. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7167,7 +7218,7 @@ من المتوقع أن يتم تأكيد معاملتك في الكتلة التالية src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7176,7 +7227,7 @@ تم تأكيد معاملتك! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7185,16 +7236,29 @@ لقد تم استبدال معاملتك بإصدار أحدث! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + حدث خطأ أثناء تحميل بيانات المعاملة. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details انظر المزيد من التفاصيل src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7207,11 +7271,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7223,44 +7287,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - كوين بيس + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant منحدر - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7269,18 +7321,396 @@ Ancestor الاصل - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + الخصائص + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + كوين بيس + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + كان من المتوقع أن يتم تضمين هذه المعاملة في الكتلة + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + المتوقع في الكتلة + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + تمت رؤية هذه المعاملة في مجمع الذاكرة قبل التعدين + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + شوهد في mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + كانت هذه المعاملة مفقودة من mempool الخاصة بنا قبل التعدين + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + لم أر في Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + تتعارض هذه المعاملة مع إصدار آخر في Mempool الخاصة بنا + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + التدفق + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + اخف الرسم البياني + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + اعرض المزيد + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + المدخلات والمخرجات + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + اعرض الرسم االبياني + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + تعديل v-الحجم + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + وقت القفل + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator إخفاء المسرع src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7289,7 +7719,7 @@ الجدول الزمني RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7299,109 +7729,17 @@ تسريع الجدول الزمني src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - التدفق - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - اخف الرسم البياني - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - اعرض المزيد - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - المدخلات والمخرجات - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - اعرض الرسم االبياني - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - تعديل v-الحجم - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - وقت القفل - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. الحوالة غير موجودة. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7410,125 +7748,24 @@ في انتظار ظهورها على mempool src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - حدث خطأ أثناء تحميل بيانات المعاملة. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - الخصائص - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - كان من المتوقع أن يتم تضمين هذه المعاملة في الكتلة - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - المتوقع في الكتلة - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - تمت رؤية هذه المعاملة في مجمع الذاكرة قبل التعدين - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - شوهد في mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - كانت هذه المعاملة مفقودة من mempool الخاصة بنا قبل التعدين - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - لم أر في Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - تتعارض هذه المعاملة مع إصدار آخر في Mempool الخاصة بنا - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (عملات تم إنشاؤها حديثًا) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7537,16 +7774,24 @@ ربط src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7556,7 +7801,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7566,7 +7811,7 @@ شوهد src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7575,16 +7820,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7593,7 +7846,7 @@ نتائج التجزئة النصية العالقة 2 للشاهد النصي المنفصل. src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7602,7 +7855,7 @@ ن التسلسل src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7611,7 +7864,7 @@ نص النتائج السابقة. src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7620,7 +7873,7 @@ نوع المخرجات السابقة src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7629,7 +7882,7 @@ Peg-out to src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7638,7 +7891,7 @@ النتيجة النصية لمعاملات بتكوين(عملية عكسية لإلغاء الرموز النصية) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7648,7 +7901,7 @@ النتيجة النصيةلمعاملات بتكوين (سلسلة ارقام سداسية عشرية) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7658,10 +7911,42 @@ اعرض المزيد من المدخلات لتوضيح بيانات الرسوم src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs مدخلات أخرى @@ -7892,6 +8177,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings القابضة للاتحاد Liquid @@ -7918,9 +8261,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - عرض L-BTC مقابل حيازات BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7973,10 +8315,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7988,22 +8326,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - الدفع الإعتيادي:إجراء:أريد, بيانات:[’الكتل’،...]لتحدديد ما تريد دفعه.متوفر:كتل،;كتل عقود للعمليات غير المعلنة،جدول-2h-مباشر،وإحصاءات .دفع المعاملات المرتبطة بالعنوان:’إتبع-عنوان’: ’3PbJ...bF98’للحصول على معاملة جديدة تحتوي ذلك العنوان كإدخال و إخراج. إرجاع مصفوف المعاملات.عنوان المعاملاتلكتل العقود غير المعلنة الجديدة، و معاملات الكتللالمعاملات المؤكدة في الكتل الجديدة. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example مثال على الرمز @@ -8043,6 +8372,15 @@ API Docs API response + + Documentation + توثيق + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ التعليمات @@ -8437,7 +8775,7 @@ نظرة عامة على قناة Lightning . اطلع على سعة القناة وعقد Lightning المعنية والمعاملات ذات الصلة على السلسلة والمزيد. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9060,6 +9398,18 @@ lightning.connectivity-ranking + + Lightning Explorer + مستكشف البرق + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). احصل على إحصائيات حول شبكة Lightning (السعة الإجمالية، والاتصال، وما إلى ذلك)، وعقد Lightning (القنوات، والسيولة، وما إلى ذلك) وقنوات Lightning (الحال، والرسوم، وما إلى ذلك). @@ -9175,7 +9525,7 @@ نظرة عامة على عقدة شبكة Lightning المسماة . شاهد القنوات والسعة والموقع وإحصائيات الرسوم والمزيد. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9682,7 +10032,7 @@ أنواد برق على مزود انترنت: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9693,7 +10043,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9801,6 +10151,338 @@ 71 + + Immediately + على الفور + + src/app/services/time.service.ts + 71 + + + + Just now + الآن + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + منذ + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + في ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ضمن ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + بعد + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + قبل + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee الرسوم @@ -9837,6 +10519,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation تأكيد @@ -9896,11 +10586,11 @@ حسابي src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9909,7 +10599,7 @@ يستكشف src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9918,7 +10608,7 @@ المعاملة الاختبارية src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9928,7 +10618,7 @@ الاتصال بالعقد لدينا src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9937,7 +10627,7 @@ وثائق واجهة برمجة التطبيقات src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9946,7 +10636,7 @@ يتعلم src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9955,7 +10645,7 @@ ما هو mempool؟ src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9964,7 +10654,7 @@ ما هو مستكشف الكتل؟ src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9973,7 +10663,7 @@ ما هو مستكشف mempool؟ src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9982,7 +10672,7 @@ لماذا لا يتم تأكيد معاملتي؟ src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9991,7 +10681,7 @@ المزيد من الأسئلة الشائعة » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10000,7 +10690,7 @@ بحث src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10009,7 +10699,7 @@ الشبكات src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10018,7 +10708,7 @@ مستكشف الشبكة الرئيسية src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10027,7 +10717,7 @@ مستكشف Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10036,7 +10726,7 @@ مستكشف Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10045,7 +10735,7 @@ مستكشف Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10054,7 +10744,7 @@ مستكشف Liguid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10063,7 +10753,7 @@ مستكشف Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10072,7 +10762,7 @@ أدوات src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10081,7 +10771,7 @@ الساعة (معدنة) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10090,7 +10780,7 @@ قانوني src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10099,7 +10789,7 @@ شروط الخدمة src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10109,7 +10799,7 @@ سياسة الخصوصية src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10119,7 +10809,7 @@ سياسة العلامات التجارية src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10129,14 +10819,13 @@ تراخيص الطرف الثالث src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - رصيدك منخفض جدًا.يُرجى تعبئة حسابك . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10161,21 +10850,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - لم يتم الانتهاء من اختبار Testnet4 بعد، ويمكن إعادة تعيينه في أي وقت. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment الدفع المجمع src/app/shared/filters.utils.ts - 108 + 110 @@ -10183,7 +10863,7 @@ أنواع العناوين src/app/shared/filters.utils.ts - 119 + 121 @@ -10191,7 +10871,7 @@ سلوك src/app/shared/filters.utils.ts - 120 + 122 @@ -10199,7 +10879,7 @@ الاستدلال src/app/shared/filters.utils.ts - 122 + 124 @@ -10207,7 +10887,7 @@ أعلام Sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10335,7 +11015,7 @@ Multisig من src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.bqi.xlf b/frontend/src/locale/messages.bqi.xlf new file mode 100644 index 000000000..b3a4d1207 --- /dev/null +++ b/frontend/src/locale/messages.bqi.xlf @@ -0,0 +1,10263 @@ + + + + + Close + bastên + + node_modules/src/ngb-config.ts + 13 + + + + HH + HH + + node_modules/src/ngb-config.ts + 13 + + + + Close + + node_modules/src/ngb-config.ts + 13 + + + + Select month + pêsandê mā + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + «« + «« + + node_modules/src/ngb-config.ts + 13 + + + + Previous month + mā pîši + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + + + node_modules/src/ngb-config.ts + 13 + + + + Slide of + + node_modules/src/ngb-config.ts + 13 + + Currently selected slide number read by screen reader + + + Hours + sāat + + node_modules/src/ngb-config.ts + 13 + + + + « + « + + node_modules/src/ngb-config.ts + 13 + + + + Previous + pîši + + node_modules/src/ngb-config.ts + 13 + + + + MM + MM + + node_modules/src/ngb-config.ts + 13 + + + + » + » + + node_modules/src/ngb-config.ts + 13 + + + + Select year + pêsandê sāl + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + Next month + mā niyâyi + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + Next + niyâyi + + node_modules/src/ngb-config.ts + 13 + + + + Minutes + dêyqa + + node_modules/src/ngb-config.ts + 13 + + + + »» + »» + + node_modules/src/ngb-config.ts + 13 + + + + First + avali + + node_modules/src/ngb-config.ts + 13 + + + + Increment hours + êzāf kerdên sāat + + node_modules/src/ngb-config.ts + 13 + + + + Previous + pîši + + node_modules/src/ngb-config.ts + 13 + + + + Decrement hours + kam kerdên sāat + + node_modules/src/ngb-config.ts + 13 + + + + Next + niyâyi + + node_modules/src/ngb-config.ts + 13 + + + + Increment minutes + êzāf kerdên dêyqa + + node_modules/src/ngb-config.ts + 13 + + + + Last + dindâyi + + node_modules/src/ngb-config.ts + 13 + + + + Decrement minutes + + node_modules/src/ngb-config.ts + 13 + + + + SS + + node_modules/src/ngb-config.ts + 13 + + + + Seconds + + node_modules/src/ngb-config.ts + 13 + + + + Increment seconds + + node_modules/src/ngb-config.ts + 13 + + + + Decrement seconds + + node_modules/src/ngb-config.ts + 13 + + + + + + node_modules/src/ngb-config.ts + 13 + + + + Become a Community Sponsor + + src/app/components/about/about-sponsors.component.html + 4 + + about.community-sponsor-button + + + Become an Enterprise Sponsor + + src/app/components/about/about-sponsors.component.html + 11 + + about.enterprise-sponsor-button + + + The Mempool Open Source Project + + src/app/components/about/about.component.html + 13 + + about.about-the-project + + + Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties. + + src/app/components/about/about.component.html + 14 + + + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + + + Enterprise Sponsors 🚀 + + src/app/components/about/about.component.html + 41 + + about.sponsors.enterprise.withRocket + + + Whale Sponsors + + src/app/components/about/about.component.html + 228 + + about.sponsors.withHeart + + + Chad Sponsors + + src/app/components/about/about.component.html + 241 + + about.sponsors.withHeart + + + OG Sponsors ❤️ + + src/app/components/about/about.component.html + 254 + + about.sponsors.withHeart + + + Community Integrations + + src/app/components/about/about.component.html + 265 + + about.community-integrations + + + Community Alliances + + src/app/components/about/about.component.html + 379 + + about.alliances + + + Project Translators + + src/app/components/about/about.component.html + 395 + + about.translators + + + Project Contributors + + src/app/components/about/about.component.html + 409 + + about.contributors + + + Project Members + + src/app/components/about/about.component.html + 421 + + about.project_members + + + Project Maintainers + + src/app/components/about/about.component.html + 434 + + about.maintainers + + + About + + src/app/components/about/about.component.ts + 49 + + + + Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. + + src/app/components/about/about.component.ts + 50 + + + + Sorry, something went wrong! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 12 + + accelerator.sorry-error-title + + + We were not able to accelerate this transaction. Please try again later. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 19 + + accelerator.error-failed-to-accelerate + + + Close + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 26 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 602 + + close + + + Your transaction + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 45 + + accelerator.your-transaction + + + Plus unconfirmed ancestor(s) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 49 + + accelerator.plus-unconfirmed-ancestors + + + Virtual size + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 54 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 59 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 25 + + + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 + + + src/app/components/transaction/transaction.component.html + 188 + + Transaction Virtual Size + transaction.vsize + + + Size in vbytes of this transaction (including unconfirmed ancestors) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 59 + + accelerator.transaction-vbytes-size-description + + + In-band fees + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 63 + + accelerator.in-band-fees + + + sats + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 65 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 98 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 131 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 153 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 171 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 183 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 201 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 223 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 239 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 353 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 375 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 386 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 + + + src/app/components/calculator/calculator.component.html + 29 + + + src/app/components/calculator/calculator.component.html + 44 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + + + src/app/lightning/channels-list/channels-list.component.html + 63 + + + src/app/lightning/channels-list/channels-list.component.html + 87 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 17 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 63 + + + src/app/lightning/group/group-preview.component.html + 34 + + + src/app/lightning/group/group.component.html + 32 + + + src/app/lightning/group/group.component.html + 83 + + + src/app/lightning/justice-list/justice-list.component.html + 28 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 50 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 22 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 82 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 23 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 79 + + shared.sats + + + Fees already paid by this transaction (including unconfirmed ancestors) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 70 + + accelerator.fees-already-paid-description + + + How much faster? + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 79 + + accelerator.how-much-faster + + + This will reduce your expected waiting time until the first confirmation to + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 84,85 + + accelerator.time-estimate-description + + + Summary + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 108 + + accelerator.summary-title + + + Next block market rate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 117 + + accelerator.next-block-rate + + + sat/vB + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 121 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 143 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 3 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 7 + + sat/vB + shared.sat-vbyte + + + Estimated extra fee required + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 125 + + accelerator.estimated-extra-fee-required + + + Target rate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 139 + + accelerator.target-rate + + + Extra fee required + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 147 + + accelerator.extra-fee-required + + + Mempool Accelerator® fees + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 161 + + accelerator.mempool-accelerator-fees + + + Accelerator Service Fee + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 165 + + accelerator.service-fee + + + Transaction Size Surcharge + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 177 + + accelerator.tx-size-surcharge + + + Estimated acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 193 + + accelerator.estimated-cost + + + Maximum acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 212 + + accelerator.maximum-cost + + + Acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 214 + + accelerator.cost + + + Available balance + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 234 + + accelerator.available-balance + + + Go back + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 266 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 457 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 529 + + go-back + + + Accelerate your Bitcoin transaction? + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 281 + + accelerator.accelerate-your-transaction + + + Wait + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 293 + + accelerator.wait + + + Confirmation expected + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 295 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 610 + + accelerator.confirmation-expected + + + Confirmation not expected any time soon + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 298 + + accelerator.confirmation-not-expected-soon + + + For an additional + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 353 + + accelerator.for-an-additional-cost + + + Reducing expected confirmation time to + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 359,360 + + accelerator.reducing-expected-confirmation-time + + + Payment to mempool.space for acceleration of txid .. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 370,371 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 471 + + accelerator.payment-to-mempool-space + + + Your account will be debited no more than + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 375 + + accelerator.your-account-will-be-debited + + + Pay + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 386 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 411 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 482 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 641 + + Pay button label + transaction.pay + + + Failed to load invoice + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 391 + + accelerator.failed-to-load-invoice + + + Loading invoice... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 397 + + accelerator.loading-invoice + + + OR + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 405 + + or + + + Confirm your payment + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 464 + + accelerator.confirm-your-payment + + + Total additional cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 480 + + accelerator.total-additional-cost + + + with + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 484 + + accelerator.pay-with + + + Loading payment method... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 513 + + accelerator.loading-payment-method + + + Confirming your payment + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 536 + + accelerator.confirming-your-payment + + + We are processing your payment... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 546 + + accelerator.payment-processing + + + Accelerating your transaction + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 556 + + accelerator.accelerating-your-transaction + + + Confirming your acceleration with our mining pool partners... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 563 + + accelerator.confirming-acceleration-with-miners + + + ...sorry, this is taking longer than expected... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 565 + + accelerator.confirming-acceleration-with-miners + + + Your transaction is being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 576 + + accelerator.success-message + + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + + + Your transaction has been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 587 + + accelerator.confirmed-acceleration-with-miners + + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + + + Calculating cost... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 614 + + accelerator.calculating-cost + + + customize + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 620 + + accelerator.customize + + + Accelerate to ~ sat/vB + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 623 + + accelerator.accelerate-to-x + + + Accelerate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 629 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 + + Accelerate button label + transaction.accelerate + + + Your transaction will be prioritized by up to % of miners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 651 + + accelerator.hashrate-percentage-description + + + Next Block + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 81 + + + src/app/components/block/block.component.html + 12 + + + src/app/components/difficulty/difficulty-tooltip.component.html + 28 + + + src/app/components/mempool-block/mempool-block.component.ts + 87 + + + src/app/components/pool/pool.component.html + 178 + + + src/app/components/tracker/tracker-bar.component.html + 8 + + + + maximum + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 91 + + + + accelerated + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 91 + + + + Status + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 11 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 20 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 109 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 33 + + + src/app/dashboard/dashboard.component.html + 74 + + + src/app/lightning/channels-list/channels-list.component.html + 40 + + Transaction Status + transaction.status + + + First seen + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 14 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 66 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 20 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 24 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 28 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 17 + + + src/app/components/tracker/tracker.component.html + 59 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 + + + src/app/lightning/node/node.component.html + 74 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 61 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 58 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 11 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 15 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 15 + + Transaction first seen + transaction.first-seen + + + Accelerated + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 16 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 92 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 96 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 89 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 97 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 + + + src/app/shared/filters.utils.ts + 100 + + transaction.audit.accelerated + + + Mined + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 18 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 34 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 125 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 66 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 121 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 154 + + + src/app/components/pool/pool.component.html + 305 + + + src/app/components/pool/pool.component.html + 367 + + + src/app/components/rbf-list/rbf-list.component.html + 23 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 38 + + + src/app/dashboard/dashboard.component.html + 86 + + + src/app/dashboard/dashboard.component.html + 106 + + transaction.rbf.mined + + + Fee + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 23 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 42 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 196 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 21 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 44 + + + src/app/dashboard/dashboard.component.html + 137 + + Transaction fee + transaction.fee + + + Out-of-band fees + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 27 + + transaction.out-of-band-fees + + + Fee rate + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 12 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 46 + + + src/app/components/transaction/cpfp-info.component.html + 13 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 + + + src/app/lightning/channel/channel-box/channel-box.component.html + 18 + + + src/app/lightning/channel/channel-preview.component.html + 31 + + + src/app/lightning/channels-list/channels-list.component.html + 41 + + Transaction fee rate + transaction.fee-rate + + + Accelerated fee rate + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 39 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 53 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 + + Accelerated transaction fee rate + transaction.accelerated-fee-rate + + + Accelerated by + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 48 + + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 30 + + Accelerated to hashrate + transaction.accelerated-by-hashrate + + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + + + Acceleration Fees + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.html + 6 + + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 79 + + + src/app/components/graphs/graphs.component.html + 52 + + accelerator.acceleration-fees + + + No accelerated transaction for this timeframe + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 135 + + + + At block: + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 179 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 255 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 143 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 168 + + + + Around block: + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 181 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 257 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 145 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 170 + + + + Requests + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 4 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 32 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 4 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 32 + + accelerator.requests + + + accelerated + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 7 + + accelerator.total-accelerated-plural + + + Total Bid Boost + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 11 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 39 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 82 + + accelerator.total-boost + + + BTC + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 13 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 13 + + + src/app/components/amount-selector/amount-selector.component.html + 3 + + + src/app/components/balance-widget/balance-widget.component.html + 7 + + + src/app/components/balance-widget/balance-widget.component.html + 16 + + + src/app/components/balance-widget/balance-widget.component.html + 25 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 18 + + BTC + shared.btc + + + Total vSize + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 20 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 46 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 20 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 46 + + accelerator.total-vsize + + + of blocks + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 23 + + accelerator.percent-of-blocks + + + Accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 2 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.ts + 62 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 67 + + + src/app/components/graphs/graphs.component.html + 49 + + accelerator.accelerations + + + TXID + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 10 + + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 3 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 106 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 193 + + + src/app/components/push-transaction/push-transaction.component.html + 40 + + + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 + + + src/app/dashboard/dashboard.component.html + 71 + + + src/app/dashboard/dashboard.component.html + 134 + + dashboard.latest-transactions.txid + + + Bid + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 13 + + accelerator.bid + + + Requested + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 14 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 21 + + accelerator.requested + + + Bid Boost + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 17 + + Bid Boost + transaction.bid-boost + + + Block + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 18 + + + src/app/components/block/block-preview.component.html + 3 + + + src/app/components/block/block.component.html + 9 + + shared.block-title + + + Pool + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 19 + + + src/app/components/blocks-list/blocks-list.component.html + 17 + + + src/app/components/blocks-list/blocks-list.component.html + 17 + + + src/app/components/pool-ranking/pool-ranking.component.html + 92 + + mining.pool-name + + + Pending + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 64 + + + src/app/components/address/address.component.html + 280 + + + src/app/components/tracker/tracker-bar.component.html + 4 + + accelerator.pending + + + Completed + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 65 + + accelerator.completed + + + Failed + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 68 + + accelerator.canceled + + + There are no active accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 134 + + accelerations.no-accelerations + + + There are no recent accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 135 + + accelerations.no-accelerations + + + Active Accelerations + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 10 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 101 + + accelerator.pending-accelerations + + + Acceleration stats + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 24 + + accelerator.acceleration-stats + + + (1 day) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 27 + + mining.1-day + + + (1 week) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 30 + + mining.1-week + + + (1 month) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 33 + + mining.1-month + + + (all time) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 36 + + mining.all-time + + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + + + View more » + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 91 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 34 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 46 + + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 42 + + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 56 + + dashboard.view-more + + + Recent Accelerations + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 113 + + dashboard.recent-accelerations + + + Accelerator Dashboard + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts + 57 + + + + Accelerated to + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 7 + + Accelerated to feerate + transaction.accelerated-to-feerate + + + of hashrate + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 32 + + accelerator.x-of-hash-rate + + + not accelerating + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts + 99 + + + + pending + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 7 + + accelerator.total-pending + + + Avg Max Bid + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 11 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 39 + + accelerator.average-max-bid + + + of block + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 23 + + accelerator.percent-of-block + + + Balance + + src/app/components/address-graph/address-graph.component.ts + 61 + + + src/app/components/address-graph/address-graph.component.ts + 202 + + + src/app/components/address-graph/address-graph.component.ts + 229 + + + src/app/components/address-graph/address-graph.component.ts + 310 + + + src/app/components/address-graph/address-graph.component.ts + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 + + + src/app/components/address/address-preview.component.html + 31 + + + src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html + 9 + + + + Balances + + src/app/components/address-group/address-group.component.html + 4 + + addresses.balance + + + Total + + src/app/components/address-group/address-group.component.html + 9 + + addresses.total + + + Amount + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 38 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 194 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 10 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 14 + + + src/app/dashboard/dashboard.component.html + 135 + + dashboard.latest-transactions.amount + + + Date + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 6 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 13 + + + src/app/components/search-form/search-results/search-results.component.html + 9 + + shared.date + + + Address + + src/app/components/address/address-preview.component.html + 3 + + + src/app/components/address/address.component.html + 3 + + + src/app/components/faucet/faucet.component.html + 80 + + + src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html + 8 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 9 + + shared.address + + + Unconfidential + + src/app/components/address/address-preview.component.html + 15 + + + src/app/components/address/address.component.html + 311 + + address.unconfidential + + + Total received + + src/app/components/address/address-preview.component.html + 22 + + + src/app/components/address/address.component.html + 295 + + + src/app/components/wallet/wallet.component.html + 48 + + address.total-received + + + Total sent + + src/app/components/address/address-preview.component.html + 26 + + address.total-sent + + + Transactions + + src/app/components/address/address-preview.component.html + 35 + + + src/app/components/block/block.component.html + 406 + + + src/app/components/block/block.component.html + 438 + + + src/app/components/block/block.component.html + 462 + + + src/app/components/blocks-list/blocks-list.component.html + 27 + + + src/app/components/clock/clock.component.html + 59 + + + src/app/components/mempool-block/mempool-block.component.html + 32 + + + src/app/components/wallet/wallet.component.html + 80 + + address.transactions + + + Unspent TXOs + + src/app/components/address/address-preview.component.html + 39 + + address.unspent_txos + + + Confidential + + src/app/components/address/address-preview.component.html + 55 + + + src/app/components/address/address.component.html + 256 + + + src/app/components/amount/amount.component.html + 21 + + + src/app/components/asset-circulation/asset-circulation.component.html + 2 + + + src/app/components/asset/asset.component.html + 158 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 205 + + + src/app/components/transaction/transaction-preview.component.html + 18 + + + src/app/components/transactions-list/transactions-list.component.html + 484 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 98 + + + src/app/dashboard/dashboard.component.html + 146 + + shared.confidential + + + Address: + + src/app/components/address/address-preview.component.ts + 73 + + + src/app/components/address/address.component.ts + 173 + + + + See mempool transactions, confirmed transactions, balance, and more for address . + + src/app/components/address/address-preview.component.ts + 74 + + + src/app/components/address/address.component.ts + 174 + + + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + + + Balance History + + src/app/components/address/address.component.html + 93 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 237 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 + + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history + + + recent + + src/app/components/address/address.component.html + 101 + + recent + + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + + + of transaction + + src/app/components/address/address.component.html + 129 + + X of X Address Transaction + + + of transactions + + src/app/components/address/address.component.html + 130 + + X of X Address Transactions (Plural) + + + Error loading address data. + + src/app/components/address/address.component.html + 229 + + + src/app/components/address/address.component.html + 246 + + address.error.loading-address-data + + + There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + + src/app/components/address/address.component.html + 232,235 + + Electrum server limit exceeded error + + + Confirmed balance + + src/app/components/address/address.component.html + 275 + + + src/app/components/wallet/wallet.component.html + 40 + + address.confirmed-balance + + + Confirmed UTXOs + + src/app/components/address/address.component.html + 285 + + + src/app/components/wallet/wallet.component.html + 44 + + address.confirmed-utxos + + + Pending UTXOs + + src/app/components/address/address.component.html + 290 + + address.pending-utxos + + + Type + + src/app/components/address/address.component.html + 300 + + + src/app/components/transaction/cpfp-info.component.html + 9 + + + src/app/components/transactions-list/transactions-list.component.html + 447 + + address.type + + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + + + Asset + + src/app/components/asset/asset.component.html + 3 + + Liquid Asset page title + asset + + + Name + + src/app/components/asset/asset.component.html + 21 + + + src/app/components/assets/assets.component.html + 4 + + + src/app/components/assets/assets.component.html + 31 + + + src/app/lightning/node/node.component.html + 138 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 28 + + Asset name header + + + Precision + + src/app/components/asset/asset.component.html + 25 + + Liquid Asset precision + asset.precision + + + Issuer + + src/app/components/asset/asset.component.html + 29 + + Liquid Asset issuer + asset.issuer + + + Issuance TX + + src/app/components/asset/asset.component.html + 33 + + Liquid Asset issuance TX + asset.issuance-tx + + + Pegged in + + src/app/components/asset/asset.component.html + 37 + + Liquid Asset pegged-in amount + asset.pegged-in + + + Pegged out + + src/app/components/asset/asset.component.html + 41 + + Liquid Asset pegged-out amount + asset.pegged-out + + + Issued amount + + src/app/components/asset/asset.component.html + 45 + + Liquid Asset issued amount + asset.issued-amount + + + Burned amount + + src/app/components/asset/asset.component.html + 49 + + Liquid Asset burned amount + asset.burned-amount + + + Circulating amount + + src/app/components/asset/asset.component.html + 53 + + + src/app/components/asset/asset.component.html + 57 + + Liquid Asset circulating amount + asset.circulating-amount + + + of   + + src/app/components/asset/asset.component.html + 78 + + asset.M_of_N + + + Peg In/Out and Burn Transactions + + src/app/components/asset/asset.component.html + 79 + + Liquid native asset transactions title + + + Issuance and Burn Transactions + + src/app/components/asset/asset.component.html + 80 + + Default asset transactions title + + + Error loading asset data. + + src/app/components/asset/asset.component.html + 150 + + asset.error.loading-asset-data + + + Asset: + + src/app/components/asset/asset.component.ts + 75 + + + + Browse an overview of the Liquid asset (): see issued amount, burned amount, circulating amount, related transactions, and more. + + src/app/components/asset/asset.component.ts + 108 + + + + Group of assets + + src/app/components/assets/asset-group/asset-group.component.html + 8 + + + src/app/components/assets/assets-featured/assets-featured.component.html + 11 + + + + No featured assets + + src/app/components/assets/assets-featured/assets-featured.component.html + 3 + + liquid.no-featured.assets + + + Assets + + src/app/components/assets/assets-nav/assets-nav.component.html + 3 + + + src/app/components/assets/assets-nav/assets-nav.component.ts + 42 + + + src/app/components/assets/assets.component.ts + 44 + + Assets page header + + + Featured + + src/app/components/assets/assets-nav/assets-nav.component.html + 9 + + + + All + + src/app/components/assets/assets-nav/assets-nav.component.html + 13 + + + src/app/components/block-filters/block-filters.component.html + 21 + + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 73 + + + src/app/components/pool-ranking/pool-ranking.component.html + 72 + + + src/app/components/pool/pool.component.html + 122 + + + src/app/components/pool/pool.component.html + 145 + + + src/app/components/pool/pool.component.html + 530 + + + src/app/components/pool/pool.component.html + 555 + + + src/app/components/rbf-list/rbf-list.component.html + 9 + + + src/app/components/statistics/statistics.component.html + 57 + + + src/app/dashboard/dashboard.component.ts + 78 + + + + Search asset + + src/app/components/assets/assets-nav/assets-nav.component.html + 19 + + Search Assets Placeholder Text + + + Clear + + src/app/components/assets/assets-nav/assets-nav.component.html + 21 + + Search Clear Button + + + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. + + src/app/components/assets/assets-nav/assets-nav.component.ts + 43 + + + + Ticker + + src/app/components/assets/assets.component.html + 5 + + + src/app/components/assets/assets.component.html + 32 + + Asset ticker header + + + Issuer domain + + src/app/components/assets/assets.component.html + 6 + + + src/app/components/assets/assets.component.html + 33 + + Asset Issuer Domain header + + + Asset ID + + src/app/components/assets/assets.component.html + 7 + + + src/app/components/assets/assets.component.html + 34 + + Asset ID header + + + Error loading assets data. + + src/app/components/assets/assets.component.html + 50 + + Asset data load error + + + BTC Holdings + + src/app/components/balance-widget/balance-widget.component.html + 5 + + + src/app/components/balance-widget/balance-widget.component.html + 38 + + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 12 + + dashboard.btc-holdings + + + Change (7d) + + src/app/components/balance-widget/balance-widget.component.html + 14 + + + src/app/components/balance-widget/balance-widget.component.html + 45 + + dashboard.7d-change + + + Change (30d) + + src/app/components/balance-widget/balance-widget.component.html + 23 + + + src/app/components/balance-widget/balance-widget.component.html + 52 + + dashboard.30d-change + + + Block Fee Rates + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 6 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 72 + + + src/app/components/graphs/graphs.component.html + 16 + + mining.block-fee-rates + + + Avg Block Fee (24h) + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 51 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 76 + + mining.avg-block-fee-24h + + + Avg Block Fee (1m) + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 57 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 84 + + mining.avg-block-fee-1m + + + See Bitcoin feerates visualized over time, including minimum and maximum feerates per block along with feerates at various percentiles. + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 73 + + + + Block Fees + + src/app/components/block-fees-graph/block-fees-graph.component.html + 6 + + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 69 + + + src/app/components/graphs/graphs.component.html + 18 + + mining.block-fees + + + See the average mining fees earned per Bitcoin block visualized in BTC and USD over time. + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 70 + + + + Indexing blocks + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 119 + + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 137 + + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 116 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 119 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 204 + + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 202 + + + src/app/components/indexing-progress/indexing-progress.component.html + 1 + + + src/app/components/pool/pool-preview.component.ts + 122 + + + + Block Fees Vs Subsidy + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html + 6 + + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 78 + + + src/app/components/graphs/graphs.component.html + 20 + + mining.block-fees-subsidy-subsidy + + + See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time. + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 79 + + + + At block + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 185 + + + + Around block + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 187 + + + + select filter categories to highlight matching transactions + + src/app/components/block-filters/block-filters.component.html + 2 + + Mempool Goggles™ tooltip + + + Match + + src/app/components/block-filters/block-filters.component.html + 18 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 70 + + mempool-goggles.match + + + Any + + src/app/components/block-filters/block-filters.component.html + 24 + + mempool-goggles.any + + + Tint + + src/app/components/block-filters/block-filters.component.html + 29 + + mempool-goggles.tint + + + Classic + + src/app/components/block-filters/block-filters.component.html + 32 + + + src/app/components/theme-selector/theme-selector.component.html + 3 + + mempool-goggles.classic + + + Age + + src/app/components/block-filters/block-filters.component.html + 35 + + mempool-goggles.age + + + Block Health + + src/app/components/block-health-graph/block-health-graph.component.html + 6 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 63 + + + src/app/components/graphs/graphs.component.html + 26 + + mining.blocks-health + + + See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool's re-implementation of Bitcoin Core's transaction selection algorithm. + + src/app/components/block-health-graph/block-health-graph.component.ts + 64 + + + + No data to display yet. Try again later. + + src/app/components/block-health-graph/block-health-graph.component.ts + 109 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 120 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 86 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 233 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 146 + + + + Health + + src/app/components/block-health-graph/block-health-graph.component.ts + 190 + + + src/app/components/block/block.component.html + 62 + + + src/app/components/blocks-list/blocks-list.component.html + 20 + + + src/app/components/blocks-list/blocks-list.component.html + 20 + + + src/app/components/pool/pool.component.html + 307 + + + + not available + + src/app/components/block-overview-graph/block-overview-graph.component.html + 8 + + block.not-available + + + Your browser does not support this feature. + + src/app/components/block-overview-graph/block-overview-graph.component.html + 23 + + webgl-disabled + + + Transaction + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 12 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 11 + + + src/app/components/tracker/tracker.component.html + 34 + + + src/app/components/transaction/transaction-preview.component.html + 3 + + + src/app/components/transaction/transaction.component.html + 10 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 72 + + shared.transaction + + + Confirmed + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 32 + + + src/app/components/tracker/tracker-bar.component.html + 10 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 + + + src/app/shared/components/confirmations/confirmations.component.html + 9 + + Transaction confirmed state + transaction.confirmed + + + Effective fee rate + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 52 + + + src/app/components/push-transaction/push-transaction.component.html + 41 + + + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 + + Effective transaction fee rate + transaction.effective-fee-rate + + + Weight + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 63 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 29 + + + src/app/components/transaction/cpfp-info.component.html + 12 + + Transaction Weight + transaction.weight + + + Audit status + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 67 + + transaction.audit-status + + + Removed + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 71 + + + src/app/shared/components/confirmations/confirmations.component.html + 15 + + Transaction removed state + transaction.audit.removed + + + Marginal fee rate + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 72 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 87 + + transaction.audit.marginal + + + High sigop count + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 73 + + transaction.audit.sigop + + + Recently broadcasted + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 74 + + transaction.audit.recently-broadcasted + + + Recently CPFP'd + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 75 + + transaction.audit.recently-cpfped + + + Added + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 76 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added + tx-features.tag.added + + + Prioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 77 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized + tx-features.tag.prioritized + + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + + + Conflict + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 88 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict + tx-features.tag.conflict + + + Block Rewards + + src/app/components/block-rewards-graph/block-rewards-graph.component.html + 7 + + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 67 + + + src/app/components/graphs/graphs.component.html + 22 + + mining.block-rewards + + + See Bitcoin block rewards in BTC and USD visualized over time. Block rewards are the total funds miners earn from the block subsidy and fees. + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 68 + + + + Block Sizes and Weights + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.html + 5 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 64 + + + src/app/components/graphs/graphs.component.html + 24 + + mining.block-sizes-weights + + + See Bitcoin block sizes (MB) and block weights (weight units) visualized over time. + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 65 + + + + Size + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 187 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 242 + + + src/app/components/block/block.component.html + 54 + + + src/app/components/blocks-list/blocks-list.component.html + 28 + + + src/app/components/clock/clock.component.html + 54 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 156 + + + src/app/components/mempool-block/mempool-block.component.html + 36 + + + src/app/components/mempool-graph/mempool-graph.component.ts + 331 + + + src/app/components/pool/pool.component.html + 311 + + + src/app/components/pool/pool.component.html + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 + + + src/app/components/transaction/transaction.component.html + 184 + + + src/app/dashboard/dashboard.component.html + 108 + + + + Weight + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 195 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 273 + + + src/app/components/block/block-preview.component.html + 32 + + + src/app/components/block/block.component.html + 58 + + + src/app/components/block/block.component.html + 402 + + + src/app/components/block/block.component.html + 429 + + + src/app/components/block/block.component.html + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 + + + src/app/components/transaction/transaction.component.html + 200 + + + + Size per weight + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 203 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 285 + + + + Block : + + src/app/components/block-view/block-view.component.ts + 110 + + + src/app/components/block/block-preview.component.ts + 104 + + + src/app/components/block/block.component.ts + 262 + + + + See size, weight, fee range, included transactions, and more for Liquid block (). + + src/app/components/block-view/block-view.component.ts + 112 + + + src/app/components/block/block-preview.component.ts + 106 + + + src/app/components/block/block.component.ts + 264 + + + + See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + + src/app/components/block-view/block-view.component.ts + 114 + + + src/app/components/block/block-preview.component.ts + 108 + + + src/app/components/block/block.component.ts + 266 + + + + Genesis + + src/app/components/block/block-preview.component.html + 10 + + + src/app/components/block/block.component.html + 10 + + + + Timestamp + + src/app/components/block/block-preview.component.html + 26 + + + src/app/components/block/block.component.html + 48 + + + src/app/components/blocks-list/blocks-list.component.html + 18 + + + src/app/components/pool/pool.component.html + 192 + + + src/app/components/pool/pool.component.html + 304 + + + src/app/components/pool/pool.component.html + 366 + + + src/app/components/search-form/search-results/search-results.component.html + 15 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 + + block.timestamp + + + Median fee + + src/app/components/block/block-preview.component.html + 36 + + + src/app/components/block/block.component.html + 136 + + + src/app/components/mempool-block/mempool-block.component.html + 16 + + block.median-fee + + + Total fees + + src/app/components/block/block-preview.component.html + 41 + + + src/app/components/block/block.component.html + 147 + + + src/app/components/block/block.component.html + 173 + + + src/app/components/block/block.component.html + 396 + + + src/app/components/block/block.component.html + 417 + + + src/app/components/block/block.component.html + 454 + + + src/app/components/mempool-block/mempool-block.component.html + 28 + + Total fees in a block + block.total-fees + + + Miner + + src/app/components/block/block-preview.component.html + 53 + + + src/app/components/block/block.component.html + 182 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 + + block.miner + + + transaction + + src/app/components/block/block-transactions.component.html + 4 + + + src/app/components/block/block.component.html + 342 + + + src/app/components/blockchain-blocks/blockchain-blocks.component.html + 55 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 31 + + shared.transaction-count.singular + + + transactions + + src/app/components/block/block-transactions.component.html + 5 + + + src/app/components/block/block.component.html + 343 + + + src/app/components/blockchain-blocks/blockchain-blocks.component.html + 56 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 32 + + shared.transaction-count.plural + + + Error loading data. + + src/app/components/block/block-transactions.component.html + 16 + + + src/app/lightning/channel/channel-preview.component.html + 70 + + + src/app/lightning/node/node-preview.component.html + 66 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 61 + + error.general-loading-data + + + This block does not belong to the main chain, it has been replaced by: + + src/app/components/block/block.component.html + 5 + + Block reorg + block.reorged + + + Previous Block + + src/app/components/block/block.component.html + 19 + + Previous Block + + + Stale + + src/app/components/block/block.component.html + 30 + + Stale block state + block.stale + + + Hash + + src/app/components/block/block.component.html + 44 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + + block.hash + + + Unknown + + src/app/components/block/block.component.html + 73 + + + src/app/components/blocks-list/blocks-list.component.html + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 + + + src/app/components/pool-ranking/pool-ranking.component.html + 123 + + + src/app/components/pool/pool.component.html + 106 + + + src/app/components/pool/pool.component.html + 340 + + + src/app/lightning/channel/closing-type/closing-type.component.ts + 32 + + + src/app/lightning/node/node-preview.component.html + 52 + + + src/app/lightning/node/node.component.html + 56 + + + src/app/lightning/node/node.component.html + 103 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 154 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 323 + + + src/app/services/api.service.ts + 275 + + + src/app/services/api.service.ts + 288 + + unknown + + + Fee span + + src/app/components/block/block.component.html + 132 + + + src/app/components/mempool-block/mempool-block.component.html + 20 + + mempool-block.fee-span + + + Based on average native segwit transaction of 140 vBytes + + src/app/components/block/block.component.html + 140 + + + src/app/components/fees-box/fees-box.component.html + 16 + + + src/app/components/fees-box/fees-box.component.html + 22 + + + src/app/components/fees-box/fees-box.component.html + 27 + + + src/app/components/fees-box/fees-box.component.html + 32 + + + src/app/components/mempool-block/mempool-block.component.html + 17 + + Transaction fee tooltip + + + Subsidy + fees + + src/app/components/block/block.component.html + 162 + + + src/app/components/block/block.component.html + 177 + + Total subsidy and fees in a block + block.subsidy-and-fees + + + Expected + + src/app/components/block/block.component.html + 232 + + + src/app/components/pool/pool.component.html + 190 + + block.expected + + + Actual + + src/app/components/block/block.component.html + 234 + + block.actual + + + Expected Block + + src/app/components/block/block.component.html + 238 + + block.expected-block + + + Actual Block + + src/app/components/block/block.component.html + 253 + + block.actual-block + + + Version + + src/app/components/block/block.component.html + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 + + + src/app/components/transaction/transaction.component.html + 210 + + transaction.version + + + Taproot + + src/app/components/block/block.component.html + 281 + + + src/app/components/tx-features/tx-features.component.html + 12 + + + src/app/components/tx-features/tx-features.component.html + 14 + + + src/app/components/tx-features/tx-features.component.html + 16 + + + src/app/components/tx-features/tx-features.component.html + 18 + + + src/app/components/tx-features/tx-features.component.html + 21 + + Taproot + tx-features.tag.taproot + + + Bits + + src/app/components/block/block.component.html + 284 + + block.bits + + + Merkle root + + src/app/components/block/block.component.html + 288 + + block.merkle-root + + + Difficulty + + src/app/components/block/block.component.html + 299 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 7 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 14 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 75 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 302 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 403 + + block.difficulty + + + Nonce + + src/app/components/block/block.component.html + 303 + + block.nonce + + + Block Header Hex + + src/app/components/block/block.component.html + 307 + + block.header + + + Audit + + src/app/components/block/block.component.html + 325 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 + + Toggle Audit + block.toggle-audit + + + Details + + src/app/components/block/block.component.html + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 + + + src/app/components/transaction/transaction.component.html + 79 + + + src/app/components/transaction/transaction.component.html + 168 + + + src/app/components/transaction/transaction.component.html + 176 + + + src/app/components/transaction/transaction.component.html + 301 + + + src/app/lightning/channel/channel.component.html + 93 + + + src/app/lightning/channel/channel.component.html + 103 + + + src/app/lightning/justice-list/justice-list.component.html + 42 + + + src/app/lightning/node/node.component.html + 123 + + + src/app/lightning/node/node.component.html + 264 + + Transaction Details + transaction.details + + + Error loading block data. + + src/app/components/block/block.component.html + 374 + + block.error.loading-block-data + + + Why is this block empty? + + src/app/components/block/block.component.html + 388 + + block.empty-block-explanation + + + Acceleration fees paid out-of-band + + src/app/components/block/block.component.html + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + Acceleration Fees + + + Blocks + + src/app/components/blocks-list/blocks-list.component.html + 5 + + + src/app/components/blocks-list/blocks-list.component.ts + 70 + + + src/app/components/pool-ranking/pool-ranking.component.html + 94 + + + src/app/components/pool/pool.component.html + 298 + + master-page.blocks + + + Height + + src/app/components/blocks-list/blocks-list.component.html + 15 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 153 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 5 + + + src/app/components/pool/pool.component.html + 189 + + + src/app/components/pool/pool.component.html + 303 + + + src/app/components/pool/pool.component.html + 365 + + + src/app/dashboard/dashboard.component.html + 105 + + latest-blocks.height + + + Reward + + src/app/components/blocks-list/blocks-list.component.html + 22 + + + src/app/components/blocks-list/blocks-list.component.html + 22 + + + src/app/components/pool/pool.component.html + 94 + + + src/app/components/pool/pool.component.html + 191 + + + src/app/components/pool/pool.component.html + 308 + + + src/app/components/pool/pool.component.html + 369 + + + src/app/components/pool/pool.component.html + 477 + + + src/app/components/pool/pool.component.html + 502 + + latest-blocks.reward + + + Fees + + src/app/components/blocks-list/blocks-list.component.html + 23 + + + src/app/components/pool/pool.component.html + 309 + + + src/app/components/pool/pool.component.html + 370 + + latest-blocks.fees + + + TXs + + src/app/components/blocks-list/blocks-list.component.html + 26 + + + src/app/components/blocks-list/blocks-list.component.html + 26 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 80 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 155 + + + src/app/components/pool/pool.component.html + 310 + + + src/app/components/pool/pool.component.html + 371 + + + src/app/dashboard/dashboard.component.html + 107 + + + src/app/dashboard/dashboard.component.html + 284 + + dashboard.txs + + + See the most recent Liquid blocks along with basic stats such as block height, block size, and more. + + src/app/components/blocks-list/blocks-list.component.ts + 73 + + + + See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. + + src/app/components/blocks-list/blocks-list.component.ts + 75 + + + + Calculator + + src/app/components/calculator/calculator.component.html + 3 + + + src/app/shared/components/global-footer/global-footer.component.html + 108 + + shared.calculator + + + Copied! + + src/app/components/clipboard/clipboard.component.ts + 15 + + + + Price + + src/app/components/clock/clock.component.html + 41 + + + + High Priority + + src/app/components/clock/clock.component.html + 47 + + + src/app/components/fees-box/fees-box.component.html + 10 + + + src/app/components/fees-box/fees-box.component.html + 47 + + fees-box.high-priority + + + Memory Usage + + src/app/components/clock/clock.component.html + 65 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 84 + + + src/app/dashboard/dashboard.component.html + 288 + + Memory usage + dashboard.memory-usage + + + Unconfirmed + + src/app/components/clock/clock.component.html + 69 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 78 + + + src/app/components/footer/footer.component.html + 20 + + + src/app/dashboard/dashboard.component.html + 282 + + Unconfirmed count + dashboard.unconfirmed + + + Transaction Fees + + src/app/components/custom-dashboard/custom-dashboard.component.html + 8 + + + src/app/dashboard/dashboard.component.html + 6 + + fees-box.transaction-fees + + + Incoming Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 55 + + + src/app/components/footer/footer.component.html + 5 + + + src/app/dashboard/dashboard.component.html + 48 + + dashboard.incoming-transactions + + + Minimum fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 71 + + + src/app/dashboard/dashboard.component.html + 275 + + Minimum mempool fee + dashboard.minimum-fee + + + Purging + + src/app/components/custom-dashboard/custom-dashboard.component.html + 72 + + + src/app/dashboard/dashboard.component.html + 276 + + Purgin below fee + dashboard.purging + + + Recent Replacements + + src/app/components/custom-dashboard/custom-dashboard.component.html + 100 + + + src/app/dashboard/dashboard.component.html + 65 + + dashboard.recent-rbf-replacements + + + Previous fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 107 + + + src/app/dashboard/dashboard.component.html + 72 + + dashboard.previous-transaction-fee + + + New fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 108 + + + src/app/dashboard/dashboard.component.html + 73 + + dashboard.new-transaction-fee + + + Full RBF + + src/app/components/custom-dashboard/custom-dashboard.component.html + 122 + + + src/app/components/rbf-list/rbf-list.component.html + 24 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 35 + + + src/app/dashboard/dashboard.component.html + 87 + + transaction.full-rbf + + + RBF + + src/app/components/custom-dashboard/custom-dashboard.component.html + 123 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 36 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 37 + + + src/app/components/tx-features/tx-features.component.html + 28 + + + src/app/components/tx-features/tx-features.component.html + 29 + + + src/app/dashboard/dashboard.component.html + 88 + + RBF + tx-features.tag.rbf + + + Recent Blocks + + src/app/components/custom-dashboard/custom-dashboard.component.html + 147 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 56 + + + src/app/dashboard/dashboard.component.html + 99 + + + src/app/shared/components/global-footer/global-footer.component.html + 76 + + dashboard.recent-blocks + + + Recent Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 190 + + + src/app/dashboard/dashboard.component.html + 131 + + dashboard.recent-transactions + + + Treasury + + src/app/components/custom-dashboard/custom-dashboard.component.html + 228 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + + dashboard.treasury + + + Treasury Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 251 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + + dashboard.treasury-transactions + + + X Timeline + + src/app/components/custom-dashboard/custom-dashboard.component.html + 299 + + dashboard.x-timeline + + + Consolidation + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 74 + + + src/app/dashboard/dashboard.component.ts + 79 + + + src/app/shared/filters.utils.ts + 109 + + + + Coinjoin + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 75 + + + src/app/dashboard/dashboard.component.ts + 80 + + + src/app/shared/filters.utils.ts + 108 + + + + Data + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 76 + + + src/app/dashboard/dashboard.component.ts + 81 + + + src/app/shared/filters.utils.ts + 123 + + + + Adjusted + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 6 + + mining.adjusted + + + Change + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 8 + + mining.change + + + Difficulty Adjustment + + src/app/components/difficulty-mining/difficulty-mining.component.html + 1 + + + src/app/components/difficulty/difficulty.component.html + 1 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 23 + + dashboard.difficulty-adjustment + + + Remaining + + src/app/components/difficulty-mining/difficulty-mining.component.html + 7 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 74 + + difficulty-box.remaining + + + blocks + + src/app/components/difficulty-mining/difficulty-mining.component.html + 10,11 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 67,68 + + + src/app/components/footer/footer.component.html + 26,27 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 45,46 + + + src/app/lightning/channel/channel-box/channel-box.component.html + 78 + + shared.blocks + + + block + + src/app/components/difficulty-mining/difficulty-mining.component.html + 11,12 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 68,69 + + + src/app/components/footer/footer.component.html + 27,28 + + shared.block + + + Estimate + + src/app/components/difficulty-mining/difficulty-mining.component.html + 16 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 81 + + difficulty-box.estimate + + + Previous + + src/app/components/difficulty-mining/difficulty-mining.component.html + 28 + + + src/app/components/difficulty/difficulty.component.html + 64 + + difficulty-box.previous + + + Current Period + + src/app/components/difficulty-mining/difficulty-mining.component.html + 40 + + difficulty-box.current-period + + + Next Halving + + src/app/components/difficulty-mining/difficulty-mining.component.html + 47 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 88 + + difficulty-box.next-halving + + + blocks expected + + src/app/components/difficulty/difficulty-tooltip.component.html + 50 + + difficulty-box.expected-blocks + + + block expected + + src/app/components/difficulty/difficulty-tooltip.component.html + 51 + + difficulty-box.expected-block + + + blocks mined + + src/app/components/difficulty/difficulty-tooltip.component.html + 52 + + difficulty-box.mined-blocks + + + block mined + + src/app/components/difficulty/difficulty-tooltip.component.html + 53 + + difficulty-box.mined-block + + + blocks remaining + + src/app/components/difficulty/difficulty-tooltip.component.html + 54 + + difficulty-box.remaining-blocks + + + block remaining + + src/app/components/difficulty/difficulty-tooltip.component.html + 55 + + difficulty-box.remaining-block + + + blocks ahead + + src/app/components/difficulty/difficulty-tooltip.component.html + 56 + + difficulty-box.blocks-ahead + + + block ahead + + src/app/components/difficulty/difficulty-tooltip.component.html + 57 + + difficulty-box.block-ahead + + + blocks behind + + src/app/components/difficulty/difficulty-tooltip.component.html + 58 + + difficulty-box.blocks-behind + + + block behind + + src/app/components/difficulty/difficulty-tooltip.component.html + 59 + + difficulty-box.block-behind + + + Halving Countdown + + src/app/components/difficulty/difficulty.component.html + 2 + + dashboard.halving-countdown + + + difficulty + + src/app/components/difficulty/difficulty.component.html + 7 + + statistics.average-small + + + halving + + src/app/components/difficulty/difficulty.component.html + 10 + + statistics.median-small + + + Average block time + + src/app/components/difficulty/difficulty.component.html + 50 + + difficulty-box.average-block-time + + + New subsidy + + src/app/components/difficulty/difficulty.component.html + 103 + + difficulty-box.new-subsidy + + + Blocks remaining + + src/app/components/difficulty/difficulty.component.html + 111 + + shared.blocks-remaining + + + Block remaining + + src/app/components/difficulty/difficulty.component.html + 112 + + shared.block-remaining + + + Testnet4 Faucet + + src/app/components/faucet/faucet.component.html + 4 + + testnet4.faucet + + + Amount (sats) + + src/app/components/faucet/faucet.component.html + 64 + + amount-sats + + + Request Testnet4 Coins + + src/app/components/faucet/faucet.component.html + 83 + + testnet4.request-coins + + + Either 2x the minimum, or the Low Priority rate (whichever is lower) + + src/app/components/fees-box/fees-box.component.html + 4 + + Transaction feerate tooltip (economy) + + + No Priority + + src/app/components/fees-box/fees-box.component.html + 4 + + + src/app/components/fees-box/fees-box.component.html + 41 + + fees-box.no-priority + + + Usually places your transaction in between the second and third mempool blocks + + src/app/components/fees-box/fees-box.component.html + 8 + + Transaction feerate tooltip (low priority) + + + Low Priority + + src/app/components/fees-box/fees-box.component.html + 8 + + + src/app/components/fees-box/fees-box.component.html + 45 + + fees-box.low-priority + + + Usually places your transaction in between the first and second mempool blocks + + src/app/components/fees-box/fees-box.component.html + 9 + + Transaction feerate tooltip (medium priority) + + + Medium Priority + + src/app/components/fees-box/fees-box.component.html + 9 + + + src/app/components/fees-box/fees-box.component.html + 46 + + fees-box.medium-priority + + + Places your transaction in the first mempool block + + src/app/components/fees-box/fees-box.component.html + 10 + + Transaction feerate tooltip (high priority) + + + Backend is synchronizing + + src/app/components/footer/footer.component.html + 8 + + dashboard.backend-is-synchronizing + + + vB/s + + src/app/components/footer/footer.component.html + 13 + + vB/s + shared.vbytes-per-second + + + WU/s + + src/app/components/footer/footer.component.html + 14 + + WU/s + shared.weight-per-second + + + Mempool size + + src/app/components/footer/footer.component.html + 24 + + Mempool size + dashboard.mempool-size + + + Mining + + src/app/components/graphs/graphs.component.html + 7 + + mining + + + Pools Ranking + + src/app/components/graphs/graphs.component.html + 10 + + + src/app/components/pool-ranking/pool-ranking.component.html + 36 + + mining.pools + + + Pools Dominance + + src/app/components/graphs/graphs.component.html + 12 + + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html + 7 + + mining.pools-dominance + + + Hashrate & Difficulty + + src/app/components/graphs/graphs.component.html + 14 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 27 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 77 + + mining.hashrate-difficulty + + + Lightning + + src/app/components/graphs/graphs.component.html + 31 + + lightning + + + Lightning Nodes Per Network + + src/app/components/graphs/graphs.component.html + 34 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.html + 5 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 73 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 143 + + lightning.nodes-networks + + + Lightning Network Capacity + + src/app/components/graphs/graphs.component.html + 36 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.html + 5 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 70 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 133 + + lightning.network-capacity + + + Lightning Nodes Per ISP + + src/app/components/graphs/graphs.component.html + 38 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 53 + + lightning.nodes-per-isp + + + Lightning Nodes Per Country + + src/app/components/graphs/graphs.component.html + 40 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 5 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 46 + + lightning.nodes-per-country + + + Lightning Nodes World Map + + src/app/components/graphs/graphs.component.html + 42 + + + src/app/lightning/nodes-map/nodes-map.component.html + 5 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 51 + + lightning.lightning.nodes-heatmap + + + Lightning Nodes Channels World Map + + src/app/components/graphs/graphs.component.html + 44 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.html + 20 + + lightning.nodes-channels-world-map + + + Hashrate (1w) + + src/app/components/hashrate-chart/hashrate-chart.component.html + 8 + + mining.hashrate + + + Hashrate + + src/app/components/hashrate-chart/hashrate-chart.component.html + 69 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 291 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 391 + + + src/app/components/pool-ranking/pool-ranking.component.html + 93 + + + src/app/components/pool/pool-preview.component.html + 22 + + + src/app/components/pool/pool.component.ts + 244 + + + src/app/components/pool/pool.component.ts + 296 + + mining.hashrate + + + See hashrate and difficulty for the Bitcoin network visualized over time. + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 78 + + + + Hashrate (MA) + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 310 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 414 + + + + Pools Historical Dominance + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 74 + + + + See Bitcoin mining pool dominance visualized over time: see how top mining pools' share of total hashrate has fluctuated over time. + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 75 + + + + Indexing network hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 2 + + + + Indexing pools hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 3 + + + + Offline + + src/app/components/liquid-master-page/liquid-master-page.component.html + 41 + + + src/app/components/master-page/master-page.component.html + 33 + + + src/app/components/master-page/master-page.component.html + 57 + + master-page.offline + + + Reconnecting... + + src/app/components/liquid-master-page/liquid-master-page.component.html + 42 + + + src/app/components/master-page/master-page.component.html + 34 + + + src/app/components/master-page/master-page.component.html + 58 + + master-page.reconnecting + + + Layer 2 Networks + + src/app/components/liquid-master-page/liquid-master-page.component.html + 56 + + master-page.layer2-networks-header + + + Non-Dust Expired + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 3 + + liquid.non-dust-expired + + + Total amount of BTC held in non-dust Federation UTXOs that have expired timelocks + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 5 + + liquid.expired-utxos-non-dust + + + UTXOs + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 6 + + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 16 + + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 9 + + + src/app/components/wallet/wallet-preview.component.html + 13 + + shared.utxos + + + Total Expired + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 12 + + liquid.total-expired + + + Total amount of BTC held in Federation UTXOs that have expired timelocks + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 15 + + liquid.expired-utxos + + + Liquid Federation Wallet + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 5 + + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 19 + + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 3 + + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts + 14 + + liquid.federation-wallet + + + addresses + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 8 + + shared.addresses + + + Output + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 8 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 43 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 76 + + transaction.output + + + Related Peg-In + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 11 + + liquid.related-peg-in + + + Expires in + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 13 + + liquid.expires-in + + + Expired since + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 14 + + liquid.expired-since + + + Dust + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 15 + + liquid.dust + + + Change output + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 55 + + liquid.change-output + + + blocks + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 62 + + shared.blocks + + + Timelock-Expired UTXOs + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 12 + + liquid.timelock-expired-utxos + + + Addresses + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 15 + + + src/app/components/pool/pool.component.html + 39 + + + src/app/components/pool/pool.component.html + 63 + + + src/app/components/pool/pool.component.html + 443 + + + src/app/components/pool/pool.component.html + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 + + mining.addresses + + + Recent Peg-In / Out's + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 4 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts + 66 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 5 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 29 + + liquid.recent-pegs + + + Fund / Redemption Tx + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 15 + + liquid.fund-redemption-tx + + + BTC Address + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 16 + + liquid.bitcoin-address + + + Peg out in progress... + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 69 + + liquid.redemption-in-progress + + + 24h Peg-In Volume + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 12 + + liquid.peg-ins-volume-day + + + Peg-Ins + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 13 + + liquid.peg-ins + + + 24h Peg-Out Volume + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 18 + + liquid.peg-out-volume-day + + + Peg-Outs + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 19 + + liquid.peg-outs + + + Unpeg + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 3 + + liquid.unpeg + + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 6 + + liquid.unpeg-info + + + Unpeg Event + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 7 + + liquid.unpeg-event + + + Avg Peg Ratio + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 14 + + liquid.avg-peg-ratio + + + Emergency Keys + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 28 + + liquid.emergency-keys + + + usage + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 31 + + shared.usage + + + Assets vs Liabilities + + src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts + 163 + + + + LBTC in circulation + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 3 + + dashboard.lbtc-pegs-in-circulation + + + As of block + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 7 + + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 16 + + shared.as-of-block + + + See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. + + src/app/components/mempool-block/mempool-block.component.ts + 62 + + + + Stack of mempool blocks + + src/app/components/mempool-block/mempool-block.component.ts + 89 + + + + Mempool block + + src/app/components/mempool-block/mempool-block.component.ts + 91 + + + + Count + + src/app/components/mempool-graph/mempool-graph.component.ts + 329 + + + src/app/components/statistics/statistics.component.ts + 49 + + + + Range + + src/app/components/mempool-graph/mempool-graph.component.ts + 330 + + + + Sum + + src/app/components/mempool-graph/mempool-graph.component.ts + 332 + + + + Sign In + + src/app/components/menu/menu.component.html + 27 + + + src/app/shared/components/global-footer/global-footer.component.html + 45 + + + src/app/shared/components/global-footer/global-footer.component.html + 57 + + shared.sign-in + + + Reward stats + + src/app/components/mining-dashboard/mining-dashboard.component.html + 9 + + mining.reward-stats + + + (144 blocks) + + src/app/components/mining-dashboard/mining-dashboard.component.html + 10 + + mining.144-blocks + + + Adjustments + + src/app/components/mining-dashboard/mining-dashboard.component.html + 70 + + dashboard.adjustments + + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 30 + + + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + + + Pools luck (1 week) + + src/app/components/pool-ranking/pool-ranking.component.html + 9 + + mining.miners-luck-1w + + + Pools Luck + + src/app/components/pool-ranking/pool-ranking.component.html + 9 + + + src/app/components/pool-ranking/pool-ranking.component.html + 158 + + mining.miners-luck + + + The overall luck of all mining pools over the past week. A luck bigger than 100% means the average block time for the current epoch is less than 10 minutes. + + src/app/components/pool-ranking/pool-ranking.component.html + 11 + + mining.pools-luck-desc + + + Pools count (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 17 + + mining.miners-count-1w + + + Pools Count + + src/app/components/pool-ranking/pool-ranking.component.html + 17 + + + src/app/components/pool-ranking/pool-ranking.component.html + 164 + + mining.miners-count + + + How many unique pools found at least one block over the past week. + + src/app/components/pool-ranking/pool-ranking.component.html + 19 + + mining.pools-count-desc + + + Blocks (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 25 + + + src/app/components/pool-ranking/pool-ranking.component.html + 25 + + + src/app/components/pool-ranking/pool-ranking.component.html + 170 + + master-page.blocks + + + The number of blocks found over the past week. + + src/app/components/pool-ranking/pool-ranking.component.html + 27 + + mining.blocks-count-desc + + + Rank + + src/app/components/pool-ranking/pool-ranking.component.html + 90 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 27 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 53 + + mining.rank + + + Avg Health + + src/app/components/pool-ranking/pool-ranking.component.html + 96 + + + src/app/components/pool-ranking/pool-ranking.component.html + 96 + + + src/app/components/pool/pool.component.html + 96 + + + src/app/components/pool/pool.component.html + 479 + + + src/app/components/pool/pool.component.html + 504 + + latest-blocks.avg_health + + + Avg Block Fees + + src/app/components/pool-ranking/pool-ranking.component.html + 97 + + + src/app/components/reward-stats/reward-stats.component.html + 17 + + + src/app/components/reward-stats/reward-stats.component.html + 17 + + + src/app/components/reward-stats/reward-stats.component.html + 53 + + mining.fees-per-block + + + Empty Blocks + + src/app/components/pool-ranking/pool-ranking.component.html + 98 + + mining.empty-blocks + + + All miners + + src/app/components/pool-ranking/pool-ranking.component.html + 139 + + mining.all-miners + + + Mining Pools + + src/app/components/pool-ranking/pool-ranking.component.ts + 59 + + + + See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe. + + src/app/components/pool-ranking/pool-ranking.component.ts + 60 + + + + blocks + + src/app/components/pool-ranking/pool-ranking.component.ts + 170 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 209 + + + + Other () + + src/app/components/pool-ranking/pool-ranking.component.ts + 189 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 119 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 136 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 178 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 195 + + + + mining pool + + src/app/components/pool/pool-preview.component.html + 3 + + mining.pools + + + Tags + + src/app/components/pool/pool-preview.component.html + 18 + + + src/app/components/pool/pool.component.html + 22 + + + src/app/components/pool/pool.component.html + 30 + + + src/app/components/pool/pool.component.html + 426 + + + src/app/components/pool/pool.component.html + 434 + + mining.tags + + + See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. + + src/app/components/pool/pool-preview.component.ts + 88 + + + src/app/components/pool/pool.component.ts + 93 + + + + Show all + + src/app/components/pool/pool.component.html + 53 + + + src/app/components/pool/pool.component.html + 68 + + + src/app/components/rbf-timeline/rbf-timeline.component.html + 57 + + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 + + + src/app/components/transactions-list/transactions-list.component.html + 221 + + + src/app/components/transactions-list/transactions-list.component.html + 243 + + + src/app/components/transactions-list/transactions-list.component.html + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 + + show-all + + + Hide + + src/app/components/pool/pool.component.html + 55 + + + src/app/components/wallet/wallet.component.html + 33 + + hide + + + Hashrate (24h) + + src/app/components/pool/pool.component.html + 95 + + + src/app/components/pool/pool.component.html + 478 + + + src/app/components/pool/pool.component.html + 503 + + mining.hashrate + + + Blocks (24h) + + src/app/components/pool/pool.component.html + 120 + + + src/app/components/pool/pool.component.html + 528 + + + src/app/components/pool/pool.component.html + 553 + + 24h + + + 1w + + src/app/components/pool/pool.component.html + 121 + + + src/app/components/pool/pool.component.html + 529 + + + src/app/components/pool/pool.component.html + 554 + + 1w + + + Out-of-band Fees (1w) + + src/app/components/pool/pool.component.html + 143 + + 1w + + + 1m + + src/app/components/pool/pool.component.html + 144 + + 1m + + + Coinbase tag + + src/app/components/pool/pool.component.html + 223 + + + src/app/components/pool/pool.component.html + 306 + + + src/app/components/pool/pool.component.html + 368 + + latest-blocks.coinbasetag + + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + + + Error loading pool data. + + src/app/components/pool/pool.component.html + 589 + + pool.error.loading-pool-data + + + Not enough data yet + + src/app/components/pool/pool.component.ts + 177 + + + + Pool Dominance + + src/app/components/pool/pool.component.ts + 255 + + + src/app/components/pool/pool.component.ts + 307 + + mining.pool-dominance + + + Broadcast Transaction + + src/app/components/push-transaction/push-transaction.component.html + 2 + + + src/app/components/push-transaction/push-transaction.component.html + 8 + + + src/app/shared/components/global-footer/global-footer.component.html + 77 + + Broadcast Transaction + shared.broadcast-transaction + + + Transaction hex + + src/app/components/push-transaction/push-transaction.component.html + 6 + + + src/app/components/transaction/transaction-raw.component.html + 215 + + + src/app/components/transaction/transaction.component.html + 226 + + transaction.hex + + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + + + Broadcast Transaction + + src/app/components/push-transaction/push-transaction.component.ts + 57 + + + + Broadcast a transaction to the network using the transaction's hash. + + src/app/components/push-transaction/push-transaction.component.ts + 58 + + + + RBF Replacements + + src/app/components/rbf-list/rbf-list.component.html + 2 + + + src/app/components/rbf-list/rbf-list.component.ts + 61 + + page.rbf-replacements + + + There are no replacements in the mempool yet! + + src/app/components/rbf-list/rbf-list.component.html + 34 + + rbf.no-replacements-yet + + + See the most recent RBF replacements on the Bitcoin network, updated in real-time. + + src/app/components/rbf-list/rbf-list.component.ts + 62 + + + + Show less + + src/app/components/rbf-timeline/rbf-timeline.component.html + 61 + + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + + + src/app/components/transaction/transaction.component.html + 147 + + + src/app/components/transactions-list/transactions-list.component.html + 223 + + + src/app/components/transactions-list/transactions-list.component.html + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 + + show-less + + + remaining + + src/app/components/rbf-timeline/rbf-timeline.component.html + 86 + + + src/app/components/transactions-list/transactions-list.component.html + 514 + + x-remaining + + + Miners Reward + + src/app/components/reward-stats/reward-stats.component.html + 5 + + + src/app/components/reward-stats/reward-stats.component.html + 5 + + + src/app/components/reward-stats/reward-stats.component.html + 46 + + mining.rewards + + + Amount being paid to miners in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 6 + + mining.rewards-desc + + + Average fees per block in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 18 + + mining.fees-per-block-desc + + + BTC/block + + src/app/components/reward-stats/reward-stats.component.html + 21 + + BTC/block + shared.btc-block + + + Avg Tx Fee + + src/app/components/reward-stats/reward-stats.component.html + 30 + + + src/app/components/reward-stats/reward-stats.component.html + 30 + + + src/app/components/reward-stats/reward-stats.component.html + 60 + + mining.average-fee + + + Fee paid on average for each transaction in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 31 + + mining.average-fee + + + sats/tx + + src/app/components/reward-stats/reward-stats.component.html + 33 + + sat/vB + shared.sat-vbyte + + + Explore the full Bitcoin ecosystem + + src/app/components/search-form/search-form.component.html + 4 + + + src/app/shared/components/global-footer/global-footer.component.html + 17 + + + src/app/shared/components/global-footer/global-footer.component.html + 61 + + search-form.searchbar-placeholder + + + Search + + src/app/components/search-form/search-form.component.html + 9 + + search-form.search-title + + + Block Height + + src/app/components/search-form/search-results/search-results.component.html + 3 + + search.bitcoin-block-height + + + Transaction + + src/app/components/search-form/search-results/search-results.component.html + 21 + + search.bitcoin-transaction + + + Address + + src/app/components/search-form/search-results/search-results.component.html + 27 + + + src/app/components/search-form/search-results/search-results.component.html + 80 + + search.bitcoin-address + + + Block + + src/app/components/search-form/search-results/search-results.component.html + 33 + + search.bitcoin-block + + + Addresses + + src/app/components/search-form/search-results/search-results.component.html + 39 + + search.bitcoin-addresses + + + Mining Pools + + src/app/components/search-form/search-results/search-results.component.html + 47 + + search.mining-pools + + + Lightning Nodes + + src/app/components/search-form/search-results/search-results.component.html + 56 + + search.lightning-nodes + + + Lightning Channels + + src/app/components/search-form/search-results/search-results.component.html + 64 + + search.lightning-channels + + + Other Network Address + + src/app/components/search-form/search-results/search-results.component.html + 72 + + search.other-networks + + + Liquid Asset + + src/app/components/search-form/search-results/search-results.component.html + 86 + + search.liquid-asset + + + Go to "" + + src/app/components/search-form/search-results/search-results.component.html + 93 + + search.go-to + + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + + + Mempool by vBytes (sat/vByte) + + src/app/components/statistics/statistics.component.html + 7 + + statistics.memory-by-vBytes + + + Clock (Mempool) + + src/app/components/statistics/statistics.component.html + 17 + + + src/app/shared/components/global-footer/global-footer.component.html + 106 + + footer.clock-mempool + + + Filter + + src/app/components/statistics/statistics.component.html + 65 + + statistics.component-filter.title + + + Invert + + src/app/components/statistics/statistics.component.html + 90 + + statistics.component-invert.title + + + Transaction vBytes per second (vB/s) + + src/app/components/statistics/statistics.component.html + 110 + + statistics.transaction-vbytes-per-second + + + Cap outliers + + src/app/components/statistics/statistics.component.html + 118 + + statistics.cap-outliers + + + Graphs + + src/app/components/statistics/statistics.component.ts + 65 + + + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. + + src/app/components/statistics/statistics.component.ts + 66 + + + + Stratum Jobs + + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining + + + Test Transactions + + src/app/components/test-transactions/test-transactions.component.html + 3 + + + src/app/components/test-transactions/test-transactions.component.html + 16 + + + src/app/components/test-transactions/test-transactions.component.ts + 35 + + Test Transactions + shared.test-transactions + + + Raw hex + + src/app/components/test-transactions/test-transactions.component.html + 8 + + test.tx.raw-hex + + + Sent + + src/app/components/tracker/tracker-bar.component.html + 2 + + accelerator.sent-state + + + Soon + + src/app/components/tracker/tracker-bar.component.html + 6 + + accelerator.soon + + + This transaction has been replaced by: + + src/app/components/tracker/tracker.component.html + 48 + + + src/app/components/transaction/transaction.component.html + 5 + + RBF replacement + transaction.rbf.replacement + + + ETA + + src/app/components/tracker/tracker.component.html + 70 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 + + Transaction ETA + transaction.eta + + + Not any time soon + + src/app/components/tracker/tracker.component.html + 75 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 + + Transaction ETA mot any time soon + transaction.eta.not-any-time-soon + + + Confirmed at + + src/app/components/tracker/tracker.component.html + 89 + + transaction.confirmed-at + + + Block height + + src/app/components/tracker/tracker.component.html + 98 + + transaction.block-height + + + Your transaction has been accelerated + + src/app/components/tracker/tracker.component.html + 144 + + tracker.explain.accelerated + + + Waiting for your transaction to appear in the mempool + + src/app/components/tracker/tracker.component.html + 154 + + tracker.explain.waiting + + + Your transaction is in the mempool, but it will not be confirmed for some time. + + src/app/components/tracker/tracker.component.html + 160 + + tracker.explain.pending + + + Your transaction is near the top of the mempool, and is expected to confirm soon. + + src/app/components/tracker/tracker.component.html + 166 + + tracker.explain.soon + + + Your transaction is expected to confirm in the next block + + src/app/components/tracker/tracker.component.html + 172 + + tracker.explain.next-block + + + Your transaction is confirmed! + + src/app/components/tracker/tracker.component.html + 178 + + tracker.explain.confirmed + + + Your transaction has been replaced by a newer version! + + src/app/components/tracker/tracker.component.html + 187 + + tracker.explain.replaced + + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + + + See more details + + src/app/components/tracker/tracker.component.html + 206 + + accelerator.show-more-details + + + Transaction: + + src/app/components/tracker/tracker.component.ts + 409 + + + src/app/components/transaction/transaction-preview.component.ts + 91 + + + src/app/components/transaction/transaction.component.ts + 580 + + + + Get real-time status, addresses, fees, script info, and more for transaction with txid . + + src/app/components/tracker/tracker.component.ts + 413 + + + src/app/components/transaction/transaction-preview.component.ts + 95 + + + src/app/components/transaction/transaction.component.ts + 584 + + + + Related Transactions + + src/app/components/transaction/cpfp-info.component.html + 3 + + CPFP List + transaction.related-transactions + + + Descendant + + src/app/components/transaction/cpfp-info.component.html + 20 + + + src/app/components/transaction/cpfp-info.component.html + 32 + + Descendant + transaction.descendant + + + Ancestor + + src/app/components/transaction/cpfp-info.component.html + 44 + + Transaction Ancestor + transaction.ancestor + + + Features + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + + + Transaction not found. + + src/app/components/transaction/transaction.component.html + 350 + + transaction.error.transaction-not-found + + + Waiting for it to appear in the mempool... + + src/app/components/transaction/transaction.component.html + 351 + + transaction.error.waiting-for-it-to-appear + + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. + + src/app/components/transactions-list/transactions-list.component.html + 21 + + transaction.poison.warning + + + (Newly Generated Coins) + + src/app/components/transactions-list/transactions-list.component.html + 90 + + transactions-list.newly-generated-coins + + + Peg-in + + src/app/components/transactions-list/transactions-list.component.html + 92 + + transactions-list.peg-in + + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + + + ScriptSig (ASM) + + src/app/components/transactions-list/transactions-list.component.html + 157 + + ScriptSig (ASM) + transactions-list.scriptsig.asm + + + ScriptSig (HEX) + + src/app/components/transactions-list/transactions-list.component.html + 168 + + ScriptSig (HEX) + transactions-list.scriptsig.hex + + + Witness + + src/app/components/transactions-list/transactions-list.component.html + 173 + + transactions-list.witness + + + P2SH redeem script + + src/app/components/transactions-list/transactions-list.component.html + 232 + + transactions-list.p2sh-redeem-script + + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + + + P2TR tapscript + + src/app/components/transactions-list/transactions-list.component.html + 249 + + transactions-list.p2tr-tapscript + + + P2WSH witness script + + src/app/components/transactions-list/transactions-list.component.html + 251 + + transactions-list.p2wsh-witness-script + + + nSequence + + src/app/components/transactions-list/transactions-list.component.html + 266 + + transactions-list.nsequence + + + Previous output script + + src/app/components/transactions-list/transactions-list.component.html + 271 + + transactions-list.previous-output-script + + + Previous output type + + src/app/components/transactions-list/transactions-list.component.html + 275 + + transactions-list.previous-output-type + + + Peg-out to + + src/app/components/transactions-list/transactions-list.component.html + 326,327 + + transactions-list.peg-out-to + + + ScriptPubKey (ASM) + + src/app/components/transactions-list/transactions-list.component.html + 400 + + ScriptPubKey (ASM) + transactions-list.scriptpubkey.asm + + + ScriptPubKey (HEX) + + src/app/components/transactions-list/transactions-list.component.html + 413 + + ScriptPubKey (HEX) + transactions-list.scriptpubkey.hex + + + Show more inputs to reveal fee data + + src/app/components/transactions-list/transactions-list.component.html + 477 + + transactions-list.load-to-reveal-fee-info + + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + + + other inputs + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 12 + + transaction.other-inputs + + + other outputs + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 13 + + transaction.other-outputs + + + Input + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 42 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 86 + + transaction.input + + + 1 block earlier + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 123 + + shared.one-block-earlier + + + 1 block later + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 127 + + shared.one-block-later + + + in the same block + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 131 + + shared.in-the-same-block + + + blocks earlier + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 137 + + shared.n-blocks-earlier + + + spent + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 148 + + shared.spent + + + blocks later + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 150 + + shared.n-blocks-later + + + This transaction saved % on fees by using native SegWit + + src/app/components/tx-features/tx-features.component.html + 2 + + ngbTooltip about segwit gains + + + SegWit + + src/app/components/tx-features/tx-features.component.html + 2 + + + src/app/components/tx-features/tx-features.component.html + 4 + + + src/app/components/tx-features/tx-features.component.html + 6 + + SegWit + tx-features.tag.segwit + + + This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit + + src/app/components/tx-features/tx-features.component.html + 4 + + ngbTooltip about double segwit gains + + + This transaction could save % on fees by upgrading to native SegWit or % by upgrading to SegWit-P2SH + + src/app/components/tx-features/tx-features.component.html + 6 + + ngbTooltip about missed out gains + + + This transaction uses Taproot and thereby saved at least % on fees + + src/app/components/tx-features/tx-features.component.html + 12 + + Tooltip about fees saved with taproot + + + This transaction uses Taproot and already saved at least % on fees, but could save an additional % by fully using Taproot + + src/app/components/tx-features/tx-features.component.html + 14 + + Tooltip about fees that saved and could be saved with taproot + + + This transaction could save % on fees by using Taproot + + src/app/components/tx-features/tx-features.component.html + 16 + + Tooltip about fees that could be saved with taproot + + + This transaction does not use Taproot + + src/app/components/tx-features/tx-features.component.html + 18 + + Tooltip about using taproot + + + This transaction uses Taproot + + src/app/components/tx-features/tx-features.component.html + 21 + + Tooltip about taproot + + + This transaction supports Replace-By-Fee (RBF) allowing fee bumping + + src/app/components/tx-features/tx-features.component.html + 28 + + RBF tooltip + + + This transaction does NOT support Replace-By-Fee (RBF) and cannot be fee bumped using this method + + src/app/components/tx-features/tx-features.component.html + 29 + + RBF disabled tooltip + + + Optimal + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 1 + + TX Fee Rating is Optimal + tx-fee-rating.optimal + + + Only ~ sat/vB was needed to get into this block + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 2 + + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 3 + + tx-fee-rating.warning-tooltip + + + Overpaid x + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 2 + + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 3 + + TX Fee Rating is Warning + tx-fee-rating.overpaid.warning + + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + + + Liquid Federation Holdings + + src/app/dashboard/dashboard.component.html + 165 + + + src/app/dashboard/dashboard.component.html + 305 + + liquid.federation-holdings + + + Federation Timelock-Expired UTXOs + + src/app/dashboard/dashboard.component.html + 174 + + + src/app/dashboard/dashboard.component.html + 314 + + liquid.federation-expired-utxos + + + LBTC Supply Against BTC Holdings + + src/app/dashboard/dashboard.component.html + 184 + + + src/app/dashboard/dashboard.component.html + 324 + + dashboard.lbtc-supply-against-btc-holdings + + + Indexing in progress + + src/app/dashboard/dashboard.component.html + 364 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 102 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.html + 52 + + lightning.indexing-in-progress + + + mempool.space merely provides data about the Bitcoin network. It cannot help you with retrieving funds, wallet issues, etc.For any such requests, you need to get in touch with the entity that helped make the transaction (wallet software, exchange company, etc). + + src/app/docs/api-docs/api-docs.component.html + 15,16 + + faq.big-disclaimer + + + REST API service + + src/app/docs/api-docs/api-docs.component.html + 50 + + api-docs.title + + + Endpoint + + src/app/docs/api-docs/api-docs.component.html + 60 + + Api docs endpoint + + + Description + + src/app/docs/api-docs/api-docs.component.html + 79 + + + src/app/docs/api-docs/api-docs.component.html + 137 + + + src/app/lightning/group/group.component.html + 17 + + + + Code Example + + src/app/docs/code-template/code-template.component.html + 6 + + + src/app/docs/code-template/code-template.component.html + 13 + + + src/app/docs/code-template/code-template.component.html + 29 + + + src/app/docs/code-template/code-template.component.html + 36 + + API Docs code example + + + Install Package + + src/app/docs/code-template/code-template.component.html + 23 + + API Docs install lib + + + Response + + src/app/docs/code-template/code-template.component.html + 43 + + API Docs API response + + + Documentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + + + FAQ + + src/app/docs/docs/docs.component.ts + 46 + + + + Get answers to common questions like: What is a mempool? Why isn't my transaction confirming? How can I run my own instance of The Mempool Open Source Project? And more. + + src/app/docs/docs/docs.component.ts + 47 + + + + REST API + + src/app/docs/docs/docs.component.ts + 51 + + + + Documentation for the liquid.network REST API service: get info on addresses, transactions, assets, blocks, and more. + + src/app/docs/docs/docs.component.ts + 53 + + + + Documentation for the mempool.space REST API service: get info on addresses, transactions, blocks, fees, mining, the Lightning network, and more. + + src/app/docs/docs/docs.component.ts + 55 + + + + WebSocket API + + src/app/docs/docs/docs.component.ts + 59 + + + + Documentation for the liquid.network WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + + src/app/docs/docs/docs.component.ts + 61 + + + + Documentation for the mempool.space WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + + src/app/docs/docs/docs.component.ts + 63 + + + + Electrum RPC + + src/app/docs/docs/docs.component.ts + 67 + + + + Documentation for our Electrum RPC interface: get instant, convenient, and reliable access to an Esplora instance. + + src/app/docs/docs/docs.component.ts + 68 + + + + Base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 29 + + + src/app/lightning/channel/channel-preview.component.html + 41 + + lightning.base-fee + + + mSats + + src/app/lightning/channel/channel-box/channel-box.component.html + 35 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 47 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 93 + + + src/app/lightning/node/node.component.html + 226 + + shared.m-sats + + + This channel supports zero base fee routing + + src/app/lightning/channel/channel-box/channel-box.component.html + 44 + + lightning.zero-base-fee-tooltip + + + Zero base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 45 + + lightning.zero-base-fee + + + This channel does not support zero base fee routing + + src/app/lightning/channel/channel-box/channel-box.component.html + 50 + + lightning.non-zero-base-fee-tooltip + + + Non-zero base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 51 + + lightning.non-zero-base-fee + + + Min HTLC + + src/app/lightning/channel/channel-box/channel-box.component.html + 57 + + lightning.min-htlc + + + Max HTLC + + src/app/lightning/channel/channel-box/channel-box.component.html + 63 + + lightning.max-htlc + + + Timelock delta + + src/app/lightning/channel/channel-box/channel-box.component.html + 69 + + lightning.timelock-delta + + + channels + + src/app/lightning/channel/channel-box/channel-box.component.html + 79 + + + src/app/lightning/channels-list/channels-list.component.html + 123 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 313 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 213 + + lightning.x-channels + + + Starting balance + + src/app/lightning/channel/channel-close-box/channel-close-box.component.html + 3 + + Channel starting balance + lightning.starting-balance + + + Closing balance + + src/app/lightning/channel/channel-close-box/channel-close-box.component.html + 26 + + Channel closing balance + lightning.closing-balance + + + lightning channel + + src/app/lightning/channel/channel-preview.component.html + 3 + + lightning.channel + + + Inactive + + src/app/lightning/channel/channel-preview.component.html + 10 + + + src/app/lightning/channel/channel.component.html + 13 + + + src/app/lightning/channels-list/channels-list.component.html + 68 + + status.inactive + + + Active + + src/app/lightning/channel/channel-preview.component.html + 11 + + + src/app/lightning/channel/channel.component.html + 14 + + + src/app/lightning/channels-list/channels-list.component.html + 69 + + status.active + + + Closed + + src/app/lightning/channel/channel-preview.component.html + 12 + + + src/app/lightning/channel/channel.component.html + 15 + + + src/app/lightning/channels-list/channels-list.component.html + 8 + + + src/app/lightning/channels-list/channels-list.component.html + 71 + + + src/app/lightning/justice-list/justice-list.component.html + 11 + + status.closed + + + Created + + src/app/lightning/channel/channel-preview.component.html + 23 + + + src/app/lightning/channel/channel.component.html + 36 + + lightning.created + + + Capacity + + src/app/lightning/channel/channel-preview.component.html + 27 + + + src/app/lightning/channel/channel.component.html + 55 + + + src/app/lightning/channels-list/channels-list.component.html + 43 + + + src/app/lightning/justice-list/justice-list.component.html + 12 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 159 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 229 + + + src/app/lightning/node-statistics/node-statistics.component.html + 4 + + + src/app/lightning/node-statistics/node-statistics.component.html + 46 + + + src/app/lightning/nodes-list/nodes-list.component.html + 6 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 31 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 63 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 57 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 60 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 13 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 213 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 293 + + lightning.capacity + + + ppm + + src/app/lightning/channel/channel-preview.component.html + 34 + + + src/app/lightning/channel/channel-preview.component.html + 36 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 32 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 78 + + lightning.ppm + + + Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. + + src/app/lightning/channel/channel-preview.component.ts + 39 + + + src/app/lightning/channel/channel.component.ts + 38 + + + + Lightning channel + + src/app/lightning/channel/channel.component.html + 4 + + + src/app/lightning/channel/channel.component.html + 116 + + lightning.channel + + + Last update + + src/app/lightning/channel/channel.component.html + 40 + + + src/app/lightning/node/node.component.html + 80 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 62 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 59 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 14 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 16 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 16 + + lightning.last-update + + + Closing date + + src/app/lightning/channel/channel.component.html + 44 + + + src/app/lightning/channels-list/channels-list.component.html + 42 + + lightning.closing_date + + + Closed by + + src/app/lightning/channel/channel.component.html + 59 + + lightning.closed_by + + + Opening transaction + + src/app/lightning/channel/channel.component.html + 91 + + + src/app/lightning/justice-list/justice-list.component.html + 62 + + lightning.opening-transaction + + + Closing transaction + + src/app/lightning/channel/channel.component.html + 100 + + + src/app/lightning/justice-list/justice-list.component.html + 69 + + lightning.closing-transaction + + + Channel: + + src/app/lightning/channel/channel.component.ts + 37 + + + + Mutually closed + + src/app/lightning/channel/closing-type/closing-type.component.ts + 20 + + + + Force closed + + src/app/lightning/channel/closing-type/closing-type.component.ts + 24 + + + + Force closed with penalty + + src/app/lightning/channel/closing-type/closing-type.component.ts + 28 + + + + Open + + src/app/lightning/channels-list/channels-list.component.html + 5 + + open + + + No channels to display + + src/app/lightning/channels-list/channels-list.component.html + 29 + + lightning.empty-channels-list + + + Alias + + src/app/lightning/channels-list/channels-list.component.html + 38 + + + src/app/lightning/group/group.component.html + 72 + + + src/app/lightning/nodes-list/nodes-list.component.html + 5 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 60 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 57 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 10 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 11 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 11 + + lightning.alias + + + Channel ID + + src/app/lightning/channels-list/channels-list.component.html + 44 + + + src/app/lightning/justice-list/justice-list.component.html + 15 + + channels.id + + + avg + + src/app/lightning/channels-statistics/channels-statistics.component.html + 3 + + statistics.average-small + + + med + + src/app/lightning/channels-statistics/channels-statistics.component.html + 6 + + statistics.median-small + + + Avg Capacity + + src/app/lightning/channels-statistics/channels-statistics.component.html + 13 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 107 + + ln.average-capacity + + + Avg Fee Rate + + src/app/lightning/channels-statistics/channels-statistics.component.html + 26 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 114 + + ln.average-feerate + + + The average fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 28 + + ln.average-feerate-desc + + + Avg Base Fee + + src/app/lightning/channels-statistics/channels-statistics.component.html + 41 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 121 + + ln.average-basefee + + + The average base fee charged by routing nodes, ignoring base fees > 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 43 + + ln.average-basefee-desc + + + Med Capacity + + src/app/lightning/channels-statistics/channels-statistics.component.html + 59 + + ln.median-capacity + + + Med Fee Rate + + src/app/lightning/channels-statistics/channels-statistics.component.html + 72 + + ln.average-feerate + + + The median fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 74 + + ln.median-feerate-desc + + + Med Base Fee + + src/app/lightning/channels-statistics/channels-statistics.component.html + 87 + + ln.median-basefee + + + The median base fee charged by routing nodes, ignoring base fees > 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 89 + + ln.median-basefee-desc + + + Lightning node group + + src/app/lightning/group/group-preview.component.html + 3 + + + src/app/lightning/group/group.component.html + 2 + + lightning.node-group + + + Nodes + + src/app/lightning/group/group-preview.component.html + 25 + + + src/app/lightning/group/group.component.html + 23 + + + src/app/lightning/justice-list/justice-list.component.html + 14 + + + src/app/lightning/node-statistics/node-statistics.component.html + 16 + + + src/app/lightning/node-statistics/node-statistics.component.html + 53 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 30 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 13 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 56 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 22 + + lightning.node-count + + + Liquidity + + src/app/lightning/group/group-preview.component.html + 29 + + + src/app/lightning/group/group.component.html + 27 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 17 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 26 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 18 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 12 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 12 + + lightning.liquidity + + + Channels + + src/app/lightning/group/group-preview.component.html + 40 + + + src/app/lightning/group/group.component.html + 40 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 151 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 206 + + + src/app/lightning/node-statistics/node-statistics.component.html + 28 + + + src/app/lightning/node-statistics/node-statistics.component.html + 60 + + + src/app/lightning/nodes-list/nodes-list.component.html + 7 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 30 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 64 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 35 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 31 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 61 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 13 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 14 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 12 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 205 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 270 + + lightning.channels + + + Average size + + src/app/lightning/group/group-preview.component.html + 44 + + + src/app/lightning/node/node-preview.component.html + 32 + + lightning.active-channels-avg + + + Connect + + src/app/lightning/group/group.component.html + 73 + + Connect + lightning.connect-to-node + + + Location + + src/app/lightning/group/group.component.html + 74 + + + src/app/lightning/node/node-preview.component.html + 38 + + + src/app/lightning/node/node-preview.component.html + 50 + + + src/app/lightning/node/node.component.html + 51 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 65 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 62 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 15 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 17 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 17 + + lightning.location + + + Penalties + + src/app/lightning/justice-list/justice-list.component.html + 4 + + lightning.liquidity-ranking + + + Network Statistics + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 10 + + lightning.network-statistics-title + + + Channels Statistics + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 24 + + lightning.channel-statistics-title + + + Lightning Network History + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 52 + + lightning.network-history + + + Liquidity Ranking + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 66 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 4 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts + 34 + + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 8 + + lightning.liquidity-ranking + + + Connectivity Ranking + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 80 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 4 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts + 38 + + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 22 + + lightning.connectivity-ranking + + + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 34 + + + + Fee distribution + + src/app/lightning/node-fee-chart/node-fee-chart.component.html + 2 + + lightning.node-fee-distribution + + + Outgoing Fees + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 179 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 217 + + + + Incoming Fees + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 187 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 231 + + + + Percentage change past week + + src/app/lightning/node-statistics/node-statistics.component.html + 5 + + + src/app/lightning/node-statistics/node-statistics.component.html + 17 + + + src/app/lightning/node-statistics/node-statistics.component.html + 29 + + mining.percentage-change-last-week + + + Lightning node + + src/app/lightning/node/node-preview.component.html + 3 + + + src/app/lightning/node/node.component.html + 4 + + + src/app/lightning/node/node.component.html + 306 + + lightning.node + + + Active capacity + + src/app/lightning/node/node-preview.component.html + 20 + + + src/app/lightning/node/node.component.html + 31 + + lightning.active-capacity + + + Active channels + + src/app/lightning/node/node-preview.component.html + 26 + + + src/app/lightning/node/node.component.html + 38 + + lightning.active-channels + + + Country + + src/app/lightning/node/node-preview.component.html + 44 + + country + + + Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. + + src/app/lightning/node/node-preview.component.ts + 54 + + + src/app/lightning/node/node.component.ts + 64 + + + + Average channel size + + src/app/lightning/node/node.component.html + 44 + + lightning.active-channels-avg + + + Avg channel distance + + src/app/lightning/node/node.component.html + 60 + + lightning.avg-distance + + + Color + + src/app/lightning/node/node.component.html + 86 + + lightning.color + + + ISP + + src/app/lightning/node/node.component.html + 92 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 54 + + isp + + + Exclusively on Tor + + src/app/lightning/node/node.component.html + 100 + + tor + + + Decoded + + src/app/lightning/node/node.component.html + 134 + + Decoded + lightning.decoded + + + Liquidity ad + + src/app/lightning/node/node.component.html + 184 + + node.liquidity-ad + + + Lease fee rate + + src/app/lightning/node/node.component.html + 190 + + Liquidity ad lease fee rate + liquidity-ad.lease-fee-rate + + + Lease base fee + + src/app/lightning/node/node.component.html + 198 + + liquidity-ad.lease-base-fee + + + Funding weight + + src/app/lightning/node/node.component.html + 204 + + liquidity-ad.funding-weight + + + Channel fee rate + + src/app/lightning/node/node.component.html + 214 + + Liquidity ad channel fee rate + liquidity-ad.channel-fee-rate + + + Channel base fee + + src/app/lightning/node/node.component.html + 222 + + liquidity-ad.channel-base-fee + + + Compact lease + + src/app/lightning/node/node.component.html + 234 + + liquidity-ad.compact-lease + + + TLV extension records + + src/app/lightning/node/node.component.html + 245 + + node.tlv.records + + + Open channels + + src/app/lightning/node/node.component.html + 286 + + lightning.open-channels + + + Closed channels + + src/app/lightning/node/node.component.html + 290 + + lightning.open-channels + + + Node: + + src/app/lightning/node/node.component.ts + 63 + + + + (Tor nodes excluded) + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.html + 22 + + + src/app/lightning/nodes-map/nodes-map.component.html + 7 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 10 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 37 + + lightning.tor-nodes-excluded + + + Lightning Nodes Channels World Map + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 73 + + + + See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 74 + + + + No geolocation data available + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 245 + + + + Active channels map + + src/app/lightning/nodes-channels/node-channels.component.html + 3 + + lightning.active-channels-map + + + See the locations of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + + src/app/lightning/nodes-map/nodes-map.component.ts + 52 + + + + See the number of Lightning network nodes visualized over time by network: clearnet only (IPv4, IPv6), darknet (Tor, I2p, cjdns), and both. + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 74 + + + + Indexing in progress + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 133 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 123 + + + + Clearnet and Darknet + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 176 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 315 + + + + Clearnet Only (IPv4, IPv6) + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 197 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 307 + + + + Darknet Only (Tor, I2P, cjdns) + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 218 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 299 + + + + Share + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 29 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 55 + + lightning.share + + + See a geographical breakdown of the Lightning network: how many Lightning nodes are hosted in countries around the world, aggregate BTC capacity for each country, and more. + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 47 + + + + nodes + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 104 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 137 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 163 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 196 + + + + BTC capacity + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 105 + + + + Lightning nodes in + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 3,4 + + lightning.nodes-in-country + + + ISP Count + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 34 + + lightning.isp-count + + + Top ISP + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 38 + + lightning.top-isp + + + Lightning nodes in + + src/app/lightning/nodes-per-country/nodes-per-country.component.ts + 43 + + + + Explore all the Lightning nodes hosted in and see an overview of each node's capacity, number of open channels, and more. + + src/app/lightning/nodes-per-country/nodes-per-country.component.ts + 44 + + + + Clearnet Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 6 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 81 + + lightning.clearnet-capacity + + + How much liquidity is running on nodes advertising at least one clearnet IP address + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 8 + + lightning.clearnet-capacity-desc + + + Unknown Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 13 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 87 + + lightning.unknown-capacity + + + How much liquidity is running on nodes which ISP was not identifiable + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 15 + + lightning.unknown-capacity-desc + + + Tor Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 20 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 93 + + lightning.tor-capacity + + + How much liquidity is running on nodes advertising only Tor addresses + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 22 + + lightning.tor-capacity-desc + + + Top 100 ISPs hosting LN nodes + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 31 + + lightning.top-100-isp-ln + + + Browse the top 100 ISPs hosting Lightning nodes along with stats like total number of nodes per ISP, aggregate BTC capacity per ISP, and more + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 54 + + + + BTC + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 164 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 197 + + + + Lightning ISP + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 3 + + lightning.node-isp + + + Top country + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 39 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 35 + + lightning.top-country + + + Top node + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 45 + + lightning.top-node + + + Lightning nodes on ISP: [AS] + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts + 46 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts + 46 + + + + Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts + 47 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts + 47 + + + + Lightning nodes on ISP: + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 2,4 + + lightning.nodes-for-isp + + + ASN + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 10 + + lightning.asn + + + Active nodes + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 14 + + lightning.active-node-count + + + Top 100 oldest lightning nodes + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 3 + + lightning.top-100-oldest-nodes + + + Oldest lightning nodes + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts + 27 + + + + See the oldest nodes on the Lightning network along with their capacity, number of channels, location, etc. + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts + 28 + + + + See Lightning nodes with the most BTC liquidity deployed along with high-level stats like number of open channels, location, node age, and more. + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts + 35 + + + + See Lightning nodes with the most channels open along with high-level stats like total node capacity, node age, and more. + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts + 39 + + + + Oldest nodes + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 36 + + lightning.top-channels-age + + + Top lightning nodes + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts + 22 + + + + See the top Lightning network nodes ranked by liquidity, connectivity, and age. + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts + 23 + + + + See the capacity of the Lightning network visualized over time in terms of the number of open channels and total bitcoin capacity. + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 71 + + + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + + + fee + + src/app/shared/components/address-type/address-type.component.html + 3 + + address.fee + + + empty + + src/app/shared/components/address-type/address-type.component.html + 6 + + address.empty + + + provably unspendable + + src/app/shared/components/address-type/address-type.component.html + 18 + + address.provably-unspendable + + + bare multisig + + src/app/shared/components/address-type/address-type.component.html + 21 + + address.bare-multisig + + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + + + confirmation + + src/app/shared/components/confirmations/confirmations.component.html + 4 + + Transaction singular confirmation count + shared.confirmation-count.singular + + + confirmations + + src/app/shared/components/confirmations/confirmations.component.html + 5 + + Transaction plural confirmation count + shared.confirmation-count.plural + + + Replaced + + src/app/shared/components/confirmations/confirmations.component.html + 12 + + Transaction replaced state + transaction.replaced + + + Unconfirmed + + src/app/shared/components/confirmations/confirmations.component.html + 18 + + Transaction unconfirmed state + transaction.unconfirmed + + + sat/WU + + src/app/shared/components/fee-rate/fee-rate.component.html + 4 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 8 + + sat/WU + shared.sat-weight-units + + + My Account + + src/app/shared/components/global-footer/global-footer.component.html + 44 + + + src/app/shared/components/global-footer/global-footer.component.html + 56 + + shared.my-account + + + Explore + + src/app/shared/components/global-footer/global-footer.component.html + 73 + + footer.explore + + + Test Transaction + + src/app/shared/components/global-footer/global-footer.component.html + 78 + + Test Transaction + shared.test-transaction + + + Connect to our Nodes + + src/app/shared/components/global-footer/global-footer.component.html + 80 + + footer.connect-to-our-nodes + + + API Documentation + + src/app/shared/components/global-footer/global-footer.component.html + 81 + + footer.api-documentation + + + Learn + + src/app/shared/components/global-footer/global-footer.component.html + 84 + + footer.learn + + + What is a mempool? + + src/app/shared/components/global-footer/global-footer.component.html + 85 + + faq.what-is-a-mempool + + + What is a block explorer? + + src/app/shared/components/global-footer/global-footer.component.html + 86 + + faq.what-is-a-block-exlorer + + + What is a mempool explorer? + + src/app/shared/components/global-footer/global-footer.component.html + 87 + + faq.what-is-a-mempool-exlorer + + + Why isn't my transaction confirming? + + src/app/shared/components/global-footer/global-footer.component.html + 88 + + faq.why-isnt-my-transaction-confirming + + + More FAQs » + + src/app/shared/components/global-footer/global-footer.component.html + 90 + + faq.more-faq + + + Research + + src/app/shared/components/global-footer/global-footer.component.html + 91 + + mempool-research + + + Networks + + src/app/shared/components/global-footer/global-footer.component.html + 95 + + footer.networks + + + Mainnet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 96 + + footer.mainnet-explorer + + + Testnet3 Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 97 + + footer.testnet3-explorer + + + Testnet4 Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 98 + + footer.testnet4-explorer + + + Signet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 99 + + footer.signet-explorer + + + Liquid Testnet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 100 + + footer.liquid-testnet-explorer + + + Liquid Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 101 + + footer.liquid-explorer + + + Tools + + src/app/shared/components/global-footer/global-footer.component.html + 105 + + footer.tools + + + Clock (Mined) + + src/app/shared/components/global-footer/global-footer.component.html + 107 + + footer.clock-mined + + + Legal + + src/app/shared/components/global-footer/global-footer.component.html + 112 + + footer.legal + + + Terms of Service + + src/app/shared/components/global-footer/global-footer.component.html + 113 + + Terms of Service + shared.terms-of-service + + + Privacy Policy + + src/app/shared/components/global-footer/global-footer.component.html + 114 + + Privacy Policy + shared.privacy-policy + + + Trademark Policy + + src/app/shared/components/global-footer/global-footer.component.html + 115 + + Trademark Policy + shared.trademark-policy + + + Third-party Licenses + + src/app/shared/components/global-footer/global-footer.component.html + 116 + + Third-party Licenses + shared.trademark-policy + + + Your balance is too low.Please top up your account. + + src/app/shared/components/mempool-error/mempool-error.component.html + 9 + + accelerator.low-balance + + + This is a test network. Coins have no value. + + src/app/shared/components/testnet-alert/testnet-alert.component.html + 4 + + warning-testnet + + + Testnet3 is deprecated, and will soon be replaced by Testnet4 + + src/app/shared/components/testnet-alert/testnet-alert.component.html + 6 + + testnet3-deprecated + + + Batch payment + + src/app/shared/filters.utils.ts + 110 + + + + Address Types + + src/app/shared/filters.utils.ts + 121 + + + + Behavior + + src/app/shared/filters.utils.ts + 122 + + + + Heuristics + + src/app/shared/filters.utils.ts + 124 + + + + Sighash Flags + + src/app/shared/filters.utils.ts + 125 + + + + year + + src/app/shared/i18n/dates.ts + 3 + + + + years + + src/app/shared/i18n/dates.ts + 4 + + + + month + + src/app/shared/i18n/dates.ts + 5 + + + + months + + src/app/shared/i18n/dates.ts + 6 + + + + week + + src/app/shared/i18n/dates.ts + 7 + + + + weeks + + src/app/shared/i18n/dates.ts + 8 + + + + day + + src/app/shared/i18n/dates.ts + 9 + + + + days + + src/app/shared/i18n/dates.ts + 10 + + + + hour + + src/app/shared/i18n/dates.ts + 11 + + + + hours + + src/app/shared/i18n/dates.ts + 12 + + + + minute + + src/app/shared/i18n/dates.ts + 13 + + + + minutes + + src/app/shared/i18n/dates.ts + 14 + + + + second + + src/app/shared/i18n/dates.ts + 15 + + + + seconds + + src/app/shared/i18n/dates.ts + 16 + + + + Transaction fee + + src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts + 11 + + + + Multisig of + + src/app/shared/script.utils.ts + 172 + + + + + \ No newline at end of file diff --git a/frontend/src/locale/messages.ca.xlf b/frontend/src/locale/messages.ca.xlf index 9d4926761..7cbe12960 100644 --- a/frontend/src/locale/messages.ca.xlf +++ b/frontend/src/locale/messages.ca.xlf @@ -294,12 +294,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Empreses patrocinadores 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -307,7 +327,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -315,7 +335,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -323,7 +343,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -331,7 +351,7 @@ Community Integrations src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -339,7 +359,7 @@ Community Alliances src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -347,7 +367,7 @@ Project Translators src/app/components/about/about.component.html - 367 + 395 about.translators @@ -356,7 +376,7 @@ Col·laboradors del projecte src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -364,7 +384,7 @@ Project Members src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -373,7 +393,7 @@ Mantenidors del projecte src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -384,14 +404,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -404,7 +416,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -412,7 +424,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -420,11 +432,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -432,7 +444,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -440,7 +452,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -449,7 +461,7 @@ Mida virtual src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -460,12 +472,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -474,7 +490,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -482,7 +498,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -490,55 +506,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -548,6 +596,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -606,7 +674,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -614,7 +682,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -622,7 +690,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -630,7 +698,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -638,7 +706,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -647,11 +715,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -668,7 +736,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -676,7 +744,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -684,15 +752,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -700,7 +768,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -708,7 +776,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -716,7 +784,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -724,7 +792,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -732,7 +800,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -740,7 +808,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -748,15 +816,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -764,7 +832,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -772,7 +840,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -780,11 +848,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -792,7 +860,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -800,7 +868,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -808,19 +876,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -828,7 +896,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -836,19 +904,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -857,7 +925,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -865,15 +933,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -881,7 +949,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -889,7 +957,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -897,7 +965,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -905,7 +973,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -913,7 +981,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -921,7 +989,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -929,7 +997,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -937,7 +1005,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -945,7 +1013,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -953,23 +1021,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -977,7 +1077,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -985,7 +1085,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -993,15 +1093,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1010,60 +1106,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block @@ -1082,6 +1128,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1139,7 +1189,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1162,12 +1212,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1204,27 +1254,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1237,11 +1287,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1257,11 +1307,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1301,12 +1351,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1343,12 +1393,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1376,8 +1426,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1395,6 +1445,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1403,7 +1465,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1415,14 +1477,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1441,7 +1503,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1510,6 +1572,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1601,12 +1667,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1671,11 +1741,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1691,7 +1761,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1711,7 +1781,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1719,7 +1789,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1727,7 +1797,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1783,12 +1853,28 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1821,10 +1907,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1847,7 +1929,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1883,7 +1965,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1891,15 +1973,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -1989,7 +2075,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2009,7 +2095,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2022,7 +2108,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2044,19 +2134,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2066,6 +2156,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2086,7 +2180,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2110,7 +2204,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2126,57 +2220,77 @@ Address: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2184,7 +2298,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2193,11 +2307,11 @@ S'ha produït un error en carregar les dades de l'adreça. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2205,7 +2319,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2213,7 +2327,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2221,7 +2339,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2229,7 +2351,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2238,18 +2360,27 @@ Tipus src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Actiu @@ -2442,10 +2573,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2463,11 +2590,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2483,11 +2610,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2495,7 +2622,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2521,7 +2648,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2705,7 +2832,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2717,7 +2844,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2765,35 +2892,11 @@ Mempool Goggles™ tooltip - - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2805,7 +2908,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2813,7 +2916,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2821,7 +2924,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2833,7 +2936,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2895,22 +2998,22 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 not available src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2918,7 +3021,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -2967,8 +3070,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -2985,12 +3088,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3006,8 +3113,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3041,7 +3148,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3076,8 +3183,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3089,21 +3204,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3171,7 +3303,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3191,15 +3323,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3227,19 +3363,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3261,11 +3401,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3276,11 +3416,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3291,11 +3431,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3323,23 +3463,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3377,15 +3521,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3406,8 +3550,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3419,7 +3563,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3439,7 +3583,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3504,6 +3648,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3514,11 +3662,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3526,7 +3678,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3554,11 +3706,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3620,7 +3772,11 @@ Expected src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3628,7 +3784,7 @@ Actual src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3636,7 +3792,7 @@ Expected Block src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3644,7 +3800,7 @@ Actual Block src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3653,11 +3809,15 @@ Versió src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3665,7 +3825,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3695,7 +3855,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3703,7 +3863,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3712,7 +3872,7 @@ Dificultat src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3728,11 +3888,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3740,7 +3900,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3748,7 +3908,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3756,11 +3916,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3770,23 +3930,31 @@ Detalls src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3815,7 +3983,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3823,7 +3991,7 @@ Why is this block empty? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3831,7 +3999,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3840,24 +4012,20 @@ Blocs src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3865,7 +4033,7 @@ Alçada src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3877,11 +4045,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3893,11 +4065,11 @@ Reward src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3905,19 +4077,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3925,15 +4101,15 @@ Fees src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -3942,11 +4118,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3958,11 +4134,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -3978,14 +4154,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -3996,7 +4172,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4005,7 +4181,7 @@ Copiat! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4228,7 +4404,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4250,6 +4426,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4258,13 +4442,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4272,7 +4460,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4280,14 +4468,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4295,14 +4483,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4310,7 +4498,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4591,7 +4779,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4599,7 +4787,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4752,7 +4940,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4860,23 +5048,27 @@ lightning.nodes-channels-world-map - - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4888,11 +5080,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -4900,18 +5092,18 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -4951,11 +5143,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -4968,11 +5160,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -4985,52 +5177,6 @@ master-page.layer2-networks-header - - Dashboard - Panell - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Gràfiques - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5061,6 +5207,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5167,7 +5317,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5196,11 +5346,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5244,7 +5402,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5288,8 +5446,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5335,8 +5493,8 @@ 163 - - L-BTC in circulation + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5355,46 +5513,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5445,15 +5563,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5481,6 +5599,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5488,6 +5617,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) @@ -5504,7 +5685,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5532,7 +5713,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5556,7 +5737,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5600,11 +5781,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5640,7 +5821,7 @@ All miners src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5660,17 +5841,17 @@ blocks - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5681,15 +5862,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5732,11 +5917,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5744,11 +5929,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5766,20 +5951,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5789,6 +5998,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5799,11 +6012,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5815,11 +6028,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5831,11 +6044,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5859,19 +6072,47 @@ Coinbase tag src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -5879,18 +6120,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -5906,7 +6147,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -5917,24 +6158,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -5970,17 +6284,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -5992,7 +6330,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6078,11 +6416,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6187,6 +6525,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) @@ -6203,28 +6609,15 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Mode TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6233,7 +6626,7 @@ Invertir src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6241,7 +6634,7 @@ Transaction vBytes per second (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6249,10 +6642,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Gràfiques + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6260,22 +6661,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6288,360 +6706,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - Ara mateix - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6676,11 +6744,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6689,11 +6757,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6702,7 +6770,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6710,7 +6778,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6718,7 +6786,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6726,7 +6794,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6734,7 +6802,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6742,7 +6810,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6750,7 +6818,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6758,7 +6826,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6766,15 +6834,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6786,11 +6866,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6801,43 +6881,31 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -6845,17 +6913,381 @@ Ancestor - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Característiques + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Entrades & Sortides + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -6863,7 +7295,7 @@ RBF Timeline src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -6872,101 +7304,16 @@ Acceleration Timeline src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Entrades & Sortides - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -6975,117 +7322,24 @@ Esperant a que apareixi a la memòria... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Característiques - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Noves monedes generades) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7093,16 +7347,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7112,7 +7374,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7121,7 +7383,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7129,15 +7391,23 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7145,7 +7415,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7154,7 +7424,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7162,7 +7432,7 @@ Previous output script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7170,7 +7440,7 @@ Previous output type src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7178,7 +7448,7 @@ Peg-out to src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7187,7 +7457,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7197,7 +7467,7 @@ ScriptPubKey (HEX)  src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7206,10 +7476,42 @@ Show more inputs to reveal fee data src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs @@ -7419,6 +7721,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7443,8 +7803,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7493,10 +7853,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7508,21 +7864,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Codi de exemple @@ -7562,6 +7910,14 @@ API Docs API response + + Documentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -7926,7 +8282,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8510,6 +8866,17 @@ lightning.connectivity-ranking + + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8615,7 +8982,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9072,7 +9439,7 @@ Lightning nodes on ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9083,7 +9450,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9179,6 +9546,332 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + Ara mateix + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9211,6 +9904,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9265,11 +9966,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9277,7 +9978,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9285,7 +9986,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9294,7 +9995,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9302,7 +10003,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9310,7 +10011,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9318,7 +10019,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9326,7 +10027,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9334,7 +10035,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9342,7 +10043,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9350,7 +10051,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9358,7 +10059,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9366,7 +10067,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9374,7 +10075,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9382,7 +10083,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9390,7 +10091,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9398,7 +10099,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9406,7 +10107,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9414,7 +10115,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9422,7 +10123,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9430,7 +10131,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9438,7 +10139,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9447,7 +10148,7 @@ Condicions del servei src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9456,7 +10157,7 @@ Privacy Policy src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9465,7 +10166,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9474,13 +10175,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9503,47 +10204,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9656,7 +10349,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.cs.xlf b/frontend/src/locale/messages.cs.xlf index 7fb5be682..c31ab5dbd 100644 --- a/frontend/src/locale/messages.cs.xlf +++ b/frontend/src/locale/messages.cs.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Firemní sponzoři 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Whale Sponzoři src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad Sponzoři src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG Sponzoři ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Komunitní integrace src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Komunitní aliance src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Překladatelé projektu src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Přispěvatelé projektu src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Členové projektu src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Správci projektu src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Omlouváme se, něco se pokazilo! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Tuto transakci se nám nepodařilo urychlit. Zkuste to prosím později. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Zavřít src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Vaše transakce src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus nepotvrzený předek(ové) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuální velikost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Velikost této transakce ve vbytech (včetně nepotvrzených předků) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Poplatky v pásmu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Poplatky již zaplacené touto transakcí (včetně nepotvrzených předků) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Jak moc rychleji? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Tím se očekávaná doba čekání na první potvrzení zkrátí na src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Souhrn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Tržní sazba dalšího bloku src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Je vyžadován odhadovaný příplatek src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Cílová sazba src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Vyžaduje se příplatek src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Poplatky za Mempool Akcelerátor™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Poplatek za službu akcelerátoru src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Příplatek za velikost transakce src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Odhadovaná cena akcelerace src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maximální cena akcelerace src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Náklady na zrychlení src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Dostupné zůstatky src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Vrátit se src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Urychlit vaši bitcoinovou transakci? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Počkejte src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Očekávané potvrzení src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Potvrzení se v nejbližší době neočekává src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Za příplatek src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Zkrácení očekávané doby potvrzení na src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Platba mempool.space za zrychlení txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Z vašeho účtu bude odepsáno maximálně src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Zaplatit src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Fakturu se nepodařilo načíst src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Načítání faktury... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - NEBO + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Potvrďte svou platbu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Celkové dodatečné náklady src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ s src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Načítání způsobu platby... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Potvrzení vaší platby src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Zpracováváme vaši platbu... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Urychlení transakce src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Potvrzení vašeho zrychlení u našich partnerů v těžebních poolech... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...omlouváme se, trvá to déle, než se čekalo... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Vaše transakce se urychluje! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Vaše transakce byla našimi partnery z těžebních poolů přijata k urychlení. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Výpočet nákladů... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ přizpůsobit src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Zrychlit na ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Urychlit src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Vaše transakce bude upřednostněna až o % těžařů. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Nadcházející blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1393,6 +1440,7 @@ Out-of-band fees + Poplatky mimo pásmo src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 27 @@ -1415,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Poplatky Akcelerace @@ -1478,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1551,7 @@ V tomto časovém rámci žádná akcelerovaná transakce src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1559,7 @@ V bloku: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1579,7 @@ Kolem bloku: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1792,6 +1860,7 @@ Completed + Dokončeno src/app/components/acceleration/accelerations-list/accelerations-list.component.html 65 @@ -1800,9 +1869,10 @@ Failed + Selhalo src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1881,7 @@ Nejsou žádné aktivní akcelerace src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1890,7 @@ Nejsou žádné nedávné akcelerace src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1952,19 @@ mining.all-time + + all + vše + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Zobrazit více » @@ -1889,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2035,7 @@ nezrychluje src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2074,7 @@ Zůstatek src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2333,11 @@ Adresa: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2345,69 @@ Podívejte se na transakce v mempoolu, potvrzené transakce, zůstatek a další informace o adrese . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Historie zůstatku src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - vše - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent nedávné src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction z transakce src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2416,7 @@ z transakcí src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2425,11 @@ Chyba při načítání údajů o adrese. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2438,7 @@ Na této adrese je příliš mnoho transakcí, více, než váš backend zvládne. Více informací o nastavení silnějšího backendu. Místo toho zvažte zobrazení této adresy na oficiálních stránkách Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2447,11 @@ Potvrzený zůstatek src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2460,11 @@ Potvrzené UTXO src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2473,7 @@ Čekající UTXO src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2482,27 @@ Typ src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Aktivum @@ -2579,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Prozkoumejte všechna aktiva vydaná v síti Liquid, jako jsou L-BTC, L-CAD, USDT a další. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Shoda src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3064,7 @@ Jakákoli src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3073,7 @@ Odstín src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3082,7 @@ Klasické src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3095,7 @@ Stáří src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3177,7 @@ není k dispozici src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3186,7 @@ Váš prohlížeč tuto funkci nepodporuje. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3965,11 @@ Očekávané src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3978,7 @@ Aktuální src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3987,7 @@ Očekávaný blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3996,7 @@ Aktuální blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4005,15 @@ Verze src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4052,7 @@ Bity src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4061,7 @@ Merklův kořen src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4070,7 @@ Obtížnost src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4108,7 @@ Hlavička bloku Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4117,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4131,31 @@ Detaily src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4185,7 @@ Chyba při načítání dat bloku. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4194,7 @@ Proč je tento blok prázdný? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4203,11 @@ Akcelerační poplatky placené mimo pásmo src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4216,20 @@ Bloků src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4237,7 @@ Výška src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4270,11 @@ Odměna src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4307,15 @@ Poplatky src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4324,11 @@ Počet TX src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4361,7 @@ Podívejte se na nejnovější bloky Liquid spolu se základními statistikami, jako je výška bloku, velikost bloku a další. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4369,7 @@ Podívejte se na nejnovější Bitcoinové bloky spolu se základními statistikami, jako je výška bloku, odměna za blok, velikost bloku a další. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4390,7 @@ Zkopírováno! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4675,7 @@ X Časová osa src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4684,7 @@ Konsolidace src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4716,7 @@ Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5032,7 @@ Částka (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5041,7 @@ Žádost o Testnet4 mince src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5368,7 @@ Podívejte se na hashrate a obtížnost bitcoinové sítě vizualizované v průběhu času. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5376,11 @@ Hashrate (KP) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Rozhraní - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafy - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentace - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust expired @@ -5348,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5612,7 @@ bloků src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5702,7 @@ Peg out probíhá... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Počet případů, kdy zásoby BTC Federace klesnou pod 95 % celkové nabídky L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC v oběhu + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Rozhraní těžby - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning průzkumník - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Podívejte se na statistiky transakcí v mempoolu: rozsah poplatků, velikost souhrnu a další. Mempool bloky jsou aktualizovány v reálném čase, když síť přijímá nové transakce. @@ -5771,15 +5881,15 @@ Přihlásit se src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Rozhraní těžby + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Získejte statistiky těžby bitcoinů v reálném čase, jako je hashrate, úprava obtížnosti, odměny za blokování, dominance poolu a další. @@ -5818,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Štěstí poolů (1 týden) @@ -5836,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6157,7 @@ Všichni těžaři src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6180,17 @@ blocks bloků - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6202,19 @@ Jiné () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6272,11 @@ Podívejte se na statistiky těžebního poolu pro : nejnovější vytěžené bloky, hashrate v průběhu času, celkovou odměn uza blok k dnešnímu dni, známé adresy coinbase a další. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6423,48 @@ Coinbase štítek src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Chyba při načítání dat poolu. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6473,7 @@ Zatím není dostatek dat src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6481,11 @@ Dominance Poolu src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Seznam surových transakcí oddělených čárkou + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maximální výše poplatků (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Povoleno? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Důvod odmítnutí + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Vyslat Transakci src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6610,7 @@ Vysílání transakce do sítě pomocí hashe transakce. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool v vBytes (sat/vByte) @@ -6594,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV pohled - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtr src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7015,7 @@ Převrátit src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7024,7 @@ Transakce vBytů za sekundu (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7033,18 @@ Odlehlé hodnoty uzávěru src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafy + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Zobrazit velikost mempoolu (v MvB) a transakce za vteřinu (v vB/s) visualizované v čase. @@ -6655,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Podívejte se na bitcoinové bloky a přetížení mempoolu v reálném čase ve zjednodušeném formátu, který je ideální pro televizi. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testovací transakce src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7100,10 @@ Surová data hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Seznam surových transakcí oddělených čárkou - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maximální výše poplatků (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Povoleno? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Důvod odmítnutí - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Okamžitě - - src/app/components/time/time.component.ts - 107 - - - - Just now - Právě teď - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Před - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - během ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Po - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - Před - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Odesláno @@ -7087,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7155,11 @@ Ne v nejbližší době src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7169,7 @@ Potvrzeno v src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7178,7 @@ Výška bloku src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7187,7 @@ Vaše transakce byla urychlena src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7196,7 @@ Čekání na zobrazení transakce v mempoolu src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7205,7 @@ Vaše transakce je v mempoolu, ale ještě nějakou dobu nebude potvrzena. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7214,7 @@ Vaše transakce je blízko vrcholu mempoolu a očekává se, že bude brzy potvrzena. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7223,7 @@ Očekává se, že vaše transakce bude potvrzena v následujícím bloku. src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7232,7 @@ Vaše transakce je potvrzena! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7241,29 @@ Vaše transakce byla nahrazena novější verzí! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Chyba načítání dat transakce. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Více informací src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Potomek - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7326,398 @@ Ancestor Předek - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Funkce + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Předpokládalo se, že tato transakce bude zahrnuta do bloku + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Očekávaná v bloku + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Tato transakce byla zaznamenána v mempoolu před těžbou. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Viděno v Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Tato transakce v našem mempoolu před těžbou chyběla. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Nebylo viděno v Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Tato transakce mohla být přidána mimo pásmo + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Tato transakce mohla mít prioritu mimo pásmo + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Tato transakce byla v konfliktu s jinou verzí v našem mempoolu. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Tok + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Skrýt diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Zobrazit více + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Vstupy a Výstupy + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Zobrazit diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Upravená vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Skrýt urychlovač src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7726,7 @@ Časová osa RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7736,17 @@ Časová osa zrychlení src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Tok - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Skrýt diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Zobrazit více - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Vstupy a Výstupy - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Zobrazit diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Upravená vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transakce nebyla nalezena. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7755,24 @@ Čekání na to, až se objeví v mempoolu... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Chyba načítání dat transakce. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Funkce - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Předpokládalo se, že tato transakce bude zahrnuta do bloku - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Očekávaná v bloku - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Tato transakce byla zaznamenána v mempoolu před těžbou. - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Viděno v Mempoolu - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Tato transakce v našem mempoolu před těžbou chyběla. - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Nebylo viděno v Mempoolu - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Tato transakce mohla být přidána mimo pásmo - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Tato transakce mohla mít prioritu mimo pásmo - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Tato transakce byla v konfliktu s jinou verzí v našem mempoolu. - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nově vytvořené mince) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7818,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7827,24 @@ P2SH redeem skript src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7853,7 @@ P2WSH witness skript src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7871,7 @@ Předchozí výstupní skript src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7880,7 @@ Předchozí typ výstupu src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7889,7 @@ Peg-out na src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7918,42 @@ Zobrazit další vstupy pro odhalení údajů o poplatcích src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs další vstupy @@ -7896,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Federation Holdings @@ -7922,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Nabídka L-BTC proti držení BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Výchozí push: akce: 'want', data: ['blocks', ...] pro vyjádření toho, co chcete pushnout. K dispozici: blocks, mempool-blocks, live-2h-chart a stats. Push transakce související s adresou: 'track-address': '3PbJ...bF9B' pro příjem všech nových transakcí obsahujících tuto adresu jako vstup nebo výstup. Vrací pole transakcí. address-transactions pro nové transakce mempoolu a block-transactions pro nové transakce potvrzené blokem. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Příklad kódu @@ -8047,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentace + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ Časté otázky » @@ -8441,7 +8782,7 @@ Přehled Lightning kanálu . Podívejte se na kapacitu kanálu, zapojené Lightning uzly, související transakce v on-chainu a další. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning průzkumník + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Získejte statistiky sítě Lightning (souhrnnou kapacitu, konektivitu atd.), uzly Lightning (kanály, likvidita atd.) a kanály Lightning (stav, poplatky atd.). @@ -9179,7 +9532,7 @@ Přehled pro Lightning uzel s názvem . Podívejte se na kanály, kapacitu, umístění, statistiky poplatků a další informace. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10039,7 @@ Lightning uzly na ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10051,7 @@ Procházejte všechny uzly Bitcoin Lightning pomocí [AS] ISP a podívejte se na souhrnné statistiky, jako je celkový počet uzlů, celková kapacita, a další pro ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10159,338 @@ 71 + + Immediately + Okamžitě + + src/app/services/time.service.ts + 71 + + + + Just now + Právě teď + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Před + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + během ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Po + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + Před + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee poplatek @@ -9842,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation potvrzení @@ -9901,11 +10594,11 @@ Můj účet src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10607,7 @@ Prozkoumejte src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10616,7 @@ Testovací transakce src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10626,7 @@ Připojte se k naším Nodům src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10635,7 @@ API Dokumentace src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10644,7 @@ Zjistěte src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10653,7 @@ Co je to mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10662,7 @@ Co je to prohlížeč bloků? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10671,7 @@ Co je to mempool prohlížeč? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10680,7 @@ Proč se nepotvrzuje moje transakce? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10689,7 @@ Více častých otázek » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10698,7 @@ Výzkum src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10707,7 @@ Sítě src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10716,7 @@ Průzkumník Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10725,7 @@ Průzkumník Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10734,7 @@ Průzkumník Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10743,7 @@ Průzkumník Signet  src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10752,7 @@ Průzkumník Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10761,7 @@ Průzkumník Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10770,7 @@ Nástroje src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10779,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10788,7 @@ Podmínky src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10797,7 @@ Podmínky služby src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10807,7 @@ Ochrana osobních údajů src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10817,7 @@ Zásady používání ochranné známky src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10827,13 @@ Licence třetích stran src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - áš zůstatek je příliš nízký.Prosímdobijte svůj účet. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 ještě není dokončen a může být kdykoli resetován. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Hromadná platba src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10871,7 @@ Typy Adres src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10879,7 @@ Chování src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10887,7 @@ Heuristika src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10895,7 @@ Sighash Flagy src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11023,7 @@ Multisig z src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.da.xlf b/frontend/src/locale/messages.da.xlf index ba27e226f..0776cd0bc 100644 --- a/frontend/src/locale/messages.da.xlf +++ b/frontend/src/locale/messages.da.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Virksomhedssponsorer 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Whale sponsorer src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad sponsorer src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG Sponsorer ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ En del af følgende communities src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Community alliancer src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Oversættere src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Bidragsydere src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Medlemmer src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Vedligeholdere src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Beklager, der er sket en fejl! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Vi var ikke i stand til at fremskynde denne transaktion. Prøv igen senere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Luk src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Din transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus ubekræftede forfædre(r) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuel størrelse src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Størrelse i vbytes af denne transaktion (inklusive ubekræftede forgængertransaktioner) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ In-band gebyrer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Gebyrer allerede er betalt af denne transaktion (inklusive ubekræftede forgængertransaktioner) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Hvor meget hurtigere? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Dette vil reducere din forventede ventetid indtil den første bekræftelse til src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Resumé src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Næste blok markedskurs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Anslået ekstra gebyr påkrævet src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Målkurs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Ekstra gebyr påkrævet src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ gebyrer + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Accelerator servicegebyr src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Transaktionsstørrelsestillæg src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Estimeret accelerationsomkostning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maksimal accelerationsomkostning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Accelerationsomkostninger src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Disponibel saldo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Gå tilbage src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Accelerer din Bitcoin-transaktion? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Vent src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Bekræftelse forventes src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Bekræftelse forventes ikke foreløbigt src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ For en ekstra src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Reducerer forventet bekræftelsestid til src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Betaling til mempool.space for acceleration af txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Din konto debiteres højst src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Betal src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Faktura kunne ikke indlæses src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Indlæser faktura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - ELLER + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Bekræft din betaling src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Samlet meromkostning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ med src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Indlæser betalingsmetode... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Bekræfter din betaling src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Vi behandler din betaling... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Accelererer din transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Bekræfter din acceleration med vores mining-partnere... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...beklager, det tager længere tid end forventet... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Din transaktion bliver accelereret! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Din transaktion er blevet accepteret til acceleration af vores mining-partnere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Beregner omkostninger... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ tilpas src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Accelerer til ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Accelerer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Din transaktion vil blive prioriteret af op til % af minere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Næste blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Accelerationsgebyrer @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ Ingen accelereret transaktion i denne tidsramme src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ I blok: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ Omkring blok: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ Der er ingen aktive accelerationer src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ Der er ingen nyere accelerationer src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + alle + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Se mere » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ accelererer ikke src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ Balance src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ Adresse: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ Se mempool-transaktioner, bekræftede transaktioner, saldo og mere for adresse . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Balance historie src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - alle - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent seneste src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction af transaktion src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ af transaktioner src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ Fejl ved indlæsning af adressedata. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ <x id="START_ITALIC_TEXT" ctype="x-i" equiv-text="There are too many transactions on this address, more than your backend can handle. See more on &lt;"/>Der er for mange transaktioner på denne adresse, mere end din backend kan håndtere. Se mere om <x id="START_LINK" ctype="x-a" equiv-text="&lt;a href=&quot;/docs/faq#address-lookup-issues&quot;&gt;"/>opsætning af en kraftigere backend<x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/a&gt;"/>.<x id="CLOSE_ITALIC_TEXT" ctype="x-i" equiv-text="&lt;/i&gt;"/><x id="LINE_BREAK" ctype="lb"/></span><x id="LINE_BREAK" ctype="lb"/> Overvej i stedet at se denne adresse på det officielle Mempool-websted: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ Bekræftet balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ Bekræftede UTXO'er src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ Afventende UTXO'er src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ Type src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Aktiv @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Udforsk alle aktiver udstedt på Liquid-netværket som L-BTC, L-CAD, USDT og mere. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Match src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ Hvilken-som-helst src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ Farve src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ Klassisk src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ Alder src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ ikke tilgængelig src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ Din browser understøtter ikke denne funktion. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ Forventet src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ Faktiske src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ Forventet blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ Faktisk blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ Version src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Merkle-træ src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ Sværhedsgrad src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ Blokhoved Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ Revision src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ Detaljer src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ Fejl ved indlæsning af blokdata. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ Hvorfor er denne blok tom? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ Accelerationsgebyrer betalt ved siden af src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ Blokke src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ Højde src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ Belønning src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ Gebyrer src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ Se de seneste Liquid blokke sammen med simpel statistik såsom blokhøjde, blokstørrelse og mere. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ Se de seneste Bitcoin-blokke sammen med simpel statistik såsom blokhøjde, blokbelønning, blokstørrelse og mere. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ Kopieret! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ X Tidslinje src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ Konsolidering src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ Beløb (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ Anmod om Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ Se hashrate og sværhedsgrad for Bitcoin-netværket visualiseret over tid. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - Panel - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafer - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust Udløbet @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ blokke src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Peg-Out i gang... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Antallet af gange, at Federationens BTC-beholdning falder til under 95% af den samlede L-BTC-forsyning + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - L-BTC i omløb + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Se statistik for transaktioner i mempoolen: gebyrinterval, samlet størrelse og mere. Mempool-blokke opdateres i realtid, efterhånden som netværket modtager nye transaktioner. @@ -5771,15 +5878,15 @@ Log ind src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Få realtids Bitcoin-minestatistik som hashrate, sværhedsjustering, blokbelønninger, pooldominans og mere. @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Puljers held (1 uge) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ Alle miners src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks blokke - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ Andre () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ Se minepuljestatistik for : de seneste minerede blokke, hashrate over tid, total blokbelønning til dato, kendte coinbase-adresser og mere. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6420,48 @@ Coinbase tag src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Fejl ved indlæsning af pooldata. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6470,7 @@ Ikke nok data endnu src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6478,11 @@ Pool dominans src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6499,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6511,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Kommasepareret liste over råtransaktioner + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maksimal gebyrsats (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Tilladt? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Grund til afvisning + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Broadcast Transaktion src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6607,7 @@ Udsend en transaktion til -netværket ved hjælp af transaktionens hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6647,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6694,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6788,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6908,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool i vBytes (sat/vByte) @@ -6594,29 +6994,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV visning - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7012,7 @@ Vend om src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7021,7 @@ Transaktion vBytes pr. sekund (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7030,18 @@ Cap afvigere src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafer + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Se mempool-størrelse (i MvB) og transaktioner per sekund (i vB/s) visualiseret over tid. @@ -6655,24 +7050,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Se Bitcoin-blokke og mempool-overbelastning i realtid i et forenklet format lavet til TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Test transaktioner src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7097,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Kommasepareret liste over råtransaktioner - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maksimal gebyrsats (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Tilladt? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Grund til afvisning - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Øjeblikkelig - - src/app/components/time/time.component.ts - 107 - - - - Just now - Lige nu - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - siden - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Om ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - inden for ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Efter - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - før - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Sendt @@ -7087,11 +7138,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7152,11 @@ Ikke snart src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7166,7 @@ Bekræftet src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7175,7 @@ Blokhøjde src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7184,7 @@ Din transaktion er blevet accelereret src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7193,7 @@ Venter på, at din transaktion vises i mempoolen src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7202,7 @@ Din transaktion er i mempoolen, men den vil ikke blive bekræftet snarligt. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7211,7 @@ Din transaktion er tæt på toppen af mempoolen og forventes snart at blive bekræftet. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7220,7 @@ Din transaktion forventes at blive bekræftet i næste blok src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7229,7 @@ Din transaktion er bekræftet! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7238,29 @@ Din transaktion er blevet erstattet af en nyere version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Fejl ved indlæsning af transaktionsdata. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Se flere detaljer src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7273,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7289,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Efterkommer - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7323,398 @@ Ancestor Forfader - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Funktioner + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Denne transaktion forventedes at blive inkluderet i blokken + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Forventes i blok + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Denne transaktion blev set i mempoolen før mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Set i Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Denne transaktion manglede fra vores mempool før mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Ikke set i Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Denne transaktion kan være blevet tilføjet uden for netværket + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Denne transaktion kan være blevet prioriteret uden for netværket + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Denne transaktion var i konflikt med en anden version i vores mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flow + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Skjul diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Vis mere + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Input & Output + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Vis diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Justeret vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Låsetid + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Skjul acceleratoren src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7723,7 @@ RBF Timeline src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7733,17 @@ Accelerations Tidslinje src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flow - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Skjul diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Vis mere - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Input & Output - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Vis diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Justeret vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Låsetid - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transaktionen blev ikke fundet. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7752,24 @@ Venter på, at den dukker op i mempoolen... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Fejl ved indlæsning af transaktionsdata. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Funktioner - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Denne transaktion forventedes at blive inkluderet i blokken - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Forventes i blok - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Denne transaktion blev set i mempoolen før mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Set i Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Denne transaktion manglede fra vores mempool før mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Ikke set i Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Denne transaktion kan være blevet tilføjet uden for netværket - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Denne transaktion kan være blevet prioriteret uden for netværket - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Denne transaktion var i konflikt med en anden version i vores mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nyligt skabte coins) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7778,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7805,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7815,7 @@ Vidne src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7824,24 @@ P2SH indløse script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7850,7 @@ P2WSH vidne script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7859,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7868,7 @@ Tidligere output script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7877,7 @@ Tidligere outputtype src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7886,7 @@ Peg-out til src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7895,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7905,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7915,42 @@ Vis flere input for at se gebyrdata src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs andre input @@ -7896,6 +8181,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Federation Holdings @@ -7922,9 +8265,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8319,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8330,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Kode eksempel @@ -8047,6 +8376,15 @@ API Docs API response + + Documentation + Dokumentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8441,7 +8779,7 @@ Oversigt over Lightning-kanalen . Se kanalkapacitet, de involverede Lightning-noder, relaterede on-chain-transaktioner og mere. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9402,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Få statistikker om Lightning-netværket (samlet kapacitet, tilslutningsmuligheder osv.), Lightning-noder (kanaler, likviditet osv.) og Lightning-kanaler (status, gebyrer osv.). @@ -9179,7 +9529,7 @@ Oversigt over Lightning-netværksnoden kaldet . Se kanaler, kapacitet, placering, gebyrstatistik og mere. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10036,7 @@ Lightning noder på ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10048,7 @@ Gennemse alle Bitcoin Lightning-noder ved hjælp af [AS] internetudbyderen og se samlede statistikker som det samlede antal noder, total kapacitet, og mere til internetudbyderen. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10156,338 @@ 71 + + Immediately + Øjeblikkelig + + src/app/services/time.service.ts + 71 + + + + Just now + Lige nu + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + siden + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Om ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + inden for ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Efter + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + før + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee gebyr @@ -9842,6 +10524,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation bekræftelse @@ -9901,11 +10591,11 @@ Min konto src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10604,7 @@ Udforsk src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10613,7 @@ Test transaktion src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10623,7 @@ Opret forbindelse til vores noder src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10632,7 @@ API dokumentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10641,7 @@ Lær src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10650,7 @@ Hvad er en mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10659,7 @@ Hvad er et blok udforskningsværktøj? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10668,7 @@ Hvad er et mempool udforskningsværktøj? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10677,7 @@ Hvorfor bekræftes min transaktion ikke? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10686,7 @@ Flere ofte stillede spørgsmål » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10695,7 @@ Forskning src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10704,7 @@ Netværk src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10713,7 @@ Mainnet udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10722,7 @@ Testnet3 udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10731,7 @@ Testnet4 udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10740,7 @@ Signet udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10749,7 @@ Liquid Testnet udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10758,7 @@ Liquid udforskningsværktøj src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10767,7 @@ Værktøjer src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10776,7 @@ Ur (Minet) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10785,7 @@ Jura src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10794,7 @@ Vilkår og betingelser src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10804,7 @@ Privatlivspolitik src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10814,7 @@ Varemærkepolitik src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10824,13 @@ Tredjepartslicenser src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Din saldo er for lav.Venligst indsæt flere penge på din konto. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10855,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 er endnu ikke færdigt og kan til enhver tid nulstilles. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Batch betaling src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10868,7 @@ Adressetyper src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10876,7 @@ Opførsel src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10884,7 @@ Heuristik src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10892,7 @@ Sighash flag src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11020,7 @@ Multisig af src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.de.xlf b/frontend/src/locale/messages.de.xlf index d4933b576..dc4eb3700 100644 --- a/frontend/src/locale/messages.de.xlf +++ b/frontend/src/locale/messages.de.xlf @@ -295,18 +295,38 @@ Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties. - Unser Mempool- und Blockchain-Explorer für die Bitcoin-Community, der sich auf den Markt für Transaktionsgebühren und das mehrschichtige Ökosystem konzentriert und vollständig selbst gehostet wird, ohne vertrauten Drittanbieter. + Unser selbstgehosteter Mempool- und Blockchain-Explorer für die Bitcoin-Gemeinschaft bietet einen umfassenden Einblick in den Markt der Transaktionsgebühren und das Multi-Layer-Ökosystem – ganz ohne Abhängigkeit von Drittanbietern. src/app/components/about/about.component.html 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Unternehmenssponsoren src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Walsponsoren src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad-Sponsoren src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG-Sponsoren ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Community Integrationen src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Community-Allianzen src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Projektübersetzer src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Projektmitwirkende src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Projektmitglieder src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Projektbetreuer src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Entschuldigung, etwas ist schief gelaufen. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Wir konnten diese Transaktion nicht beschleunigen. Bitte später erneut versuchen. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Schliessen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Deine Transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus unbestätigte(r) Vorfahre(n) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuelle Größe src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Größe dieser Transaktion in vbyte (einschließlich unbestätigter Vorfahren) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ In-Band-Gebühren src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Bereits bezahlte Gebühren aus dieser Transaktion (einschließlich unbestätigter Vorfahren) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Wie viel schneller? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Dies wird die voraussichtliche Wartezeit bis zur ersten Bestätigung verkürzten auf src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Zusammenfassung src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Nächster Blockmarktpreis src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Geschätzte zusätzlich erforderliche Gebühr src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Zielrate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Zusätzliche Gebühr erforderlich src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ Gebühren + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Accelerator-Servicegebühr src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Zuschlag für Transaktionsgröße src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Geschätzte Beschleunigungskosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maximale Beschleunigungskosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Beschleunigungskosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Verfügbares Guthaben src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Zurück src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Die Bitcoin-Transaktion beschleunigen? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Warten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Bestätigung erwartet src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Bestätigung nicht so bald zu erwarten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Für eine zusätzliche src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Reduzierung der erwarteten Bestätigungszeit auf src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Zahlung an mempool.space für die Beschleunigung von txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Ihr Konto wird maximal belastet mit src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Zahlen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Invoice konnte nicht geladen werden src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Invoice wird geladen... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - ODER + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Zahlung bestätigen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Gesamte Zusatzkosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ mit src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Zahlungsmethode wird geladen … src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Zahlung bestätigen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Wir verarbeiten die Zahlung... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Beschleunigen der Transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Bestätigung der Beschleunigung mit unseren Mining-Pool-Partnern … src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...Entschuldigung, das dauert länger als erwartet... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Deine Transaktion wird beschleunigt! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Die Transaktion wurde von unseren Mining-Pool-Partnern zur Beschleunigung akzeptiert. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Kosten werden berechnet... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ anpassen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Beschleunigen auf ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Beschleunigen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Die Transaktion wird von bis zu  % der Miner priorisiert. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Nächster Block @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Beschleunigungsgebühren @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ Für diesen Zeitraum gibt es keine beschleunigte Transaktion src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ Im Block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ Um den Block herum: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ Es gibt keine aktiven Beschleunigungen src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ Es gibt keine aktuellen Beschleunigungen src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + alle + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Mehr anzeigen » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ nicht beschleunigt src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ Guthaben src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ Adresse: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ Zeige Mempool-Transaktionen, bestätigte Transaktionen, Saldo und mehr für Adresse . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Kontostandverlauf src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - alle - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent Aktuell src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction der -Transaktion src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ von Transaktionen src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ Fehler beim Laden der Adressdaten. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ Es gibt zu viele Transaktionen an dieser Adresse, mehr als Ihr Backend verarbeiten kann. Weitere Informationen finden Sie unter Einrichten eines stärkeren Backends. Stattdessen diese Adresse auf der offiziellen Mempool-Website ansehen: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ Bestätigter Guthaben src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ Bestätigte UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ Ausstehende UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ Typ src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Vermögenswert @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Alle im Liquid-Netzwerk ausgegebenen Vermögenswerte wie L-BTC, L-CAD, USDT und mehr erkunden. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Übereinstimmung src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ Beliebig src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ Farbton src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ Klassisch src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ Alter src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ nicht verfügbar src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ Der Browser unterstützt diese Funktion nicht. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ Erwartet src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ Tatsächlich src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ Erwarteter Block src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ Tatsächlicher Block src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ Version src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Merkle Root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ Schwierigkeit src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ Block-Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ Prüfung src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ Details src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ Fehler beim Laden der Blockdaten. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ Weshalb dieser leere Block? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ Beschleunigungsgebühren out-of-band gezahlt src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ Blöcke src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ Höhe src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ Belohnung src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ Gebühren src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ TX src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ Zeige die neuesten Liquid-Blöcke zusammen mit grundlegenden Statistiken wie Blockhöhe, Blockgröße und mehr an. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ Zeige die neuesten Bitcoin-Blöcke zusmmen mit grundlegenden Statistiken wie Blockhöhe, Blockbelohnung, Blockgröße und mehr an. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ Kopiert! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ X-Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ Konsolidierung src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ Daten src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ Betrag (Sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ Testnet4-Coins anfordern src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ Zeige die Hashrate und den Schwierigkeitsgrad für das Bitcoin-Netzwerk im Zeitverlauf an. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - Dashboard - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafiken - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust abgelaufen @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ Blöcke src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Peg-Out läuft... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Häufigkeit, mit der die BTC-Bestände der Föderation unter 95 % des gesamten L-BTC-Angebots fallen + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - L-BTC im Umlauf + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - Mining-Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Zeige folgende Statistiken für -Transaktionen im Mempool an: Gebührenbereich, Gesamtgröße und mehr. Mempool-Blöcke werden in Echtzeit aktualisiert, wenn das Netzwerk neue Transaktionen empfängt. @@ -5771,15 +5878,15 @@ Anmelden src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + Mining-Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Erhalte Bitcoin-Mining-Statistiken in Echtzeit wie Hashrate, Schwierigkeitsanpassung, Blockbelohnungen, Pool-Dominanz und mehr. @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Poolglück (1 Woche) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ Alle Miner src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks Blöcke - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ Sonstiges () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ Zeige die folgenden Mining-Pool-Statistiken für an: zuletzt geschürfte Blöcke, Hashrate im Zeitverlauf, bisherige Gesamtblockbelohnung, bekannte Coinbase-Adressen und mehr. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6420,48 @@ Coinbase tag src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Fehler beim Laden der Pooldaten. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6470,7 @@ Noch nicht genügend Daten src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6478,11 @@ Pool-Dominanz src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6499,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6511,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Durch Kommas getrennte Liste der Rohtransaktionen + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Höchster Gebührensatz (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Erlaubt? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Ablehnungsgrund + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Transaktion senden src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6607,7 @@ Senden einer Transaktion mithilfe des Hashs der Transaktion an das Netzwerk . src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6647,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6694,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6788,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6908,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool in vBytes (sat/vByte) @@ -6594,29 +6994,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV-Ansicht - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7012,7 @@ Umkehren src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7021,7 @@ Transaktion vBytes pro Sekunde (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7030,18 @@ Ausreißer begrenzen src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafiken + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Zeige die Mempool-Größe (in MvB) und Transaktionen pro Sekunde (in vB/s) im Zeitverlauf an. @@ -6655,24 +7050,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Zeige die Bitcoin-Blöcke und den Mempool-Stau in Echtzeit in einem vereinfachten Format, das perfekt für einen Fernseher geeignet ist. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testtransaktionen src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7097,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Durch Kommas getrennte Liste der Rohtransaktionen - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Höchster Gebührensatz (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Erlaubt? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Ablehnungsgrund - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Sofort - - src/app/components/time/time.component.ts - 107 - - - - Just now - Gerade eben - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Vor - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - innerhalb von ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Nach - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - vorher - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Gesendet @@ -7087,11 +7138,11 @@ Vorauss. Zeit bis Schürfung src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7152,11 @@ Nicht in naher Zukunft src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7166,7 @@ Bestätigt am src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7175,7 @@ Blockhöhe src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7184,7 @@ Deine Transaktion wurde beschleunigt src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7193,7 @@ Warten, bis Ihre Transaktion im Mempool erscheint src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7202,7 @@ Deine Transaktion befindet sich im Mempool, wird aber für einige Zeit nicht bestätigt werden. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7211,7 @@ Ihre Transaktion befindet sich fast oben im Mempool und wird voraussichtlich bald bestätigt werden. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7220,7 @@ Deine Transaktion wird voraussichtlich im nächsten Block bestätigt src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7229,7 @@ Deine Transaktion ist bestätigt! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7238,29 @@ Ihre Transaktion wurde durch eine neuere Version ersetzt! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Fehler beim Laden der Transaktionsdaten. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Mehr Details anzeigen src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7273,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7289,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Nachfahre - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7323,398 @@ Ancestor Vorfahr - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Merkmale + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Diese Transaktion sollte in den Block aufgenommen werden + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Erwartet im Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Diese Transaktion wurde vor dem Mining im Mempool gesehen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Gesehen im Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Diese Transaktion fehlte vor dem Mining in unserem Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Nicht im Mempool gesehen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Diese Transaktion wurde möglicherweise out-of-band hinzugefügt + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Diese Transaktion wurde möglicherweise out-of-band priorisiert + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Diese Transaktion stand im Konflikt mit einer anderen Version in unserem Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Fluss + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Diagramm ausblenden + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Mehr anzeigen + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Inputs und Outputs + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Diagramm anzeigen + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Angepasste vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Sperrzeit + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Beschleuniger ausblenden src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7723,7 @@ RBF-Zeitleiste src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7733,17 @@ Beschleunigungszeitleiste src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Fluss - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Diagramm ausblenden - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Mehr anzeigen - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Inputs und Outputs - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Diagramm anzeigen - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Angepasste vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Sperrzeit - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transaktion nicht gefunden. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7752,24 @@ Warten bis sie im Mempool erscheint... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Fehler beim Laden der Transaktionsdaten. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Merkmale - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Diese Transaktion sollte in den Block aufgenommen werden - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Erwartet im Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Diese Transaktion wurde vor dem Mining im Mempool gesehen - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Gesehen im Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Diese Transaktion fehlte vor dem Mining in unserem Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Nicht im Mempool gesehen - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Diese Transaktion wurde möglicherweise out-of-band hinzugefügt - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Diese Transaktion wurde möglicherweise out-of-band priorisiert - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Diese Transaktion stand im Konflikt mit einer anderen Version in unserem Mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Neu generierte Coins) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7778,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7805,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7815,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7824,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7850,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7859,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7868,7 @@ Vorheriges Output Script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7877,7 @@ Vorheriger Ausgabetyp src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7886,7 @@ Peg-out zu src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7895,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7905,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7915,42 @@ Mehr Inputs anzeigen, um Gebührendaten anzuzeigen src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs Andere Inputs @@ -7896,6 +8181,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Föderation Bestand @@ -7922,9 +8265,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC-Angebot gegen BTC-Bestände + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8319,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8330,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Standard Senden: action: 'want', data: ['blocks', ...] um auszudrücken, was gepusht werden soll. Verfügbar: blocks, mempool-blocks, live-2h-chart, und stats.Sende Transaktionen bezogen auf die Adresse: 'track-address': '3PbJ...bF9B' um alle neuen Transaktionen mit der Adresse als Input oder Output enthalten zu empfangen. Gibt Array von Tansaktionen zurück. address-transactions für neue Mempool-Transaktionen, und block-transactions - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Codebeispiel @@ -8047,6 +8376,15 @@ API Docs API response + + Documentation + Dokumentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8441,7 +8779,7 @@ Übersicht über den Lightning-Kanal . Zeige die Kanalkapazität, die beteiligten Lightning-Knoten, zugehörige On-Chain-Transaktionen und mehr an. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9402,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Erhalte Statistiken zum Lightning-Netzwerk (Gesamtkapazität, Konnektivität usw.), zu Lightning-Nodes (Kanäle, Liquidität usw.) und zu Lightning-Kanälen (Status, Gebühren usw.). @@ -9179,7 +9529,7 @@ Übersicht über den Lightning-Netzwerkknoten mit dem Namen . Zeige Kanäle, Kapazität, Standort, Gebührenstatistiken und mehr an. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10036,7 @@ Lightning-Nodes auf ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10048,7 @@ Durchsuche alle Bitcoin Lightning-Knoten, die den [AS ] ISP verwenden, und sieh aggregierte Statistiken wie die Gesamtzahl der Knoten, die Gesamtkapazität und mehr für den ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10156,338 @@ 71 + + Immediately + Sofort + + src/app/services/time.service.ts + 71 + + + + Just now + Gerade eben + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Vor + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + innerhalb von ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Nach + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + vorher + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee Gebühr @@ -9842,6 +10524,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation Bestätigung @@ -9901,11 +10591,11 @@ Mein Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10604,7 @@ Erkunden src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10613,7 @@ Testtransaktion src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10623,7 @@ Verbinden mit unseren Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10632,7 @@ API-Dokumentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10641,7 @@ Lernen src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10650,7 @@ Was ist ein Mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10659,7 @@ Was ist ein Block-Explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10668,7 @@ Was ist ein Mempool-Explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10677,7 @@ Warum wird meine Transaktion nicht bestätigt? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10686,7 @@ Weitere FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10695,7 @@ Forschung src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10704,7 @@ Netzwerke src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10713,7 @@ Mainnet-Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10722,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10731,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10740,7 @@ Signet-Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10749,7 @@ Liquid-Testnet-Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10758,7 @@ Liquid-Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10767,7 @@ Werkzeuge src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10776,7 @@ Uhr (Geschürft) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10785,7 @@ Rechtliches src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10794,7 @@ Nutzungsbedingungen src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10804,7 @@ Datenschutzbestimmungen src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10814,7 @@ Markenrichtlinie src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10824,13 @@ Lizenzen von Drittanbietern src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Ihr Guthaben ist zu niedrig.Bitte laden Sie Ihr Konto auf. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10855,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 ist noch nicht abgeschlossen und kann jederzeit zurückgesetzt werden. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Sammelzahlung src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10868,7 @@ Adresstypen src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10876,7 @@ Verhalten src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10884,7 @@ Heuristiken src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10892,7 @@ Sighash-Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11020,7 @@ Multisig von src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.es.xlf b/frontend/src/locale/messages.es.xlf index 40f5044a0..29f39999f 100644 --- a/frontend/src/locale/messages.es.xlf +++ b/frontend/src/locale/messages.es.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Patrocinadores empresariales 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Patrocinadores ballenas src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Patrocinadores chads src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Patrocinadores OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integraciones comunitarias src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Alianzas comunitarias src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Traductores del proyecto src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Colaboradores del proyecto src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Miembros del proyecto src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Mantenedores del proyecto src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ ¡Perdón, algo salió mal! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ No pudimos acelerar este transacción. Por favor, inténtelo de nuevo más tarde. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Cerrar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Tu transacción src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Más sin confirmar antepasado(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Tamaño virtual src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Tamaño en vbytes de este transacción (incluidos los sin confirmar antepasados) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Tarifas dentro de banda src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Tarifas ya pagadas por este transacción (incluidos los sin confirmar antepasados) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ ¿Cuanto más rápido? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Esto reducirá el tiempo de espera esperado hasta el primer confirmación a src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Resumen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Tasa de mercado de seguinte bloque src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Se requiere tasa adicional estimado src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Tasa objetivo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Se requiere tasa adicional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Tasas del Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Tasa servicio de acelerador src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Transacción Tamaño Recargo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Costo estimado de aceleración src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Costo máximo de aceleración src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Costo de aceleración src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Saldo disponible src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Regresar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ ¿Acelerar tu transacción Bitcoin? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Esperar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Confirmación esperado src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Confirmación no se espera en el corto plazo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Por un adicional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Reducir el tiempo esperado de confirmación a src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Pago a mempool.space para aceleración de txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Su cuenta no será debitada más de src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Pagar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ No se pudo cargar la factura src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Cargando factura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - O + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Confirmar tu pago src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Total costo adicional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ con src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Cargando método de pago... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Confirmando tu pago src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Estamos procesando tu pago... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Acelerando tu transacción src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Confirmando su aceleración con nuestros socios de pools de minería... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...lo siento, esto está tardando más de lo esperado... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ ¡Tu transacción se está acelerando! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Tu transacción ha sido aceptado para aceleración por nuestros socios de pools de minería. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Calculando el costo... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ personalizar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Acelera hasta ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Acelerar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Tu transacción tendrá una prioridad de hasta % de miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Siguiente bloque @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Comisiones de aceleración @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ No se ha acelerado transacción durante este período de tiempo src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ En el bloque: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ Alrededor de bloque: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ No hay aceleraciones activas src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ No hay aceleraciones recientes src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + todo + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Ver más » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ no está siendo acelerado src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ Dirección: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ Ver transacciones en la mempool, transacciones confirmadas, saldo y más para la dirección . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Historial de saldos src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - todo - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent reciente src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction de transacción src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ de transacciones src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ Error al cargar datos de la dirección. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ Hay demasiadas transacciones en esta dirección, más de lo que tu backend puede soportar. Ver más sobre configurar un backend más sólido. En su lugar, te recomendamos consultar esta dirección en el sitio oficial de Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ Saldo confirmado src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ UTXOs confirmados src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ UTXOs pendientes src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ Tipo src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Activo @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Explora todos los activos emitidos en la red Liquid como L-BTC, L-CAD, USDT, entre otros. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Coincide src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ Cualquiera src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ Tinte src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ Clásico src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ Edad src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ no disponible src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ Tu explorador no soporta esta función src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflicto src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ Esperado src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ Actual src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ Bloque esperado src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ Bloque real src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ Versión src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Raíz de Merkle src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ Dificultad src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ Auditoría src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ Detalles src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ Error al cargar datos de bloque. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ Por qué está este bloque vacío? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ Tarifas de aceleración pagadas fuera de banda src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ Bloques src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ Altura src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ Recompensa src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ Tasas src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ Ver los bloques de Liquid más recientes junto a estadísticas básicas como altura de bloque, tamaño y más. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ Ver los bloques de Bitcoin más recientes junto a estadísticas básicas como altura de bloque, tamaño y más. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ Copiado! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ Línea de tiempo 𝕏 src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ Consolidación src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ Datos src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ Cantidad (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ Solicitar monedas Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - Tasa de hash + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Tasa de hash src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ Ver tasa de hash y dificultad para la red Bitcoin a lo largo del tiempo. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ Tasa de hash (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - Dashboard - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Gráficos - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentación - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-dust caducado @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ bloques src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Peg out en curso... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Número de veces que las tenencias en BTC de la Federación caen por debajo del 95% de la oferta total de L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5650,9 +5801,8 @@ 163 - - L-BTC in circulation - L-BTC en circulación + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5672,49 +5822,6 @@ shared.as-of-block - - Mining Dashboard - Panel de minado - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Explorador Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Grifo - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Ver estadísticas de transacciones en la mempool: rango de tasas, tamaño agregado, y más. Los bloques de la mempool se actualizan en tiempo real cuando la red recibe nuevas transacciones. @@ -5772,15 +5879,15 @@ Iniciar sesión src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5811,6 +5918,18 @@ dashboard.adjustments + + Mining Dashboard + Panel de minado + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Obtén estadísticas de minería en tiempo real como tasa de hash, ajuste de dificultad, recompensa por bloque, dominancia de pool, y más. @@ -5819,6 +5938,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Suerte de las pools (1 semana) @@ -5837,7 +6008,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5868,7 +6039,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5894,7 +6065,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5941,11 +6112,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5984,7 +6155,7 @@ Todos los mineros src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6007,17 +6178,17 @@ blocks bloques - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6029,15 +6200,19 @@ Otros () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6082,11 +6257,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6095,11 +6270,11 @@ Ver estadísticas de minería para : bloques minados recientes, hashrate en el tiempo, recompensas por bloque, direcciones coinbase conocidas, y más. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6118,20 +6293,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6142,6 +6341,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6153,11 +6356,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6170,11 +6373,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6187,11 +6390,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6218,20 +6421,48 @@ Etiqueta de coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Error al cargar datos del pool. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6240,7 +6471,7 @@ Todavía no hay suficientes datos src/app/components/pool/pool.component.ts - 142 + 177 @@ -6248,11 +6479,11 @@ Dominancia de la pool src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6269,7 +6500,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6281,18 +6512,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Lista de transacciones en bruto separadas por coma + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Tasa máxima de tasa (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Permitido? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Motivo del rechazo + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Emitir transacción src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6300,7 +6608,7 @@ Transmita un transacción a la red usando el hash de la transacción. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6340,17 +6648,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6363,7 +6695,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6457,11 +6789,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6577,6 +6909,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool en vBytes (sat/vByte) @@ -6595,29 +6995,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Vista de TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtro src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6626,7 +7013,7 @@ Invertir src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6635,7 +7022,7 @@ vBytes de transacciones por segundo (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6644,10 +7031,18 @@ Remove valores atípicos src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Gráficos + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Ver tamaño de la mempool (en MvB) y transacciones por segundo ( en vB/s) a lo largo del tiempo. @@ -6656,24 +7051,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Ver bloques Bitcoin y congestión de la mempool en tiempo real en un formato simplificado perfecto para la TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Transacciones de prueba src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6687,370 +7098,10 @@ hexadecimal en bruto src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Lista de transacciones en bruto separadas por coma - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Tasa máxima de tasa (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Permitido? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Motivo del rechazo - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Inmmediatamente - - src/app/components/time/time.component.ts - 107 - - - - Just now - Justo ahora - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - atrás - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - En ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - dentro de ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Después - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - antes - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Enviado @@ -7088,11 +7139,11 @@ Tiempo esperado de llegada src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7102,11 +7153,11 @@ No estaré pronto en un futuro próximo src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7116,7 +7167,7 @@ Confirmado en src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7125,7 +7176,7 @@ Altura de bloque src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7134,7 +7185,7 @@ Tu transacción ha sido acelerada src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7143,7 +7194,7 @@ Esperando a que tu transacción aparezca en mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7152,7 +7203,7 @@ Su transacción está en mempool, pero no se confirmará durante algún tiempo. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7161,7 +7212,7 @@ Su transacción está cerca de la parte superior de mempool, y se espera que confirmar pronto. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7170,7 +7221,7 @@ Se espera que su transacción confirmar en el próximo bloque src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7179,7 +7230,7 @@ ¡Tu transacción está confirmada! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7188,16 +7239,29 @@ ¡Tu transacción ha sido reemplazado por una versión más nueva! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Error al cargar datos transacción. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Ver más detalles src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7210,11 +7274,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7226,44 +7290,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendiente - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7272,18 +7324,398 @@ Ancestor Ancestro - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Características + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Este transacción estaba previsto para ser incluido en bloque + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Previsto en bloque + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Este transacción fue visto en mempool antes de minado + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Visto en la Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Este transacción faltaba en nuestro mempool antes de minado + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + No encontrado en la Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Es posible que este transacción se haya agregado fuera de banda + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Es posible que este transacción haya tenido prioridad fuera de banda + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Este transacción entró en conflicto con otra versión en nuestro mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flujo + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Esconder diagrama + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Mostrar más + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Entradas y salidas + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Mostrar diagrama + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize ajustado + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Tiempo de bloque + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Ocultar acelerador src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7292,7 +7724,7 @@ Línea de tiempo RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7302,109 +7734,17 @@ Cronología de aceleración src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flujo - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Esconder diagrama - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Mostrar más - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Entradas y salidas - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Mostrar diagrama - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize ajustado - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Tiempo de bloque - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transacción no encontrada src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7413,127 +7753,24 @@ Esperando a que aparezca en la mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Error al cargar datos transacción. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Características - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Este transacción estaba previsto para ser incluido en bloque - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Previsto en bloque - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Este transacción fue visto en mempool antes de minado - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Visto en la Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Este transacción faltaba en nuestro mempool antes de minado - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - No encontrado en la Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Es posible que este transacción se haya agregado fuera de banda - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Es posible que este transacción haya tenido prioridad fuera de banda - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Este transacción entró en conflicto con otra versión en nuestro mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Monedas recién generadas) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7542,16 +7779,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7561,7 +7806,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7571,7 +7816,7 @@ Testigo src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7580,16 +7825,24 @@ script de canje P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7598,7 +7851,7 @@ script de testigo P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7607,7 +7860,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7616,7 +7869,7 @@ Script de salida previo src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7625,7 +7878,7 @@ Tipo de salida anterior src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7634,7 +7887,7 @@ Peg-out a src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7643,7 +7896,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7653,7 +7906,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7663,10 +7916,42 @@ Mostrar más inputs para revelar datos de tasa src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs otros inputs @@ -7897,6 +8182,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Tenencias de la Federación Liquid @@ -7923,9 +8266,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Oferta L-BTC contra las tenencias de BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7978,10 +8320,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7993,22 +8331,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Empujar por defecto: acciona: 'want', data: ['blocks', ...] para expresar lo que quiere empujar. Disponible: blocks, mempool-blocks, live-2h-chart, y stats.Empujar transacciones relaccionadas a la direccion: 'track-address': '3PbJ...bF9B' para recibir todas las nuevas transacciones que contengan la direccion como input o output. Devuelve cualquier formación de transacciones. dirección-transacciones para nuevas transacciones mempool, y bloque-transacciones para nuevas transacciones confirmadas en bloque. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Codigo de ejemplo @@ -8048,6 +8377,15 @@ API Docs API response + + Documentation + Documentación + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ Preguntas frequentes @@ -8442,7 +8780,7 @@ Vista general del canal Lightning . Ver capacidad, nodos involucrados, transacciones en cadena relacionadas, y más. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9065,6 +9403,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Explorador Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Obtén estadísticas en la red Lightning (capacidad agregada, conectividad, etc), nodos Lightning (canales, liquidez, etc) y canales Lightning (estado, tasas, etc). @@ -9180,7 +9530,7 @@ Vista general de los nodos de la red Lightning nombrados . Ver canales, capacidad, localización, estadísticas de tasas, y más. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9687,7 +10037,7 @@ Nodos Lightning en ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9699,7 +10049,7 @@ Explora todos los nodos lightning usando el [AS] ISP y mira estadísticas agregadas como el número total de nodos, capacidad total, y más para el ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9807,6 +10157,338 @@ 71 + + Immediately + Inmmediatamente + + src/app/services/time.service.ts + 71 + + + + Just now + Justo ahora + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + atrás + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + En ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + dentro de ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Después + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + antes + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee tasa @@ -9843,6 +10525,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation confirmación @@ -9902,11 +10592,11 @@ Mi Cuenta src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9915,7 +10605,7 @@ Explora src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9924,7 +10614,7 @@ Transacción de prueba src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9934,7 +10624,7 @@ Conéctate a nuestros Nodos src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9943,7 +10633,7 @@ Documentación de la API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9952,7 +10642,7 @@ Aprende src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9961,7 +10651,7 @@ ¿Qué es una mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9970,7 +10660,7 @@ ¿Qué es un explorador de bloques? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9979,7 +10669,7 @@ ¿Qué es un explorador de mempool? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9988,7 +10678,7 @@ ¿Por qué no se confirma mi transacción? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9997,7 +10687,7 @@ Más FAQs src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10006,7 +10696,7 @@ Investigación src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10015,7 +10705,7 @@ Redes src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10024,7 +10714,7 @@ Explorador Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10033,7 +10723,7 @@ Explorador de Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10042,7 +10732,7 @@ Explorador de Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10051,7 +10741,7 @@ Explorador Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10060,7 +10750,7 @@ Explorador de red Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10069,7 +10759,7 @@ Explorador Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10078,7 +10768,7 @@ Herramientas src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10087,7 +10777,7 @@ Reloj (minado) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10096,7 +10786,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10105,7 +10795,7 @@ Términos de servicio src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10115,7 +10805,7 @@ Política de Privacidad src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10125,7 +10815,7 @@ Política de Marcas src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10135,14 +10825,13 @@ Licencias de terceros src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Tu balance es demasiado bajo.Poor favor aumenta tu cuenta. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10167,21 +10856,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 aún no está finalizado y puede restablecerse en cualquier momento. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Pago por lotes src/app/shared/filters.utils.ts - 108 + 110 @@ -10189,7 +10869,7 @@ Tipos de dirección src/app/shared/filters.utils.ts - 119 + 121 @@ -10197,7 +10877,7 @@ Comportamiento src/app/shared/filters.utils.ts - 120 + 122 @@ -10205,7 +10885,7 @@ Heurística src/app/shared/filters.utils.ts - 122 + 124 @@ -10213,7 +10893,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10341,7 +11021,7 @@ Multisig de src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.fa.xlf b/frontend/src/locale/messages.fa.xlf index 07384d85a..9fa7e3872 100644 --- a/frontend/src/locale/messages.fa.xlf +++ b/frontend/src/locale/messages.fa.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 حامیان سازمانی 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ حامیان سخاوتمند src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ حامیان کاردُرست src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ حامیان پیش‌کسوت ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ پیاده‌سازی‌ها src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ متحدین جامعه src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ مترجم‌های پروژه src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ مشارکت کنندگان src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ اعضای پروژه src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ نگهدارندگان پروژه src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ با عرض پوزش، اشکالی پیش آمد! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ شوربختانه نتوانستیم این تراکنش را شتاب‌دهی کنیم. لطفا در زمان دیگری دوباره امتحان کنید. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ بستن src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ تراکنش شما src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ به اضافه () تراکنش تأییدنشده src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ اندازه مجازی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ اندازه تراکنش به بایت مجازی (شامل والدهای تأییدنشده) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ کارمزد درون-زنجیره‌ای src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ کارمزد پرداخت‌شدهٔ تراکنش (شامل والدهای تأییدنشده) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ چقدر سریع‌تر؟ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ کاهش زمان انتظار برای یک تأیید به src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ خلاصه src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ نرخ بازار بلاک بعدی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ ‏sat بر vB‏ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ کارمزد اضافه مورد نیاز تخمینی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ نرخ هدف src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ کارمزد اضافه مورد نیاز src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - کارمزد شتاب‌دهنده ممپول + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ کارمز خدمات شتاب‌دهی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ هزینه اضافه اندازه تراکنش src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ هزینه شتاب‌دهی تخمینی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ بیشینه هزینه شتاب‌دهی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ هزینه شتاب‌دهی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ موجودی در دسترس src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ برگشتن src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ شتاب‌دهی تراکنش بیت‌کوین شما؟ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ انتظار src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ انتظار می‌رود تأیید به زودی اتفاق بیفتد src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ انتظار نمی‌رود تأیید به این زودی‌ها باشد src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ به ازای مبلغ اضافی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ کاهش زمان تأیید مورد انتظار به src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - پرداخت به mempool.space برای شتاب‌دهی تراکنش .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ حساب شما بیش از این بدهکار نمی‌شود src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ پرداخت src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ خطا در بارگذاری صورتحساب src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ در حال بارگذاری صوتحساب... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - یا + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ تأیید پرداخت src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ مجموع هزینه اضافی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ با src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ در حال باگذاری روش پرداخت... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ تأیید پرداخت شما src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ در حال پردازش پرداخت شما... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ شتاب‌دهی پرداخت شما src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ در حال ارسال درخواست شتاب‌دهی شما به استخرهای استخراج همکار... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ با عرض پوزش، بیشتر از چیزی که انتظار می‌رفت به طول انجامید... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ تراکنش شما در حال شتاب‌دهی است! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. تراکنش شما برای شتاب‌دهی در استخرهای استخراج همکار ما تأیید شد. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... محاسبه هزینه... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ شخصی‌سازی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ شتاب‌دهی به حدود sat بر vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ شتاب‌دهی src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ تراکنش شما در درصد استخراج‌کننده‌ها اولویت داده می‌شود. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - ساتوشی - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block بلاک بعدی @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees کارمزد شتاب‌دهی @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ هیچ تراکنشی در این بازه زمانی شتاب‌دهی نشده است src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ در بلاک: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ حدودا در بلاک: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ ناموفق src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ هیچ شتاب‌دهی فعالی وجود ندارد src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ هیچ شتاب‌دهی اخیری وجود ندارد src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + همه + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » بیشتر » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ شتاب‌دهی نشده src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ موجودی src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ آدرس: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ دیدن تراکنش‌های ممپول، تراکنش‌های تأییدشده، موجودی و بیشتر برای آدرس src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History تاریخچه موجودی src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - همه - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent اخیر src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction از تراکنش src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ از تراکنش src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ حطا در بازکردن داده‌های آدرس. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ این آدرس تعداد زیادی تراکنش دارد. بیشتر از حدی که پیکربندی سیستم شما بتواند آن را پردازش کند. برای راه‌اندازی سیستم قوی‌تر اینجا را ببینید. همچنین می‌توانید این آدرس را در سایت ممپول مشاهده کنید: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ موجودی تأیید‌شده src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ UTXO‌های تأییدشده src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXOهای در انتظار src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ نوع src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset دارایی @@ -2581,10 +2709,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2604,11 +2728,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2624,11 +2748,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2636,7 +2760,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2662,8 +2786,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2856,7 +2979,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2868,7 +2991,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2921,37 +3044,12 @@ Mempool Goggles™ tooltip - - beta - آزمایشی - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match پالایش src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2964,7 +3062,7 @@ هر کدام src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2973,7 +3071,7 @@ سایه‌روشن src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2982,7 +3080,7 @@ کلاسیک src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2995,7 +3093,7 @@ بر اساس قدمت src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3061,15 +3159,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3077,7 +3175,7 @@ در دسترس نیست src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3086,7 +3184,7 @@ مرورگر شما این ویژگی را پشتیبانی نمی‌کند. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3135,8 +3233,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3153,12 +3251,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3175,8 +3277,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3213,7 +3315,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3252,8 +3354,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3266,22 +3376,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict متناقض src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3353,7 +3480,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3373,15 +3500,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3409,19 +3540,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3445,11 +3580,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3461,11 +3596,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3477,11 +3612,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3509,23 +3644,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3563,15 +3702,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3592,8 +3731,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3606,7 +3745,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3627,7 +3766,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3696,6 +3835,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3707,11 +3850,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3719,7 +3866,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3747,11 +3894,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3816,7 +3963,11 @@ پیش‌بینی شده src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3825,7 +3976,7 @@ واقعی src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3834,7 +3985,7 @@ بلاک پیش‌بینی شده src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3843,7 +3994,7 @@ بلاک واقعی src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3852,11 +4003,15 @@ نسخه src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3865,7 +4020,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3895,7 +4050,7 @@ بیت src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3904,7 +4059,7 @@ ریشه درخت مرکل src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3913,7 +4068,7 @@ سختی شبکه src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3929,11 +4084,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3942,7 +4097,7 @@ نانس src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3951,7 +4106,7 @@ سربرگ بلاک به صورت Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3960,11 +4115,11 @@ بررسی src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3974,23 +4129,31 @@ جزئیات src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4020,7 +4183,7 @@ خطا در بازکردن داده‌های بلاک. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4029,7 +4192,7 @@ چرا این بلاک خالی است؟ src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4038,7 +4201,11 @@ کارمزدهای شتاب‌دهی پرداخت‌شدهٔ خارج از شبکه src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4047,24 +4214,20 @@ بلاک‌ها src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4072,7 +4235,7 @@ طول src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4084,11 +4247,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4101,11 +4268,11 @@ پاداش src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4113,19 +4280,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4134,15 +4305,15 @@ کارمزدها src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4151,11 +4322,11 @@ تراکنش src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4167,11 +4338,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ دیدن بلاک‌های اخیر بیت‌کوین به همراه آمارهای پایه‌ای مانند طول بلاک، پاداش بلاک، اندازه بلاک و آمارهای دیگر. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ کپی شد! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4472,6 +4643,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4480,13 +4659,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4495,7 +4678,7 @@ تجمیع src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4503,7 +4686,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4511,7 +4694,7 @@ هم‌بازضرب src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4519,7 +4702,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4527,7 +4710,7 @@ داده src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4535,7 +4718,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4842,7 +5025,7 @@ مقدار (ساتوشی) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4851,7 +5034,7 @@ درخواست سکه‌های Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5017,7 +5200,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5132,24 +5315,28 @@ lightning.nodes-channels-world-map - - Hashrate - نرخ تولید هش + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + نرخ تولید هش src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5161,11 +5348,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5174,7 +5361,7 @@ دیدن نرخ تولید هش و سختی برای شبکه بیت‌کوین، تصویرسازی شده در طول زمان. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5182,11 +5369,11 @@ نرخ تولید هش (میانگین متحرک) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5230,11 +5417,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5247,11 +5434,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5264,53 +5451,6 @@ master-page.layer2-networks-header - - Dashboard - پیشخوان - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - نمودارها - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - مستندات - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5341,6 +5481,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5456,7 +5600,7 @@ بلاک src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5485,11 +5629,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5536,7 +5688,7 @@ در حال میخ‌کنی.. src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5585,8 +5737,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5637,9 +5789,8 @@ 163 - - L-BTC in circulation - مقدار L-BTC در گردش + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5659,48 +5810,6 @@ shared.as-of-block - - Mining Dashboard - پیشخوان استخراج - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - کاوشگر لایتنینگ - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. دیدن آمارها برای تراکنش‌های ممپول : محدوده کارمزد، اندازه تجمیعی و آمارهای بیشتر. بلاک‌های ممپول با دریافت تراکنش‌های جدید از شبکه، به صورت زنده بروز می‌شوند. @@ -5758,15 +5867,15 @@ ورود src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5797,6 +5906,18 @@ dashboard.adjustments + + Mining Dashboard + پیشخوان استخراج + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. دریافت زنده آمارهای استخراج بیت‌کوین مانند نرخ تولید هش، تنظیم سختی، پاداش‌های بلاک، سهم استخرها و آمارهای دیگر. @@ -5805,6 +5926,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) شانس استخرها (1 هفته‌ای) @@ -5823,7 +5996,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5854,7 +6027,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5880,7 +6053,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5927,11 +6100,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5970,7 +6143,7 @@ همه ماینرها src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5993,17 +6166,17 @@ blocks بلاک - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6015,15 +6188,19 @@ دیگر () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6068,11 +6245,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6081,11 +6258,11 @@ دیدن آمارهای استخر استخراج : آخرین بلاک‌های استخراج‌شده، نرخ تولید هش در طول زمان، مجموع پاداش‌های بلاک تا این لحظه، آدرس‌های coinbase شناخته‌شده و آمارهای دیگر. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6104,20 +6281,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6128,6 +6329,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6139,11 +6344,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6156,11 +6361,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6173,11 +6378,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6204,20 +6409,48 @@ برچسب coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. خطا در بازکردن داد‌ه‌های استخر. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6226,7 +6459,7 @@ هنوز داده کافی وجود ندارد src/app/components/pool/pool.component.ts - 142 + 177 @@ -6234,11 +6467,11 @@ سهم استخر src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6255,7 +6488,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6267,18 +6500,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + فهرست تراکنش‌های خام جداشده با درنگ‌نما + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + حداکثر نرخ کارمزد (sat بر vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + مجاز؟ + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + دلیل رد‌شدن + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction انتشار تراکنش src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6286,7 +6596,7 @@ تراکنش را در شبکهٔ با استفاده از چکیدهٔ آن منتشر کنید. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6326,17 +6636,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6349,7 +6683,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6443,11 +6777,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6563,6 +6897,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) وضعیت ممپول به vByte (ساتوشی بر vByte) @@ -6581,29 +6983,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - نمایش تلویزیونی - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter پالایش src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6612,7 +7001,7 @@ معکوس src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6621,7 +7010,7 @@ تراکنش vByte بر ثانیه (vB بر ثانیه) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6629,10 +7018,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + نمودارها + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. دیدن اندازه ممپول (به MvB) و تراکنش بر ثانیه (به vB بر ثانیه) تصویرسازی‌شده در طول زمان. @@ -6641,24 +7038,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - دیدن وضعیت تراکم بلاک‌ها و ممپول بیت‌کوین به صورت زنده و در یک فرم سادهٔ بهینه‌شده برای نمایش در تلویزیون. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions آزمودن تراکنش‌ها src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6672,370 +7085,10 @@ به صورت Hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - فهرست تراکنش‌های خام جداشده با درنگ‌نما - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - حداکثر نرخ کارمزد (sat بر vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - مجاز؟ - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - دلیل رد‌شدن - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - بی‌درنگ - - src/app/components/time/time.component.ts - 107 - - - - Just now - همین الان - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - پیش - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - در حدود - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - حدود - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - بعد از - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - قبل - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent فرستاده‌شده @@ -7073,11 +7126,11 @@ تخمین src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7087,11 +7140,11 @@ به این زودی‌ها نخواهد بود src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7101,7 +7154,7 @@ تأیید شده در src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7110,7 +7163,7 @@ طول بلاک src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7119,7 +7172,7 @@ تراکنش شما شتاب‌دهی شده است src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7128,7 +7181,7 @@ منتظر دیده‌شدن تراکنش شما در mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7137,7 +7190,7 @@ تراکنش شما در mempool است اما فعلا تأیید نخواهد شد. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7146,7 +7199,7 @@ تراکنش شما جلوی صف mempool قرار دارد و به زودی تأیید خواهد شد. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7155,7 +7208,7 @@ تراکنش شما به زودی در بلاک بعدی تأیید خواهد شد. src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7164,7 +7217,7 @@ تراکنش شما تأیید شد! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7173,16 +7226,29 @@ تراکنش شما با نسخه جدیدی جایگزین شده! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + خطا در بازکردن داده‌های تراکنش. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details دیدن اطلاعات بیشتر src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7195,11 +7261,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7211,44 +7277,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant نواده - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7257,18 +7311,398 @@ Ancestor والد - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + ویژگی‌ها + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + پیش‌بینی می‌شد این تراکنش در بلاک قرار بگیرد + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + پیش‌بینی‌شده در بلاک + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + این تراکنش قبل از قرار گرفتن در بلاک، در ممپول دیده شده بود + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + در mempool.space دیده شده + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + این تراکنش قبل از تأیید در ممپول ما وجود نداشت + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + در mempool.space دیده نشده + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + احتمالا این تراکنش خارج از شبکه به دست استخراج‌کننده رسیده است + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + احتمالا این تراکنش خارج از شبکه اولویت داده شده است + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + این تراکنش متناقض با نگارش دیگری از آن در ممپول ما است + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + جریان + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + پنهان‌کردن نمودار + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + بیشتر + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + ورودی‌ها و خروجی‌ها + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + نمایش نمودار + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + vsize تنظیم‌شده + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + قفل‌زمانی + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + تعداد کدهای عملیاتی امضا (Sigops) + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator پنهان‌کردن شتاب‌دهی src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7277,7 +7711,7 @@ خط‌زمان RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7287,109 +7721,17 @@ خط‌زمان شتاب‌دهی src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - جریان - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - پنهان‌کردن نمودار - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - بیشتر - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - ورودی‌ها و خروجی‌ها - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - نمایش نمودار - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - vsize تنظیم‌شده - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - قفل‌زمانی - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - تعداد کدهای عملیاتی امضا (Sigops) - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. تراکنش پیدا نشد. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7398,127 +7740,24 @@ منتظر دیده‌شدن در mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - خطا در بازکردن داده‌های تراکنش. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - ویژگی‌ها - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - پیش‌بینی می‌شد این تراکنش در بلاک قرار بگیرد - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - پیش‌بینی‌شده در بلاک - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - این تراکنش قبل از قرار گرفتن در بلاک، در ممپول دیده شده بود - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - در mempool.space دیده شده - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - این تراکنش قبل از تأیید در ممپول ما وجود نداشت - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - در mempool.space دیده نشده - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - احتمالا این تراکنش خارج از شبکه به دست استخراج‌کننده رسیده است - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - احتمالا این تراکنش خارج از شبکه اولویت داده شده است - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - این تراکنش متناقض با نگارش دیگری از آن در ممپول ما است - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (سکه‌های تازه تولید شده) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7527,16 +7766,24 @@ میخکوب src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7546,7 +7793,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7556,7 +7803,7 @@ شاهد src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7565,16 +7812,24 @@ اسکریپت نقد کردن P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7583,7 +7838,7 @@ اسکریپت شاهد P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7592,7 +7847,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7601,7 +7856,7 @@ اسکریپت خروجی قبلی src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7610,7 +7865,7 @@ نوع خروجی قبلی src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7619,7 +7874,7 @@ میخ‌کنی به src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7628,7 +7883,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7638,7 +7893,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7648,10 +7903,42 @@ نمایش ورودی‌های بیشتر برای افشای داده‌های کارمزد src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs ورودی‌های دیگر @@ -7882,6 +8169,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings دارایی‌های فدراسیون لیکوئید @@ -7907,8 +8252,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7961,10 +8306,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7976,22 +8317,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - دستور پیش‌فرض: action: 'want', data: ['blocks', ...] که نشان می‌دهد چه چیزی باید ارسال شود. گزینه‌های در دسترس: blocks, mempool-blocks, live-2h-chart و stats. دستورهای مربوط به آدرس: 'track-address': '3PbJ...bF9B' جهت دریافت تمام تراکنش‌های جدیدی که خروجی یا ورودی‌های آنها شامل این آدرس می‌شود. آرایه‌ای از تراکنش‌ها برمی‌گرداند. address-transactions برای تراکنش‌های جدید ممپول و block-transactions برای تراکنش‌های بلاک تایید شده‌ی جدید. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example نمونه کد @@ -8031,6 +8363,15 @@ API Docs API response + + Documentation + مستندات + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ سوالات متداول @@ -8425,7 +8766,7 @@ کانال لایتنینگ در یک نگاه. دیدن ظرفیت کانال، گره‌های لایتنینگ درگیر، تراکنش‌های در زنجیره مرتبط، اطلاعات بیشتر. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9048,6 +9389,18 @@ lightning.connectivity-ranking + + Lightning Explorer + کاوشگر لایتنینگ + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). دریافت آمارهای شبکهٔ لایتنینگ (ظرفیت تجمیعی، وضعیت اتصال و غیره)، گره‌های لایتنینگ (کانال‌ها، نقدینگی‌ها و غیره) و کانال‌های لایتنینگ (وضعیت، کارمزدها و غیره). @@ -9163,7 +9516,7 @@ گره شبکهٔ لایتنینگ به نام در یک نگاه. دیدن کانال‌ها، ظرفیت، موقعیت مکانی، وضعیت کارمزد و اطلاعات بیشتر. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9670,7 +10023,7 @@ گره‌های لایتنینگ این ISP‏: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9682,7 +10035,7 @@ تمام گره‌های لایتنینگ بیت‌کوین که از تأمین کنندهٔ اینترنت [ AS] استفاده می‌کنند را مرور کنید و امارهای تجمیعی مانند تعداد کل گره‌ها، مجموع ظرفیت آن را ببینید. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9790,6 +10143,338 @@ 71 + + Immediately + بی‌درنگ + + src/app/services/time.service.ts + 71 + + + + Just now + همین الان + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + پیش + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + در حدود + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + حدود + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + بعد از + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + قبل + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee کارمزد @@ -9826,6 +10511,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation تأیید @@ -9885,11 +10578,11 @@ حساب من src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9898,7 +10591,7 @@ کاوش src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9907,7 +10600,7 @@ آزمودن تراکنش src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9917,7 +10610,7 @@ اتصال به گره‌های ما src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9926,7 +10619,7 @@ مستندات رابط برنامه‌نویسی کاربردی (API) src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9935,7 +10628,7 @@ یادگیری src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9944,7 +10637,7 @@ ممپول چیست؟ src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9953,7 +10646,7 @@ کاوشگر بلاک چیست؟ src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9962,7 +10655,7 @@ کاوشکر ممپول چیست؟ src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9971,7 +10664,7 @@ چرا تراکنشم تأیید نمیشه؟ src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9980,7 +10673,7 @@ پرسش‌های متداول دیگر » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9989,7 +10682,7 @@ ممپول پژوهی src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9998,7 +10691,7 @@ شبکه‌ها src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10007,7 +10700,7 @@ کاوشگر شبکهٔ اصلی src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10016,7 +10709,7 @@ کاوشگر شبکهٔ آزمایشی Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10025,7 +10718,7 @@ کاوشگر شبکهٔ آزمایشی Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10034,7 +10727,7 @@ کاوشگر شبکهٔ آزمایشی Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10043,7 +10736,7 @@ کاوشگر شبکهٔ آزمایشی Liquid src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10052,7 +10745,7 @@ کاوشگر شبکهٔ Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10061,7 +10754,7 @@ ابزارها src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10070,7 +10763,7 @@ ساعت (استخراج‌شده) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10079,7 +10772,7 @@ حقوقی src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10088,7 +10781,7 @@ شرایط خدمات src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10098,7 +10791,7 @@ سیاست حریم‌خصوصی src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10108,7 +10801,7 @@ سیاست نشان‌بازرگانی src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10118,14 +10811,13 @@ مجوزهای خدمات ثالث src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - موجودی شما کافی نیست. لطفا موجودی حساب خود را افزایش دهید. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10150,21 +10842,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - شبکهٔ Testnet4 هنوز نهایی نشده است و ممکن است بازنشانی بشود. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment پرداخت دسته‌ای src/app/shared/filters.utils.ts - 108 + 110 @@ -10172,7 +10855,7 @@ انواع آدرس src/app/shared/filters.utils.ts - 119 + 121 @@ -10180,7 +10863,7 @@ رفتار src/app/shared/filters.utils.ts - 120 + 122 @@ -10188,7 +10871,7 @@ مکاشفات src/app/shared/filters.utils.ts - 122 + 124 @@ -10196,7 +10879,7 @@ تنظیمات امضاء Sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10324,7 +11007,7 @@ چند امضایی از src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.fi.xlf b/frontend/src/locale/messages.fi.xlf index efedeb2f7..e541f12ae 100644 --- a/frontend/src/locale/messages.fi.xlf +++ b/frontend/src/locale/messages.fi.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Yrityssponsorit 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Valas sponsorit src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad sponsorit src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG-sponsorit ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Yhteisön integraatiot src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Yhteisöliittoumat src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Projektin kääntäjät src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Projektin avustajat src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Projektin jäsenet src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Projektin ylläpitäjät src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Pahoittelut, jokin meni pieleen! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Emme pystyneet nopeuttamaan tätä siirtotapahtumaa. Yritä myöhemmin uudelleen. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Sulje src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Transaktiosi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Lisäksi vahvistamatonta kantasiirtoa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuaalikoko src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Tämän tapahtuman koko vbyteinä (mukaan lukien vahvistamattomat kantasiirrot) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ salamakaista kulut src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Tämän tapahtuman yhteydessä jo maksetut siirtokulut (mukaan lukien vahvistamattomat edeltäjät) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Kuinka paljon nopeammin? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Tämä lyhentää odotettavissa olevaa odotusaikaa ensimmäiseen vahvistukseen asti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Yhteenveto src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Seuraavan lohkon markkinakurssi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Arvioitu lisämaksu vaaditaan src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Tavoitetaso src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Lisämaksu vaaditaan src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ maksut + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Nopeutuksen palvelumaksu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Transaktion kokolisämaksu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Arvioidut nopeutuskustannukset src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Nopeutuksen enimmäiskustannukset src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Kiihdytyskustannukset src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Käytettävissä oleva saldo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Mene takaisin src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Nopeuta Bitcoin-siirtoasi? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Odota src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Vahvistusta odotetaan src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Vahvistusta ei ole odotettavissa lähiaikoina src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Lisämaksusta src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Odotettavissa olevan vahvistusajan lyhentäminen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Maksu mempool.space:lle txid:n kiihdyttämisestä .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Tililtäsi veloitetaan enintään src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Maksa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Laskun lataaminen epäonnistui src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Laskun lataaminen... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - TAI + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Vahvista maksusi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Lisäkustannukset yhteensä src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ kanssa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Maksutavan lataaminen... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Maksun vahvistaminen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Käsittelemme maksuasi... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Siirtotapahtuman nopeuttaminen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Kiihdytyksen vahvistaminen louhintapoolikumppaneidemme kanssa... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...anteeksi, tämä kestää odotettua kauemmin... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Siirtotapahtumaasi nopeutetaan! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Louhintapoolikumppanimme ovat hyväksyneet siirtotapahtumasi kiihdytettäväksi. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Kustannusten laskeminen... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ muokkaa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Kiihdytä ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Kiihdytä src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Siirtotapahtumasi asetetaan tärkeysjärjestykseen jopa % louhijoista. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Seuraava lohko @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Nopeutusmaksut @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Ei nopeutettua siirtotapahtumaa tällä aikataululla src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ Lohkossa: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Noin lohko: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Epäonnistui src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Aktiivisia nopeutuksia ei ole src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Viimeaikaisia nopeutuksia ei ole tapahtunut src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + kaikki + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Näytä lisää » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ ei kiihdytetä src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Osoite: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Näet mempool-transaktiot, vahvistetut transaktiot, saldon ja paljon muuta seuraavien osalta osoite . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Saldohistoria src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - kaikki - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent viimeaikaiset src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction / transaktio src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ / transaktiota src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Virhe osoitetietojen lataamisessa. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Tässä osoitteessa on liikaa tapahtumia, enemmän kuin taustajärjestelmäsi pystyy käsittelemään. Katso lisää osoitteesta vahvemman taustajärjestelmän luominen. Harkitse sen sijaan tämän osoitteen katsomista Mempoolin virallisella verkkosivustolla: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Vahvistettu saldo src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Vahvistetut UTXO:t src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ Odottavat UTXO:t src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Tyyppi src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Omaisuuserä @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Tutustu kaikkiin Liquid-verkossa liikkeeseen laskettuihin omaisuuseriin, kuten L-BTC, L-CAD, USDT ja muihin. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Osuma src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Kaikki src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Sävy src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Klassinen src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Ikä src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ ei saatavilla src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Selaimesi ei tue tätä ominaisuutta. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Ristiriita src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Odotettu src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Todellinen src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Odotettu lohko src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Todellinen lohko src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Versio src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bitit src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Merkle-juuri src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Vaikeus src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonssi src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Lohkon järjestysnumero heksa src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Tarkastus src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Yksityiskohdat src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Virhe lohkotietojen lataamisessa. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Miksi tämä lohko on tyhjä? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Kaistan ulkopuolella maksetut kiihdytysmaksut src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Lohkot src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Järjestysnumero src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Palkkio src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Siirtomaksut src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ Siirtoa src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Katso viimeisimmät Liquid-lohkot perustilastoineen, kuten lohkon korkeus, lohkon koko ja muuta. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Katso viimeisimmät Bitcoin-lohkot yhdessä perustietojen kanssa, kuten lohkon korkeus, lohkon palkkio, lohkon koko ja muut. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Kopioitu! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X Aikajana src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Konsolidointi src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Tiedot src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Määrä (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Pyydä Testnet4 kolikoita src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Laskentateho + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Laskentateho src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Katso laskentateho ja vaikeus Bitcoin-verkossa visualisoituna ajan kuluessa. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Laskentateho (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Kojelauta - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Kaaviot - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentaatio - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust vanhentunut @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ lohkot src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Irrotus käynnissä... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Niiden kertojen lukumäärä, jolloin federaation BTC-omistukset putoavat alle 95 % L-BTC:n kokonaistarjonnasta + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - Käytössä olevat L-BTC + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Louhintamittaristo - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Salamaverkkoselain - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Hana - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Katso tilastoja tapahtumista mempoolissa: kulualue, kokonaiskoko ja muuta. Mempool-lohkot päivittyvät reaaliajassa, kun verkko vastaanottaa uusia siirtotapahtumia. @@ -5774,15 +5881,15 @@ Kirjaudu sisään src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Louhintamittaristo + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Hanki reaaliaikaiset Bitcoin-louhintatilastot, kuten laskentateho, vaikeuden säätö, lohkopalkkiot, poolin hallitsevuus ja paljon muuta. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Poolien onni (1vk) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Kaikki louhijat src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks lohkoa - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Muu () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Katso louhintapoolin tilastoja : viimeisimmät louhitut lohkot, laskentateho ajan kuluessa, kokonaispalkkio tähän mennessä, tunnetut coinbase-osoitteet ja paljon muuta. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Kolikonluonti tunniste src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Virhe ladattaessa poolin tietoja. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Ei vielä tarpeeksi dataa src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Poolin dominanssi src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Pilkuilla eroteltu luettelo raakasiirroista + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Siirtomaksun enimmäishinta (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Sallittu? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Hylkäämisen syy + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Lähetä siirto src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Lähetä tapahtuma verkkoon käyttäen tapahtuman tiivistettä. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool vByte:inä (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV näkymä - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Suodatin src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Käänteinen src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Siirtotapahtuma vByte:ä sekunnissa (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Cap-poikkeamat src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Kaaviot + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Näe mempoolin koko (MvB) ja siirtotapahtumat per sekuntti (vB/s) visualisoituna ajan kuluessa. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Katso Bitcoin-lohkot ja mempoolin ruuhkautuminen reaaliajassa yksinkertaistetussa muodossa, joka sopii täydellisesti televisioon. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testisiirrot src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Raaka heksa src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Pilkuilla eroteltu luettelo raakasiirroista - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Siirtomaksun enimmäishinta (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Sallittu? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Hylkäämisen syy - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Heti - - src/app/components/time/time.component.ts - 107 - - - - Just now - Juuri nyt - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - sitten - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - sisällä ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - jälkeen - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - ennen - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Lähetetty @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Ei ihan pian src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Vahvistettu src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Lohko korkeus src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Siirtotapahtumaasi on nopeutettu src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Odotetaan, että siirtotapahtumasi näkyy mempoolissa src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Siirtotapahtumasi on mempoolissa, mutta sitä ei vahvisteta vähään aikaan. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Siirtotapahtumasi on lähellä mempoolin kärkeä, ja sen odotetaan vahvistuvan pian. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Siirtotapahtumasi odotetaan vahvistuvan seuraavassa lohkossa src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Siirtotapahtumasi on vahvistettu! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Siirtotapahtumasi on korvattu uudemmalla versiolla! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Siirtotapahtumatietojen lataamisessa tapahtui virhe. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Katso lisätietoja src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Kolikonluonti + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Verso - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Juuri - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Ominaisuudet + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Kolikonluonti + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Tämä siirtotapahtuma oli suunniteltu sisällytettäväksi lohkoon + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Odotettu lohkossa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Tämä siirtotapahtuma nähtiin mempoolissa ennen louhintaa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Nähty Mempoolissa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Tämä siirtotapahtuma puuttui mempoolistamme ennen louhintaa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Ei näkynyt Mempoolissa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Tämä siirtotapahtuma on saatettu lisätä kaistan ulkopuolella + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Tämä siirtotapahtuma on saatettu priorisoida kaistan ulkopuolella + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Tämä siirtotapahtuma oli ristiriidassa toisen mempoolissa olevan version kanssa + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Virtaus + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Piilota kaavio + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Näytä enemmän + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Syötteet & Tulosteet + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Näytä kaavio + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Muokattu vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Lukitusaika + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Piilota kiihdytin src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF aikajana src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Kiihdytyksen aikajana src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Virtaus - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Piilota kaavio - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Näytä enemmän - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Syötteet & Tulosteet - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Näytä kaavio - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Muokattu vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Lukitusaika - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Siirtotapahtumaa ei löydy. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Odotetaan sen ilmestymistä mempooliin... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Siirtotapahtumatietojen lataamisessa tapahtui virhe. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Ominaisuudet - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Tämä siirtotapahtuma oli suunniteltu sisällytettäväksi lohkoon - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Odotettu lohkossa - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Tämä siirtotapahtuma nähtiin mempoolissa ennen louhintaa - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Nähty Mempoolissa - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Tämä siirtotapahtuma puuttui mempoolistamme ennen louhintaa - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Ei näkynyt Mempoolissa - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Tämä siirtotapahtuma on saatettu lisätä kaistan ulkopuolella - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Tämä siirtotapahtuma on saatettu priorisoida kaistan ulkopuolella - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Tämä siirtotapahtuma oli ristiriidassa toisen mempoolissa olevan version kanssa - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Äskettäin luodut kolikot) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Kiinnitä src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Todistaja src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH lunastusskripti src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR taprootskripti src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSH todistajaskripti src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Edellinen tulosteskripti src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Edellinen tulostetyyppi src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Irrotetaan src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Näytä lisää syötteitä paljastaaksesi siirtomaksutiedot src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs muut syötteet @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Federation omistukset @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC-tarjonta BTC Holdingsia vastaan + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Oletus työntö: action: 'want', data: ['blocks', ...] ilmaisemaan, mitä haluat työnnettävän. Käytettävissä: blocks, mempool-blocks, live-2h-chart ja stats.Työnnä osoitteeseen liittyvät transaktiot: 'track-address': '3PbJ...bF9B' vastaanottaa kaikki uudet transaktiot, jotka sisältävät kyseisen osoitteen syötteenä tai tulosteena. Palauttaa transaktioiden joukon. address-transactions uusille mempool-transaktioille ja block-transactions uusille lohkon vahvistetuille transaktioille. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Koodiesimerkki @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentaatio + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ UKK @@ -8444,7 +8782,7 @@ Yleiskatsaus Salamakanavalle . Katso kanavan kapasiteetti, mukana olevat salamasolmut, pääketjuun liittyvät siirtotapahtumat ja paljon muuta. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Salamaverkkoselain + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Hanki tilastoja Salamaverkosta (kokonaiskapasiteetti, yhteydet jne.), Salamasolmuista (kanavat, likviditeetti jne.) ja Salamakanavista (tila, maksut jne.). @@ -9182,7 +9532,7 @@ Yleiskatsaus Salamaverkon solmulle nimeltä . Katso kanavat, kapasiteetti, sijainti, maksutiedot ja muuta. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Palveluntarjoajien salamasolmut: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Selaa kaikkia Bitcoin Salamasolmuja käyttäen [AS] -ISP:tä ja näe yhteenvetotilastot, kuten solmujen kokonaismäärä, kokonaiskapasiteetti ja muuta ISP:lle. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Heti + + src/app/services/time.service.ts + 71 + + + + Just now + Juuri nyt + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + sitten + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + sisällä ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + jälkeen + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + ennen + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee siirtomaksu @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation varmenne @@ -9904,11 +10594,11 @@ Oma tili src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Tutki src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Testi siirtotapahtuma src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Yhdistä solmuihimme src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ API-dokumentaatio src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Opi src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Mikä on mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Mikä on lohkoselain? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Mikä on mempool-selain? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Miksi siirtoani ei vahvisteta? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Lisää usein kysyttyjä kysymyksiä » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Tutkimus src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Verkot src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Pääverkkoselain src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Testnet3-selain src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Testnet4-selain src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Signet-selain src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Liquid-testiverkkoselain src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Liquid-selain src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Työkalut src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Kello (Louhittu) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Lainsäädäntö src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Käyttöehdot src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Tietosuojakäytäntö src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Tavaramerkkisäännöt src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Kolmannen osapuolen lisenssit src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Saldosi on liian pieni.Täytä tiliäsi . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 ei ole vielä viimeistelty, ja se voidaan nollata milloin tahansa. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Erämaksu src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Osoitetyypit src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Käyttäytyminen src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heuristiikat src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighashin liput src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig / src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.fr.xlf b/frontend/src/locale/messages.fr.xlf index aac7eead9..8fbd882b0 100644 --- a/frontend/src/locale/messages.fr.xlf +++ b/frontend/src/locale/messages.fr.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Entreprises sponsors 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Sponsors Whale src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Sponsors Chad src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Sponsors OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Intégrations communautaires src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Alliances communautaires src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Traducteurs src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Contributeurs au projet src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Membres du projet src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Mainteneurs de projet src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Désolé, quelque chose s'est mal passé! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Nous n'avons pas pu accélérer cette transaction. Veuillez réessayer plus tard. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Fermer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Votre transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus ancêtre(s) non confirmé(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Taille virtuelle src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Taille en vB de cette transaction (y compris les ancêtres non confirmés) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Frais intra-bande src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Frais déjà payés par cette transaction (y compris les ancêtres non confirmés) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ À quel point plus rapide ? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Cela réduira votre temps d'attente prévu jusqu'à la première confirmation à src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Résumé src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Frais du block suivant src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Estimation des frais supplémentaires requis src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Frais ciblé src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Frais supplémentaires requis src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Frais de Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Frais de service d'accélération src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Supplément sur la taille de transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Coût d’accélération estimé src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Coût d'accélération maximum src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Coût de l'accélération src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Solde disponible src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Retour src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Accélérer votre transaction Bitcoin ? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Attendre src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Confirmation attendue src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Confirmation pas attendue de si tôt src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Pour un supplément de src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Nous réduisons le temps de confirmation attendu à src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Paiement à mempool.space pour l'accélération de la txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Votre compte sera débité au maximum de src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Payer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Échec du chargement de la facture src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Chargement de la facture... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - OU + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Confirmez votre paiement src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Coût supplémentaire total src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ avec src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Chargement du mode de paiement... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Confirmation de votre paiement src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Nous traitons votre paiement... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Accélération de votre transaction en cours src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Nous confirmons votre accélération auprès de nos pools de minage partenaires... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...désolé, cela prend plus de temps que prévu... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Votre transaction est accélérée ! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Votre transaction a été acceptée par nos pools de minage partenaires pour être accélérée. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Calcul du coût... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ personnaliser src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Accélérer à ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Accélérer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Votre transaction sera priorisée par % des mineurs au plus. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - Sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Bloc suivant @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Frais d'accélération @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Aucune transaction accélérée pour cette période src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ Au bloc : src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Autour du bloc : src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Échoué src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Il n'y a pas d'accélérations actives src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Il n'y a pas d'accélérations récentes src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + tout + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Voir plus » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ pas en train d'accélérer src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Solde src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adresse: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Consultez les transactions dans le mempool, les transactions confirmées, le solde, et plus pour l'adresse . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Historique du solde src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - tout - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent récent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction de transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ des transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Erreur lors du chargement des données de l'adresse src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Il y a trop de transactions sur cette adresse, plus que ce que votre backend peut gérer. En savoir plus sur la configuration d'un backend plus puissant. Vous pouvez aussi consulter cette adresse sur le site officiel Mempool : src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Solde confirmé src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ UTXOs confirmés src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXOs en attente src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Type src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Actif @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Explorez tous les actifs émis sur le réseau Liquid comme L-BTC, L-CAD, USDT, et plus encore. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - bêta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Correspond src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Quelconque src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Teinte src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Classique src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Âge src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ pas disponible src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Votre navigateur ne prend pas en charge cette fonctionnalité. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflit src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Attendu src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Réel src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Bloc attendu src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Bloc réel src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Version src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ racine de Merkle src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Difficulté src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Hex d'en-tête de bloc src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Détails src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Erreur lors du chargement du bloc. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Pourquoi ce bloc est-il vide ? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Frais d'accélération payés hors bande src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Blocs src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Hauteur src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Récompense src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Frais src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Consultez les blocs Liquid les plus récents ainsi que les statistiques de base telles que la hauteur et la taille des blocs, etc. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Consultez les blocs Bitcoin les plus récents ainsi que les statistiques de base telles que la hauteur du bloc, la récompense du bloc, la taille du bloc, etc. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Copié! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ Fil d'actualité X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Données src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Montant (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Demander des bitcoins Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Taux de hachage + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Taux de hachage src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Consultez le taux de hachage et la difficulté du réseau Bitcoin visualisés au fil du temps. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Taux de hachage (moy) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Tableau de bord - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Graphiques - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-dust expirée @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ blocs src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg-Out en cours... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Nombre de fois où les avoirs en BTC de la Fédération tombent en dessous de 95% de l'offre totale de L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC en circulation + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Tableau de bord Minage - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Explorateur Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Robinet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Consultez les statistiques des transactions dans la mempool: plage de frais, taille globale, etc. Les blocs mempool sont mis à jour en temps réel à mesure que le réseau reçoit de nouvelles transactions. @@ -5774,15 +5881,15 @@ Se connecter src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Tableau de bord Minage + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Obtenez des statistiques minières Bitcoin en temps réel telles que le taux de hachage, l'ajustement de la difficulté, les récompenses de bloc, la domination du pool, etc. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Chance des pools (1 semaine) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Tous les mineurs src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks blocs - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Autre () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Consultez les statistiques de la pool de minage  : les blocs extraits les plus récents, le taux de hachage au fil du temps, la récompense totale du bloc à ce jour, les adresses coinbase connues, et plus encore. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Label coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Erreur lors du chargement des données du pool de minage src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Pas encore assez de données src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Dominance de la pool de minage src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Liste de transactions brutes séparées par des virgules + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Frais maximum (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Autorisé? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Motif du rejet + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Transaction de diffusion src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Diffusez une transaction sur le réseau en utilisant le hachage de la transaction. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool par vBytes (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Vue TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtrer src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Inverser src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Transaction vBytes par seconde (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Valeurs aberrantes du plafond src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Graphiques + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Voir la taille de la mempool (en MvB) et les transactions par seconde (en vB/s) visualisées au fil du temps. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Visualisez les blocs Bitcoin et la congestion de la mempool en temps réel dans un format simplifié parfait pour une TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Tester les transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Hexadecimal brut src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Liste de transactions brutes séparées par des virgules - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Frais maximum (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Autorisé? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Motif du rejet - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Immédiatement - - src/app/components/time/time.component.ts - 107 - - - - Just now - À l'instant - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Il y a - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Dans ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - dans ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Après - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - avant - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Envoyé @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Pas de sitôt src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Confirmé à src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Hauteur du bloc src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Votre transaction a été accélérée src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ En attente que votre transaction apparaisse dans la mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Votre transaction est dans la mempool, mais elle ne sera pas confirmée avant un certain temps. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Votre transaction se trouve en haut de la mempool et devrait être confirmée bientôt. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Votre transaction devrait être confirmée dans le prochain bloc src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Votre transaction est confirmée ! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Votre transaction a été remplacée par une version plus récent ! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Erreur lors du chargement des données de transaction. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Voir plus de détails src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Ancêtre - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Fonctionnalités + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Cette transaction était prévue dans le bloc + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Attendue dans le bloc + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Cette transaction a été vue dans la mempool avant d'être minée + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Vu dans la mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Cette transaction n'était pas dans notre mempool avant d'être minée + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Pas vu dans la mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Cette transaction a peut-être été ajoutée hors bande + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Cette transaction a peut-être été priorisée hors bande + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Cette transaction est en conflit avec une autre version dans notre mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flux + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Masquer le diagramme + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Montrer plus + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Entrées & Sorties + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Afficher le diagramme + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize ajustée + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Temps de verrouillage + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Masquer l'accélérateur src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ Chronologie RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Chronologie de l'accélération src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flux - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Masquer le diagramme - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Montrer plus - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Entrées & Sorties - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Afficher le diagramme - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize ajustée - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Temps de verrouillage - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transaction introuvable. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Veuillez patienter pendant que nous attendons qu'elle apparaisse dans le mempool src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Erreur lors du chargement des données de transaction. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Fonctionnalités - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Cette transaction était prévue dans le bloc - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Attendue dans le bloc - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Cette transaction a été vue dans la mempool avant d'être minée - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Vu dans la mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Cette transaction n'était pas dans notre mempool avant d'être minée - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Pas vu dans la mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Cette transaction a peut-être été ajoutée hors bande - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Cette transaction a peut-être été priorisée hors bande - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Cette transaction est en conflit avec une autre version dans notre mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nouveaux bitcoins générés) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Témoin src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ Script de rachat P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ Script témoin P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Script de sortie précédent src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Script de sortie précédent src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Peg-out vers src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Afficher plus d'entrées pour révéler les données de frais src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs autres entrées @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Avoirs de la Fédération Liquid @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Offre de L-BTC contre les avoirs de BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Pousser par défaut : action: 'want', data: ['blocks', ...] pour exprimer ce que vous voulez pousser. Disponible: blocks, mempool-blocks, live-2h-chart, et stats.Pousse les transactions liées à l'adresse : 'track-address': '3PbJ...bF9B' pour recevoir toutes les nouvelles transactions contenant cette adresse en entrée ou en sortie. Renvoie un tableau de transactions. address-transactions pour les nouvelles transactions mempool, et block-transactions pour les nouvelles transactions confirmées en bloc. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Exemple de code @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Documentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8782,7 @@ Présentation du canal Lightning . Consultez la capacité du canal, les nœuds Lightning impliqués, les transactions en chaîne associées, et bien plus encore. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Explorateur Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Obtenez des statistiques sur le réseau Lightning (capacité globale, connectivité, etc.), les nœuds Lightning (canaux, liquidité, etc.) et les canaux Lightning (statut, frais, etc.). @@ -9182,7 +9532,7 @@ Présentation du nœud de réseau Lightning nommé . Consultez les chaînes, la capacité, l’emplacement, les statistiques de frais et bien plus encore. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Nœuds Lightning sur le FAI : [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Parcourez tous les nœuds Bitcoin Lightning à l'aide du FAI [AS] et consultez les statistiques globales telles que le nombre total de nœuds, la capacité totale, et plus encore pour le FAI. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Immédiatement + + src/app/services/time.service.ts + 71 + + + + Just now + À l'instant + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Il y a + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Dans ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + dans ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Après + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + avant + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee frais @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation confirmation @@ -9904,11 +10594,11 @@ Mon compte src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Explorer src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Tester une transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Connectez-vous à nos nœuds src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ Documentation API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Apprendre src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Qu'est-ce qu'une mempool ? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Qu'est-ce qu'un explorateur de blocs ? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Qu’est-ce qu’un explorateur mempool ? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Pourquoi ma transaction n'est-elle pas confirmée ? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Voir plus » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Recherche src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Réseaux src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Explorateur Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Explorateur Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Explorateur Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Explorateur Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Explorateur Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Explorateur Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Outils src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Horloge (trouvé) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Légal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Conditions d'utilisation src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Politique de confidentialité src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Politique en matière de marques src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Licences tierces src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Votre solde est trop bas.Veuillez recharger votre compte . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 n'est pas encore finalisé et peut être réinitialisé à tout moment. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Paiement groupé src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Types d'adresses src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Comportement src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heuristique src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Drapeaux Sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multi-signature de src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.he.xlf b/frontend/src/locale/messages.he.xlf index 9bbf58f02..a0105b4aa 100644 --- a/frontend/src/locale/messages.he.xlf +++ b/frontend/src/locale/messages.he.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 נותני חסות ארגוניים 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ תומכים לוויתנים src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ תומך צ׳אד src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ נותני חסות מקוריים ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ שיתופי פעילות קהילתיים src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ בני ברית מהקהילה src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ מתרגמי הפרוייקט src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ תורמי הפרוייקט src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ חברי צוות הפרוייקט src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ מתחזקי הפרוייקט src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -419,7 +431,7 @@ מתנצלים, משהו השתבש! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -428,7 +440,7 @@ לא היה ביכולתנו להאיץ טרנזקציה זו. אנא נסי מאוחר יותר. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -437,11 +449,11 @@ סגור src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -450,7 +462,7 @@ הטרנזקציה שלך src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -459,7 +471,7 @@ ועוד טרנזקציהו(ת) שטרם אושרו קודמות src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -468,7 +480,7 @@ גודל וירטואלי src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -479,12 +491,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -493,7 +509,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -501,7 +517,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -510,55 +526,87 @@ סאטושיז src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -568,6 +616,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -626,7 +694,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -635,7 +703,7 @@ כמה מהר יותר? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -643,7 +711,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -652,7 +720,7 @@ סיכום src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -661,7 +729,7 @@ שיעור שוק הבלוק הבא src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -670,11 +738,11 @@ סאט/בית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -692,7 +760,7 @@ עמלה נוספת משוערת נדרשת src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -701,7 +769,7 @@ שיעור מטרה src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -710,16 +778,15 @@ עמלה נוספת נדרשת src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - עמלות מאיץ הממפול + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -728,7 +795,7 @@ עמלת שירות האצה src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -736,7 +803,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -745,7 +812,7 @@ עלות האצה משוערת src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -754,7 +821,7 @@ עלות האצה מקסימלית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -763,7 +830,7 @@ עלות האצה src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -772,7 +839,7 @@ מאזן זמין src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -781,15 +848,15 @@ חזור אחורה src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -798,7 +865,7 @@ להאיץ את טרנזקצית הביטקוין? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -807,7 +874,7 @@ המתן src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -816,11 +883,11 @@ אישור צפוי src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -829,7 +896,7 @@ אישור לא צפוי בזמן הקרוב src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -838,7 +905,7 @@ עבור תוספת src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -847,19 +914,19 @@ צמצום זמן אישור צפוי ל src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -868,7 +935,7 @@ חשבונך יחויב בלא יותר מ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -877,19 +944,19 @@ שלם src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -899,7 +966,7 @@ כשל בטעינת חשבונית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -908,16 +975,15 @@ טוען חשבונית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - או + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -926,7 +992,7 @@ מאשר את התשלום שלך src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -935,7 +1001,7 @@ עלות תוספת כוללת src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -944,7 +1010,7 @@ עם src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -953,7 +1019,7 @@ טוען אפשרות תשלום... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -962,7 +1028,7 @@ מאמת תשלום src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -971,7 +1037,7 @@ מעבד תשלום... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -980,7 +1046,7 @@ מאיץ את הטרנזקציה שלך src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -989,7 +1055,7 @@ מאשר את ההאצה שלך עם בריכות הכרייה השותפות שלנו... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -998,7 +1064,7 @@ מתנצלים, זה לוקח יותר זמן מהמצופה... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1007,25 +1073,57 @@ הטרנזקציה שלך מואצת כעת! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. הטרנזקציה שלך התקבלה להאצה ע״י בריכות הכרייה השותפות שלנו. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... מחשב עלות... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1034,7 +1132,7 @@ התאמה אישית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1043,7 +1141,7 @@ האץ ל~ סאט/בית src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1052,15 +1150,11 @@ האץ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1070,60 +1164,10 @@ הטרנזקציה שלך תתועדף בעד % מהכורים src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - סאט - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block הבלוק הבא @@ -1143,6 +1187,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1203,7 +1251,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1226,12 +1274,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1269,27 +1317,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1302,11 +1350,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1322,11 +1370,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1366,12 +1414,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1408,12 +1456,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1441,8 +1489,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1461,6 +1509,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees עמלות האצה @@ -1470,7 +1530,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1483,7 +1543,7 @@ אין טרנזקציות מואצות לחלון זמן זה src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1491,7 +1551,7 @@ בבלוק: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1511,7 +1571,7 @@ סביב בלוק: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1583,6 +1643,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1676,12 +1740,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1751,11 +1819,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1772,7 +1840,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1792,7 +1860,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1801,7 +1869,7 @@ אין האצות פעילות src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1810,7 +1878,7 @@ אין האצות אחרונות src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1872,6 +1940,19 @@ mining.all-time + + all + הכל + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » צפה בעוד » @@ -1879,6 +1960,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1913,10 +1998,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1942,7 +2023,7 @@ לא מאיץ src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1981,7 +2062,7 @@ מאזן src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1989,15 +2070,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2089,7 +2174,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2110,7 +2195,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2123,7 +2208,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2145,19 +2234,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2167,6 +2256,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2187,7 +2280,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2211,7 +2304,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2228,61 +2321,80 @@ כתובת: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History היסטוריית מאזן src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - הכל - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent לאחרונה src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction מ טרנזקציה src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2291,7 +2403,7 @@ מ טרנזקציות src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2300,11 +2412,11 @@ שגיאה בטעינת נתוני כתובת. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2312,7 +2424,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2321,7 +2433,11 @@ מאזן מאושר src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2329,7 +2445,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2337,7 +2457,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2346,18 +2466,27 @@ סוּג src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset נכס @@ -2563,10 +2692,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2586,11 +2711,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2606,11 +2731,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2618,7 +2743,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2644,7 +2769,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2834,7 +2959,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2846,7 +2971,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2896,37 +3021,12 @@ Mempool Goggles™ tooltip - - beta - בטא - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match התאמה src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2939,7 +3039,7 @@ כלשהו src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2948,7 +3048,7 @@ לצבוע src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2957,7 +3057,7 @@ קלאסי src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2970,7 +3070,7 @@ גיל src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3035,15 +3135,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3051,7 +3151,7 @@ לא זמין src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3059,7 +3159,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3108,8 +3208,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3126,12 +3226,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3148,8 +3252,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3186,7 +3290,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3223,8 +3327,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3237,21 +3349,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3321,7 +3450,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3341,15 +3470,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3377,19 +3510,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3413,11 +3550,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3428,11 +3565,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3443,11 +3580,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3475,23 +3612,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3529,15 +3670,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3558,8 +3699,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3571,7 +3712,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3591,7 +3732,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3658,6 +3799,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3669,11 +3814,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3681,7 +3830,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3709,11 +3858,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3778,7 +3927,11 @@ צפוי src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3787,7 +3940,7 @@ בפועל src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3796,7 +3949,7 @@ בלוק צפוי src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3805,7 +3958,7 @@ בלוק בפועל src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3814,11 +3967,15 @@ גרסה src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3827,7 +3984,7 @@ טאפרוט src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3857,7 +4014,7 @@ ביטים src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3866,7 +4023,7 @@ שורש מרקל src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3875,7 +4032,7 @@ קושי src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3891,11 +4048,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3904,7 +4061,7 @@ תוספתא src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3913,7 +4070,7 @@ קידוד כותר הבלוק src/app/components/block/block.component.html - 300 + 307 block.header @@ -3922,11 +4079,11 @@ בדיקה src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3936,23 +4093,31 @@ פרטים src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3981,7 +4146,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3990,7 +4155,7 @@ למה בלוק זה ריק? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3998,7 +4163,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4007,24 +4176,20 @@ בלוקים src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4032,7 +4197,7 @@ גובה src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4044,11 +4209,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4061,11 +4230,11 @@ פרס src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4073,19 +4242,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4094,15 +4267,15 @@ עמלות src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4111,11 +4284,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4127,11 +4300,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4147,14 +4320,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4165,7 +4338,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4174,7 +4347,7 @@ הועתק! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4400,7 +4573,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4422,6 +4595,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4430,13 +4611,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4444,7 +4629,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4452,14 +4637,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4467,7 +4652,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4475,7 +4660,7 @@ מידע src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4483,7 +4668,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4787,7 +4972,7 @@ סכום (סאטושיז) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4795,7 +4980,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4960,7 +5145,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5075,24 +5260,28 @@ lightning.nodes-channels-world-map - - Hashrate - כמות האשים + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + כמות האשים src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5104,11 +5293,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5116,7 +5305,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5124,11 +5313,11 @@ כמות האשים (ממוצע נע) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5171,11 +5360,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5188,11 +5377,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5205,53 +5394,6 @@ master-page.layer2-networks-header - - Dashboard - לוח מחוונים - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - גרפים - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - דוקיומנטציה - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5282,6 +5424,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5395,7 +5541,7 @@ בלוקים src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5424,11 +5570,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5472,7 +5626,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5516,8 +5670,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5564,9 +5718,8 @@ 163 - - L-BTC in circulation - L-BTC במחזור + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5585,49 +5738,6 @@ shared.as-of-block - - Mining Dashboard - לוח כרייה - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - חוקר רשת הברק - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - ברז - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5684,15 +5794,15 @@ התחבר src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5723,6 +5833,18 @@ dashboard.adjustments + + Mining Dashboard + לוח כרייה + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5730,6 +5852,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) מזל הבריכות (1 שבועות) @@ -5748,7 +5922,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5779,7 +5953,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5805,7 +5979,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5852,11 +6026,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5895,7 +6069,7 @@ כל הכורים src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5917,17 +6091,17 @@ blocks בלוקים - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5939,15 +6113,19 @@ אחר () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5992,11 +6170,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6004,11 +6182,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6027,20 +6205,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6051,6 +6253,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6062,11 +6268,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6079,11 +6285,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6096,11 +6302,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6126,20 +6332,48 @@ תיוג מטבעה src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. שגיאת בטעינת מידע הבריכה src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6148,18 +6382,18 @@ אין מספיק מידע עדיין src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6176,7 +6410,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6188,25 +6422,100 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + מאושר? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + סיבות סירוב + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction שדר טרנזקציה src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6243,17 +6552,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6266,7 +6599,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6360,11 +6693,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6478,6 +6811,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool by vBytes (sat/vByte) @@ -6495,29 +6896,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - תצוגת מרקע - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter סנן src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6526,7 +6914,7 @@ להפוך src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6535,7 +6923,7 @@ טרנזקציות vBytes לשניה (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6543,10 +6931,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + גרפים + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6554,23 +6950,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions טרנזקציות בחינה src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6583,367 +6996,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - מאושר? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - סיבות סירוב - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - זה עתה - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - לפני - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - תוך ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - תוך ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - לאחר - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - לפני - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent נשלח @@ -6981,11 +7037,11 @@ זמן אישור משוער src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6995,11 +7051,11 @@ לא בזמן הקרוב src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7009,7 +7065,7 @@ אושר ב src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7018,7 +7074,7 @@ גובה בלוק src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7027,7 +7083,7 @@ הטרנזקציות שלך הואצו src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7035,7 +7091,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7043,7 +7099,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7051,7 +7107,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7059,7 +7115,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7068,7 +7124,7 @@ הטרנזקציה שלך אושרה! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7076,15 +7132,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7097,11 +7165,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7112,44 +7180,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - מטבעה + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant צאצא - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7158,18 +7214,389 @@ Ancestor אב קדמון - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + מאפיינים + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + מטבעה + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + נצפה בממפול + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + לא מצפה בממפול + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + זרימה + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + הסתר דיאגרמה + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + הצג עוד + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + קלטים ופלטים + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + הצג דיאגמה + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + זמן נעילה + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator הסתר מאיץ src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7177,7 +7604,7 @@ RBF Timeline src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7187,107 +7614,17 @@ ציר זמן האצה src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - זרימה - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - הסתר דיאגרמה - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - הצג עוד - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - קלטים ופלטים - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - הצג דיאגמה - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - זמן נעילה - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. טרנזקציה לא נמצאה. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7296,119 +7633,24 @@ ממתין להופעתה בממפול.. src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - מאפיינים - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - נצפה בממפול - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - לא מצפה בממפול - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (מטבעות שזה עתה נוצרו) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7417,16 +7659,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7436,7 +7686,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7446,7 +7696,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7455,16 +7705,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript סקריפט P2TR src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7473,7 +7731,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7482,7 +7740,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7491,7 +7749,7 @@ פלט קודם src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7500,7 +7758,7 @@ סוג פלט קודם src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7509,7 +7767,7 @@ התפגר ל src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7518,7 +7776,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7528,7 +7786,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7538,10 +7796,42 @@ הצג עוד קלטים כדי לחשוף מידע אודות עמלה src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs קלטים אחרים @@ -7772,6 +8062,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7796,8 +8144,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7849,10 +8197,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7864,22 +8208,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - ברירת מחדל דוחף: פעולה ׳רוצה׳, מידע: [׳בלוקים׳,...] לבטא את מה שרצית לדחוף. זמין בלוקים , בלוקי-ממפול , תצוגה חיה-שעתיים-טבלה , ו סטטיסטיקות . דוחף טרנזקציות הקשורות לכתובת: ׳עקוב-כתובת׳: ׳3PbJ...bF9B' לקבלה של כל הטרנזקציות החדשות המכילות את כתובת זו כקלט או פלט. מאחזר מערך של טרנזקציות. טרנזקציות-כתובת לטרנזקציות ממפול חדשות ו בלוקי-טרנזקציות לבלוקים מאושרים חדשים. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example קוד לדוגמה @@ -7919,6 +8254,15 @@ API Docs API response + + Documentation + דוקיומנטציה + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8302,7 +8646,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8925,6 +9269,18 @@ lightning.connectivity-ranking + + Lightning Explorer + חוקר רשת הברק + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -9038,7 +9394,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9538,7 +9894,7 @@ צמתי ברק אצל ספקיות: ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9549,7 +9905,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9652,6 +10008,337 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + זה עתה + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + לפני + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + תוך ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + תוך ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + לאחר + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + לפני + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee עמלה @@ -9687,6 +10374,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation אישור @@ -9745,11 +10440,11 @@ המשתמש שלי src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9758,7 +10453,7 @@ סייר src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9767,7 +10462,7 @@ טרנזקיית בחינה src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9777,7 +10472,7 @@ התחבר לצמתים שלנו src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9785,7 +10480,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9794,7 +10489,7 @@ למד src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9803,7 +10498,7 @@ מה זה ממפול? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9812,7 +10507,7 @@ מה זה סייר בלוקים? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9821,7 +10516,7 @@ מה זה סייר ממפול? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9830,7 +10525,7 @@ מדוע הטרנזקציה שלי לא מאושרת? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9838,7 +10533,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9847,7 +10542,7 @@ חקור src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9856,7 +10551,7 @@ רשתות src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9865,7 +10560,7 @@ סייר רשת ראשית src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9874,7 +10569,7 @@ סייר רשת בדיקות3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9883,7 +10578,7 @@ סייר רשת בדיקות4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9891,7 +10586,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9899,7 +10594,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9907,7 +10602,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9916,7 +10611,7 @@ כלים src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9924,7 +10619,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9932,7 +10627,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9941,7 +10636,7 @@ תנאי השירות src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9951,7 +10646,7 @@ מדיניות פרטיות src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9960,7 +10655,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9969,13 +10664,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9998,26 +10693,18 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 @@ -10025,7 +10712,7 @@ התנהגות src/app/shared/filters.utils.ts - 120 + 122 @@ -10033,14 +10720,14 @@ היוריסטיקות src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10168,7 +10855,7 @@ מרובה חתימות מתוך src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.hi.xlf b/frontend/src/locale/messages.hi.xlf index b05c875f8..23f060e93 100644 --- a/frontend/src/locale/messages.hi.xlf +++ b/frontend/src/locale/messages.hi.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 एंटरप्राइज़ प्रायोजक src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ व्हेल प्रायोजक src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ चैड प्रायोजक src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ ओ.जी. प्रायोजक ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ सामुदायिक एकीकरण src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ सामुदायिक गठबंधन src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ परियोजना अनुवादक src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ परियोजना योगदानकर्ता src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ परियोजना सदस्य src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ परियोजना अनुरक्षक src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ क्षमा करें, कुछ गलत हो गया! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ हम इस लेन-देन को तेज़ करने में असमर्थ रहे। कृपया बाद में पुनः प्रयास करें। src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ बंद src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ आपका लेन-देन src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ साथ ही अपुष्ट पूर्वज src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ वर्चुअल साइज src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ इस लेनदेन का साइज़ (अपुष्ट पूर्वजों सहित) vbytes में src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ इन-बैंड शुल्क src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ सैट्स src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ इस लेनदेन द्वारा पहले से भुगतान किए गए शुल्क (अपुष्ट पूर्वजों सहित) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ और कितना तेज? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ इससे पहली पुष्टि होने तक आपका अपेक्षित प्रतीक्षा समय इस तरह कम हो जाएगा src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ सारांश src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ अगले ब्लॉक का बाजार दर src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ सैट/वीबी src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ आवश्यक अनुमानित अतिरिक्त शुल्क src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ लक्षित दर src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ आवश्यक अतिरिक्त शुल्क src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - मेमपूल एक्सेलेरेटर™ शुल्क + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ एक्सेलरेटर सेवा शुल्क src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ लेन-देन साइज़ अधिभार src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ अनुमानित त्वरण लागत src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ अधिकतम त्वरण लागत src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ त्वरण लागत src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ उपलब्ध शेष राशि src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ वापस जाओ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ अपने बिटकॉइन लेनदेन में तेजी लाएं? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ रुकिए src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ पुष्टि अपेक्षित src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ पुष्टि की उम्मीद जल्द नहीं है src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ अतिरिक्त src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ अपेक्षित पुष्टिकरण समय को घटाकर किया गया src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - txid के त्वरण के लिए mempool.space को भुगतान .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@  आपके खाते से अधिकतम ये राशि डेबिट की जाएगी src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ भुगतान करें src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ चालान लोड करने में विफल src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ चालान लोड हो रहा है... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - या + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ अपना भुगतान की पुष्टि करें src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ कुल अतिरिक्त लागत src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ साथ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ भुगतान विधि लोड हो रही है... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ आपके भुगतान की पुष्टि की जा रही है src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ हम आपका भुगतान संसाधित कर रहे हैं... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ आपके लेन-देन में तेजी ला रहे हैं src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ हमारे खनन पूल भागीदारों के साथ आपके त्वरण पुष्टि की जा रही है... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...क्षमा करें, इसमें अपेक्षा से अधिक समय लग रहा है... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ आपका लेन-देन त्वरित किया जा रहा है! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. आपके लेनदेन को हमारे खनन पूल भागीदारों द्वारा त्वरण के लिए स्वीकार कर लिया गया है। src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... लागत की गणना... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ अनुकूलित करें src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ ~ sat/vB तक त्वरित करें src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@  त्वरित करें src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ आपके लेन-देन को अधिकतम % खनिकों द्वारा प्राथमिकता दी जाएगी। src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - सैट - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block अगला ब्लॉक @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees त्वरण शुल्क @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ इस समयावधि के लिए कोई त्वरित लेनदेन नहीं src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ ब्लॉक पर: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ ब्लॉक के आसपास: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ कोई सक्रिय त्वरण नहीं है src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ हाल ही में कोई त्वरण नहीं है src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + सभी + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » और देखें » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ गति नहीं बढ़ाई src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ शेष src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ पता: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ पता के लिए मेमपूल लेनदेन, पुष्टि किए गए लेनदेन, शेष राशि, इत्यादि देखें। src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History शेष राशि का इतिहास src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - सभी - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent हाल ही का src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction में से लेन-देन src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ में से लेन-देन src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ डेटा लोड करने में त्रुटि. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ इस पते पर बहुत ज़्यादा लेन-देन हैं, जो आपके बैकएंड से ज़्यादा हैं। एक मज़बूत बैकएंड सेट अप करने के बारे में ज़्यादा जानकारी देखें. इसके बजाय आधिकारिक मेमपूल वेबसाइट पर इस पते को देखने पर विचार करें: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ पुष्टिकृत शेष राशि src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ पुष्टिकृत UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ लंबित UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ प्रकार src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset एसेट @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - लिक्विड नेटवर्क पर जारी सभी परिसंपत्तियों जैसे एल-बीटीसी, एल-सीएडी, यूएसडीटी, आदि का अन्वेषण करें। + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - बीटा - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match मिलान src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ कोई src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ टिंट src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ क्लासिक src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ आयु src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ उपलब्ध नहीं है src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ आपका ब्राउज़र इस सुविधा का समर्थन नहीं करता है। src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict टकराव src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ अपेक्षित src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ वास्तविक src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ अपेक्षित ब्लॉक src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ वास्तविक ब्लॉक src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ वर्शन src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ मुख्य जड़ src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ बिट्स src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ मर्कल रुट src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ कठिनाई src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ नोन्स src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ ब्लॉक हैडर हेक्स src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ अंकेक्षण src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ विवरण src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ ब्लॉक डेटा लोड करने में त्रुटि. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ यह ब्लॉक खाली क्यों है? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ बैंड के बाहर भुगतान किया गया त्वरण शुल्क src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ ब्लॉक src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ ऊंचाई src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ इनाम src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ शुल्क src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ सबसे हाल के लिक्विड ब्लॉकों को बुनियादी आँकड़ों जैसे कि ब्लॉक की ऊँचाई, ब्लॉक का आकार, आदि के साथ देखें। src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ सबसे हाल के बिटकॉइन ब्लॉकों को बुनियादी आँकड़ों जैसे कि ब्लॉक की ऊँचाई, ब्लॉक इनाम, ब्लॉक आकार और अधिक के साथ देखें। src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ कोपीड! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ X समयरेखा src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ समेकन src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ कॉइनजॉइन src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ डेटा src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ राशि (सैट्स) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ टेस्टनेट4 सिक्कों का अनुरोध करें src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - हैशरेट + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + हैशरेट src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ बिटकॉइन नेटवर्क के लिए हैशरेट और कठिनाई को समय के साथ देखें। src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ हैशरेट (एमए) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - डैशबोर्ड - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - ग्राफ्स - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - प्रलेखन - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired नॉन-डस्ट समाप्त हो गया @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ ब्लॉक्स src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ पेग आउट प्रगति पर है... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - फेडरेशन की बीटीसी होल्डिंग्स के कुल एल-बीटीसी आपूर्ति के 95% से नीचे गिरने की संख्या + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - प्रचलन में एल-बीटीसी + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - खनन डैशबोर्ड - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - लाइटनिंग एक्सप्लोरर - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - फॉसेट - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. मेमपूल में लेनदेन के आँकड़े देखें: शुल्क सीमा, कुल आकार, और बहुत कुछ। जैसे ही नेटवर्क नए लेनदेन प्राप्त करता है, मेमपूल ब्लॉक वास्तविक समय में अपडेट हो जाते हैं। @@ -5771,15 +5878,15 @@ साइन इन src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + खनन डैशबोर्ड + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. वास्तविक समय बिटकॉइन खनन आँकड़े प्राप्त करें जैसे हैशरेट, कठिनाई समायोजन, ब्लॉक पुरस्कार, पूल प्रभुत्व, और अधिक। @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) पूल लक (1 सप्ताह) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ सभी खनिक src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks ब्लॉक - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ अन्य () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ के लिए खनन पूल आँकड़े देखें: सबसे हाल ही में खनन किए गए ब्लॉक, समय के साथ हैशरेट, आज तक का कुल ब्लॉक इनाम, ज्ञात कॉइनबेस पते, और अधिक। src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6420,48 @@ कॉइनबेस टैग src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. पूल डेटा लोड करने में त्रुटि. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6470,7 @@ अभी पर्याप्त डेटा नहीं है src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6478,11 @@ पूल प्रभुत्व src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6499,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6511,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + अल्पविराम से अलग किए गए कच्चे लेन-देन की सूची + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + अधिकतम शुल्क दर (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + अनुमत? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + अस्वीकृति का कारण + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction प्रसारण लेनदेन src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6607,7 @@ लेनदेन के हैश का उपयोग करके नेटवर्क पर लेनदेन प्रसारित करें। src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6647,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6694,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6788,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6908,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) vBytes द्वारा मेमपूल (sat/vByte) @@ -6594,29 +6994,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - टीवी दृश्य - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter फ़िल्टर src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7012,7 @@ उल्टे src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7021,7 @@ लेनदेन vBytes प्रति सेकंड (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7030,18 @@ कैप आउटलायर्स src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + ग्राफ्स + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. समय के साथ मेमपूल आकार (एमवीबी में) और प्रति सेकंड लेनदेन (वीबी/एस में) देखें। @@ -6655,24 +7050,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - बिटकॉइन ब्लॉक और मेमपूल कंजेशन को वास्तविक समय में टीवी के लिए उपयुक्त सरलीकृत प्रारूप में देखें। + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions परीक्षण लेनदेन src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7097,10 @@ कच्चा हेक्स src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - अल्पविराम से अलग किए गए कच्चे लेन-देन की सूची - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - अधिकतम शुल्क दर (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - अनुमत? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - अस्वीकृति का कारण - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - तुरंत - - src/app/components/time/time.component.ts - 107 - - - - Just now - अभी - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - पहले - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - ~ में - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - ~ के भीतर - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - . के बाद - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - पहले - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent भेजा @@ -7087,11 +7138,11 @@ इटीए src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7152,11 @@ किसी समय पर जल्द नहीं src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7166,7 @@ पुष्टि की गई src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7175,7 @@ ब्लॉक ऊंचाई src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7184,7 @@ आपका लेन-देन त्वरित कर दिया गया है src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7193,7 @@ आपके लेनदेन के मेमपूल में प्रदर्शित होने की प्रतीक्षा की जा रही है src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7202,7 @@ आपका लेन-देन मेमपूल में है, लेकिन कुछ समय तक इसकी पुष्टि नहीं होगी। src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7211,7 @@ आपका लेन-देन मेमपूल के शीर्ष पर है, और शीघ्र ही इसकी पुष्टि होने की उम्मीद है। src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7220,7 @@ आपके लेन-देन की पुष्टि अगले ब्लॉक में होने की उम्मीद है src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7229,7 @@ आपके लेन-देन की पुष्टि हो गई है! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7238,29 @@ आपके लेनदेन को नए संस्करण से बदल दिया गया है! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + लेनदेन डेटा लोड करने में त्रुटि. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details अधिक विवरण देखें src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7273,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7289,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - कॉइनबेस + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant वंशज - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7323,398 @@ Ancestor पूर्वज - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + विशेषताएं + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + कॉइनबेस + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + इस लेनदेन को ब्लॉक में शामिल किए जाने का अनुमान था + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + ब्लॉक में अपेक्षित + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + यह लेनदेन खनन से पहले मेमपूल में देखा गया था + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + मेमपूल में देखा गया + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + यह लेनदेन खनन से पहले हमारे मेमपूल से गायब था + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + मेमपूल में नहीं देखा गया + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + यह लेन-देन संभवतः बैंड से बाहर जोड़ा गया है + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + इस लेन-देन को बैंड से बाहर प्राथमिकता दी गई हो सकती है + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + यह लेनदेन हमारे मेमपूल में दूसरे संस्करण के साथ टकराव में था + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + प्रवाह + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + आरेख छिपाएँ + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + और दिखाओ + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + इनपुट और आउटपुट + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + आरेख दिखाएं + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + समायोजित vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + लॉकटाइम + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + सिगोप्स + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator त्वरक छुपाएं src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7723,7 @@ आरबीएफ समयरेखा src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7733,17 @@ त्वरण समयरेखा src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - प्रवाह - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - आरेख छिपाएँ - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - और दिखाओ - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - इनपुट और आउटपुट - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - आरेख दिखाएं - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - समायोजित vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - लॉकटाइम - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - सिगोप्स - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. ट्रांसेक्शन नहीं मिला। src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7752,24 @@ मेमपूल में इसके प्रकट होने की प्रतीक्षा की जा रही है... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - लेनदेन डेटा लोड करने में त्रुटि. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - विशेषताएं - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - इस लेनदेन को ब्लॉक में शामिल किए जाने का अनुमान था - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - ब्लॉक में अपेक्षित - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - यह लेनदेन खनन से पहले मेमपूल में देखा गया था - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - मेमपूल में देखा गया - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - यह लेनदेन खनन से पहले हमारे मेमपूल से गायब था - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - मेमपूल में नहीं देखा गया - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - यह लेन-देन संभवतः बैंड से बाहर जोड़ा गया है - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - इस लेन-देन को बैंड से बाहर प्राथमिकता दी गई हो सकती है - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - यह लेनदेन हमारे मेमपूल में दूसरे संस्करण के साथ टकराव में था - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (नए सृजित कोइन्स) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7778,24 @@ पेग-इन src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) स्क्रिप्टसिग (एएसएम) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7805,7 @@ स्क्रिप्टसिग (हेक्स) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7815,7 @@ विटनेस src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7824,24 @@ P2SH रिडीम स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR टैपस्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7850,7 @@ P2WSH विटनेस स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7859,7 @@ nसीक्वेंस src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7868,7 @@ पिछली आउटपुट स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7877,7 @@ पिछला आउटपुट प्रकार src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7886,7 @@ पेग-आउट से src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7895,7 @@ स्क्रिप्टपबकी (एएसएम) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7905,7 @@ स्क्रिप्टपबकी (हेक्स) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7915,42 @@ शुल्क डेटा प्रकट करने के लिए अधिक इनपुट दिखाएं src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs अन्य इनपुट @@ -7896,6 +8181,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings लिक्विड फेडरेशन होल्डिंग्स @@ -7922,9 +8265,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - बीटीसी होल्डिंग्स के विरुद्ध एल-बीटीसी आपूर्ति + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8319,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8330,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - डिफ़ॉल्ट पुश: क्रिया: 'चाहते हैं', डेटा: ['ब्लॉक', ...] जो आप चाहते हैं उसे व्यक्त करने के लिए धक्का दिया। उपलब्ध: ब्लॉक, मेमपूल-ब्लॉक, लाइव-2h-चार्ट, और आँकड़े। पते से संबंधित लेनदेन को पुश करें: 'ट्रैक-एड्रेस': '3PbJ...bF9B' इनपुट या आउटपुट के रूप में उस पते वाले सभी नए लेनदेन प्राप्त करने के लिए। लेन-देन की एक सरणी देता है। नए मेमपूल लेनदेन के लिए पता-लेनदेन, और नए ब्लॉक की पुष्टि लेनदेन के लिए ब्लॉक-लेनदेन। - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example कोड उदाहरण @@ -8047,6 +8376,15 @@ API Docs API response + + Documentation + प्रलेखन + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ सामान्य प्रश्न @@ -8441,7 +8779,7 @@ लाइटनिंग चैनल का अवलोकन। चैनल क्षमता, शामिल लाइटनिंग नोड्स, संबंधित ऑन-चेन लेनदेन और बहुत कुछ देखें। src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9402,18 @@ lightning.connectivity-ranking + + Lightning Explorer + लाइटनिंग एक्सप्लोरर + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). लाइटनिंग नेटवर्क (समग्र क्षमता, कनेक्टिविटी, आदि), लाइटनिंग नोड्स (चैनल, तरलता, आदि) और लाइटनिंग चैनल (स्थिति, शुल्क, आदि) पर आँकड़े प्राप्त करें। @@ -9179,7 +9529,7 @@ नामक लाइटनिंग नेटवर्क नोड का अवलोकन। चैनल, क्षमता, स्थान, शुल्क आँकड़े और अधिक देखें। src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10036,7 @@ ISP पर लाइटनिंग नोड्स: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10048,7 @@ [AS] ISP का उपयोग करके सभी Bitcoin Lightning नोड्स को ब्राउज़ करें और ISP के लिए नोड्स की कुल संख्या, कुल क्षमता इत्यादि जैसे समग्र आँकड़े देखें। src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10156,338 @@ 71 + + Immediately + तुरंत + + src/app/services/time.service.ts + 71 + + + + Just now + अभी + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + पहले + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + ~ में + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ~ के भीतर + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + . के बाद + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + पहले + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee शुल्क @@ -9842,6 +10524,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation पुष्टि @@ -9901,11 +10591,11 @@ मेरा खाता src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10604,7 @@ अन्वेषण करना src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10613,7 @@ परीक्षण लेनदेन src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10623,7 @@ हमारे नोड्स से जुड़ें src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10632,7 @@ एपीआई दस्तावेज़ीकरण src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10641,7 @@ सीखना src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10650,7 @@ मेमपूल क्या है? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10659,7 @@ ब्लॉक एक्सप्लोरर क्या है? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10668,7 @@ मेमपूल एक्सप्लोरर क्या है? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10677,7 @@ मेरा लेन-देन क्यों पुष्टि नहीं हो रहा है? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10686,7 @@ अधिक पूछे जाने वाले प्रश्न » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10695,7 @@ अनुसंधान src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10704,7 @@ नेटवर्क src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10713,7 @@ मेननेट एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10722,7 @@ टेस्टनेट3 एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10731,7 @@ टेस्टनेट4 एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10740,7 @@ सिग्नेट एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10749,7 @@ लिक्विड टेस्टनेट एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10758,7 @@ लिक्विड एक्सप्लोरर src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10767,7 @@ औजार src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10776,7 @@ घड़ी (खनन) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10785,7 @@ कानूनी src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10794,7 @@ नियम और शर्तें src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10804,7 @@ गोपनीयता नीति src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10814,7 @@ ट्रेडमार्क नीति src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10824,13 @@ तृतीय-पक्ष लाइसेंस src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - आपका बैलेंस बहुत कम है।कृपया अपना खाता टॉप अप करें।. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10855,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - टेस्टनेट 4 अभी तक अंतिम रूप से तैयार नहीं हुआ है, तथा इसे किसी भी समय रीसेट किया जा सकता है। - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment बैच भुगतान src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10868,7 @@ पता प्रकार src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10876,7 @@ व्यवहार src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10884,7 @@ अनुमानि src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10892,7 @@ सिघाश फ्लैग्स src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11020,7 @@ मल्टीसिग में से src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.hr.xlf b/frontend/src/locale/messages.hr.xlf index d013c70bd..b417ff6b5 100644 --- a/frontend/src/locale/messages.hr.xlf +++ b/frontend/src/locale/messages.hr.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Enterprise sponzori 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Kitovi sponzori src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad sponzori src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG sponzori ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integracije zajednice src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Savezi zajednice src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Prevoditelji projekta src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Suradnici projekta src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Članovi projekta src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Održavatelji projekta src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Oprostite, nešto je pošlo naopako! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Nismo uspjeli ubrzati ovu transakciju. Molimo pokušajte ponovo kasnije. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Zatvori src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Vaša transakcija src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus nepotvrđeni predak(ci) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtualna veličina src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Veličina u vbajtima ove transakcije (uključujući nepotvrđene pretke) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ In-band naknade src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Naknade koje su već plaćene ovom transakcijom (uključujući nepotvrđene pretke) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Koliko brže? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Ovo će smanjiti vaše očekivano vrijeme čekanja do prve potvrde na src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Sažetak src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Tržišna vrijednost sljedećeg bloka src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Procjena potrebne dodatne naknade src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Ciljana naknada src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Potrebna je dodatna naknada src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Naknade za Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Naknada za uslugu akceleratora src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Dodatna naknada za veličinu transakcije src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Procijenjeni trošak ubrzanja src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maksimalni trošak ubrzanja src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Trošak ubrzanja src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Dostupno Stanje src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Idi natrag src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Ubrzati svoju Bitcoin transakciju? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Čekaj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Očekuje se potvrda src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Potvrda se ne očekuje u skorije vrijeme src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Za dodatnu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Smanjenje očekivanog vremena potvrde na src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Plaćanje na mempool.space za ubrzanje txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Vaš račun neće biti terećen za više od src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Plati src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Učitavanje fakture nije uspjelo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Učitavanje fakture... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Potvrdite svoju uplatu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Ukupni dodatni trošak src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ s src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Učitavanje načina plaćanja... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Potvrđujemo vašu uplatu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Obrađujemo vašu uplatu... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Ubrzavamo vašu transakciju src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Potvrđujemo vaše ubrzanje s našim mining pool partnerima... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...žao nam je, ovo traje duže od očekivanog... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Vaša transakcija se ubrzava! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Vašu su transakciju prihvatili za ubrzanje naši mining pool partneri. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Izračunavanje troškova... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ prilagodi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Ubrzaj na ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Ubrzaj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Vašoj će transakciji dati prioritet do % rudara . src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Sljedeći blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Naknade za ubrzanje @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Nema ubrzane transakcije za ovaj vremenski okvir src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ U bloku: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Oko bloka: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Neuspješno src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Nema aktivnih ubrzanja src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Nema nedavnih ubrzanja src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + sve + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Vidi više » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ ne ubrzava se src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Stanje src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adresa: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Pogledajte mempool transakcije, potvrđene transakcije, stanje i više za adresu . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Povijest stanja src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - sve - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent nedavno src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction od transakcije src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ od transakcija src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Pogreška pri učitavanju podataka o adresi. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Previše je transakcija na ovoj adresi, više nego što vaš backend može podnijeti. Pogledajte više o postavljanju jačeg backenda. Umjesto toga razmislite o pregledu ove adrese na službenoj web stranici Mempoola: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Potvrđeno stanje src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Potvrđeni UTXO-ovi src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXO-i na čekanju src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Tip src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Asset @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Istražite sve assete izdane na Liquid mreži kao što su L-BTC, L-CAD, USDT i još mnogo toga. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Podudaranje src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Bilo koji src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Nijansa src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ klasična src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Dob src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ nije dostupno src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Vaš preglednik ne podržava ovu značajku. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Očekivano src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Stvarno src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Očekivani blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Stvarni blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Verzija src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bitovi src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Težina src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Hex zaglavlja bloka src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Detalji src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Pogreška pri učitavanju podataka bloka. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Zašto je ovaj blok prazan? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Naknade za ubrzanje plaćene izvan pojasa src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Blokova src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Visina src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Nagrada src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Naknade src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TX src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Pogledajte najnovije Liquid blokove zajedno s osnovnim statistikama kao što su visina bloka, veličina bloka i više. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Pogledajte najnovije Bitcoin blokove zajedno s osnovnim statistikama kao što su visina bloka, nagrada za blok, veličina bloka i više. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Kopirano! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Konsolidacija src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Podaci src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Iznos (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Zatraži Testnet4 coinove src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Pogledajte hashrate i težinu za Bitcoin mrežu vizualiziranu tijekom vremena. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Nadzorna ploča - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafikoni - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentacija - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust Isteklo @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ blokova src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg out u tijeku... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Koliko puta BTC posjed Federacije padne ispod 95% ukupne ponude L-BTC-a + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC u opticaju + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Nadzor rudarenja - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Pogledajte statistiku za transakcije u mempoolu: raspon naknada, ukupna veličina i više. Blokovi Mempoola ažuriraju se u stvarnom vremenu kako mreža prima nove transakcije. @@ -5774,15 +5881,15 @@ Prijavi se src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Nadzor rudarenja + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Dobijte statistiku rudarenja Bitcoina u stvarnom vremenu kao što je hashrate, prilagodba težine, blok nagrade, dominacija pool-ova i više. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Uspjeh pool-ova (1 tjedan) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Svi rudari src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks blokova - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Ostali () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Pogledajte statistiku rudarskih pool-ova za : najnovije iskopane blokove, hashrate tijekom vremena, ukupnu nagradu za blok do danas, poznate coinbase adrese i više. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Coinbase oznaka src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Pogreška pri učitavanju podataka pool-a. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Još nema dovoljno podataka src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Pool dominacija src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Popis neobrađenih transakcija odvojenih zarezima + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maksimalna stopa naknade (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Dopušteno? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Razlog odbijanja + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Emitiraj transakciju src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Emitiraj transakciju na mrežu koristeći hash transakcije. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool po vBytes (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV pogled - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Preokrenuti src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Transakcija vBytes u sekundi (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Cap odstupanja src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafikoni + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Pogledajte veličinu mempoola (u MvB) i transakcije po sekundi (u vB/s) vizualizirane tijekom vremena. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Pogledajte Bitcoin blokove i zagušenja mempoola u stvarnom vremenu u pojednostavljenom formatu savršenom za TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testne transakcije src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Sirovi hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Popis neobrađenih transakcija odvojenih zarezima - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maksimalna stopa naknade (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Dopušteno? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Razlog odbijanja - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Odmah - - src/app/components/time/time.component.ts - 107 - - - - Just now - Upravo sada - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Prije - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Za ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - unutar ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Nakon - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - prije - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Poslano @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Ne u skorije vrijeme src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Potvrđeno u src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Visina bloka src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Vaša transakcija je ubrzana src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Čeka se da se vaša transakcija pojavi u mempoolu src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Vaša transakcija je u mempoolu, ali još neko vrijeme neće biti potvrđena. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Vaša je transakcija pri vrhu mempoola i očekuje se skora potvrda. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Očekuje se da će vaša transakcija biti potvrđena u sljedećem bloku src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Vaša transakcija je potvrđena! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Vaša je transakcija zamijenjena novijom verzijom! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Pogreška pri učitavanju podataka o transakciji. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Pogledajte više detalja src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Potomak - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Predak - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Značajke + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Predviđeno je da će ova transakcija biti uključena u blok + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Očekuje se u bloku + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Ova transakcija je viđena u mempoolu prije rudarenja + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Viđeno u Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Ova transakcija je nedostajala u našem mempoolu prije rudarenja + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Nije viđeno u Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Ova je transakcija možda dodana izvanpojasno + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Ova transakcija je možda bila prioritizirana izvanpojasno + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Ova transakcija bila je u sukobu s drugom verzijom u našem mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Protok + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Sakrij dijagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Prikaži više + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Inputi i outputi + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Prikaži dijagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Prilagođena vveličina + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Vrijeme zaključavanja + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Sakrij akcelerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF kroz vrijeme src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Ubrzanja kroz vrijeme src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Protok - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Sakrij dijagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Prikaži više - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Inputi i outputi - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Prikaži dijagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Prilagođena vveličina - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Vrijeme zaključavanja - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transakcija nije pronađena. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Čeka se da se pojavi u mempoolu... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Pogreška pri učitavanju podataka o transakciji. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Značajke - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Predviđeno je da će ova transakcija biti uključena u blok - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Očekuje se u bloku - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Ova transakcija je viđena u mempoolu prije rudarenja - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Viđeno u Mempoolu - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Ova transakcija je nedostajala u našem mempoolu prije rudarenja - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Nije viđeno u Mempoolu - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Ova je transakcija možda dodana izvanpojasno - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Ova transakcija je možda bila prioritizirana izvanpojasno - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Ova transakcija bila je u sukobu s drugom verzijom u našem mempoolu - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Novogenerirani coin-ovi) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH otkupna skripta src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSH witness skripta src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Skripta prethodnog outputa src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Prethodna vrsta outputa src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Peg-out u src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Prikaži više unosa za otkrivanje podataka o naknadama src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs drugi inputi @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Holding Liquid Federacije @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Ponuda L-BTC-a protiv BTC Holdingsa + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Zadani push: akcija: 'want', data: ['blocks', ...] kako biste izrazili ono što želite da se progura. Dostupno: blokova, mempool-blokovi, live-2h-chart i statistika.Push transakcije povezane na adresu: 'track-address': '3PbJ...bF9B' za primanje svih novih transakcija koje sadrže tu adresu kao input ili output. Vraća niz transakcija. address-transactions za nove mempool transakcije i blok- transakcije za nove blok potvrđene transakcije. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Primjer koda @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentacija + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8782,7 @@ Pregled za Lightning kanal . Pogledajte kapacitet kanala, uključene Lightning nodove, povezane transakcije on-chain i još mnogo toga. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Dobijte statistiku o Lightning mreži (ukupni kapacitet, povezanost itd.), Lightning nodovima (kanali, likvidnost itd.) i Lightning kanalima (status, naknade itd.). @@ -9182,7 +9532,7 @@ Pregled Lightning noda pod nazivom . Pogledajte kanale, kapacitet, lokaciju, statistiku naknada i još mnogo toga. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Lightning nodovi na ISP-u: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Pregledajte sve Bitcoin Lightning nodove pomoću [AS] ISP-a i pogledajte skupne statistike poput ukupnog broja nodova, ukupnog kapaciteta, i više za ISP-a. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Odmah + + src/app/services/time.service.ts + 71 + + + + Just now + Upravo sada + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Prije + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Za ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + unutar ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Nakon + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + prije + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee naknada @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation potvrda @@ -9904,11 +10594,11 @@ Moj račun src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Istraži src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Testna transakcija src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Povežite se s našim nodovima src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ API dokumentacija src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Nauči src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Što je mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Što je blok explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Što je mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Zašto se moja transakcija ne potvrđuje? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Više često postavljanih pitanja » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Istraživanje src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Mreže src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Alati src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Sat (izrudaren) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Legalno src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Uvjeti usluge src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Politika privatnosti src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Politika zaštitnih znakova src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Licence trećih strana src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Vaš saldo je prenizak.Molimo dopunite svoj račun . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 još nije finaliziran i može se resetirati u bilo kojem trenutku. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Skupno plaćanje src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Vrste adresa src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Ponašanje src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heuristika src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig od src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.hu.xlf b/frontend/src/locale/messages.hu.xlf index 2650f9910..978d578c6 100644 --- a/frontend/src/locale/messages.hu.xlf +++ b/frontend/src/locale/messages.hu.xlf @@ -236,7 +236,7 @@ Seconds - Másodpercek + Másodperc node_modules/src/ngb-config.ts 13 @@ -268,7 +268,7 @@ Become a Community Sponsor - Legyél Közösségi Támogatónk + Legyél közösségi támogatónk src/app/components/about/about-sponsors.component.html 4 @@ -277,7 +277,7 @@ Become an Enterprise Sponsor - Legyen Céges Támogatónk + Legyen céges támogatónk src/app/components/about/about-sponsors.component.html 11 @@ -286,7 +286,7 @@ The Mempool Open Source Project - A Mempool Nyílt Forráskódú Projekt + A Mempool nyílt forráskódú projekt src/app/components/about/about.component.html 13 @@ -301,93 +301,113 @@ 14 - - Enterprise Sponsors 🚀 - Céges Szponzorok 🚀 + + Be your own explorer src/app/components/about/about.component.html - 40 + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + + + Enterprise Sponsors 🚀 + Céges támogatók 🚀 + + src/app/components/about/about.component.html + 41 about.sponsors.enterprise.withRocket Whale Sponsors - Bálna Szponzor + Bálna támogatók src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart Chad Sponsors - Chad Szponzor + Chad támogatók src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart OG Sponsors ❤️ - OG Szponzor ❤️ + OG támogatók ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart Community Integrations - Közösségi Integrációk + Közösségi integrációk src/app/components/about/about.component.html - 237 + 265 about.community-integrations Community Alliances - Közösségi Szövetségesek + Közösségi szövetségesek src/app/components/about/about.component.html - 351 + 379 about.alliances Project Translators - Projekt Fordítók + Projekt fordítók src/app/components/about/about.component.html - 367 + 395 about.translators Project Contributors - Projekt Kontribútorok + Projekt közreműködők src/app/components/about/about.component.html - 381 + 409 about.contributors Project Members - Projekt Tagok + Projekt tagok src/app/components/about/about.component.html - 393 + 421 about.project_members Project Maintainers - Projekt Fenntartók + Projekt karbantartók src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,17 +418,10 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. + Tudj meg többet a Mempool nyílt forráskódú projektről: céges támogatók, egyéni támogatók, integrációk, közreműködők, licenszelés és még több. src/app/components/about/about.component.ts 50 @@ -416,29 +429,32 @@ Sorry, something went wrong! + Sajnáljuk, valami hiba történt! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title We were not able to accelerate this transaction. Please try again later. + Nem tudtuk felgyorsítani ezt a tranzakciót. Kérjük próbáld újra később. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate Close + Bezár src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -447,16 +463,16 @@ A te tranzakciód src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction Plus unconfirmed ancestor(s) - Plusz nem megerősített előd(ök) + Plusz megerősítés nélküli előd(ök) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -465,7 +481,7 @@ Virtuális méret src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -476,86 +492,124 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize Size in vbytes of this transaction (including unconfirmed ancestors) + A tranzakció mérete virtuális bájtokban (beleértve a megerősítés nélküli elődöket) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description In-band fees + Sávon belüli díjak src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees sats - sats + sat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -565,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -621,41 +695,46 @@ Fees already paid by this transaction (including unconfirmed ancestors) + Díjak már kifizetve ez a tranzakció által (beleértve a megerősítés nélküli elődöket) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description How much faster? + Mennyivel gyorsabb? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster This will reduce your expected waiting time until the first confirmation to + Ez lecsökkenti a becsült várakozási időt az első megerősítésig erre: src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description Summary + Összesítés src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title Next block market rate + Következő blokk piaci hányad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -664,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -683,405 +762,418 @@ Estimated extra fee required + Becsült szükséges többlet díj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required Target rate + Célzott hányad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate Extra fee required + Szükséges többlet díj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees Accelerator Service Fee + Gyorsító szolgáltatás díja src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee Transaction Size Surcharge + Tranzakciós méret felár src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge Estimated acceleration cost + Becsült gyorsítási költség src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost Maximum acceleration cost + Legnagyobb gyorsítási költség src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost Acceleration cost + Gyorsítás költsége src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost Available balance + Elérhető egyenleg src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance Go back + Vissza src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back Accelerate your Bitcoin transaction? + Felgyorsítod a Bitcoin tranzakciódat? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction Wait + Várj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait Confirmation expected + Megerősítés várható src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected Confirmation not expected any time soon + Nem várható megerősítés belátható időn belül src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon For an additional + Ennyiért cserébe src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost Reducing expected confirmation time to + Megerősítés várható idejének csökkentése erre: src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space Your account will be debited no more than + A számlád nem lesz többel terhelve mint src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited Pay + Fizetés src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay Failed to load invoice + Számla betöltése sikertelen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice Loading invoice... + Számla betöltése... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or Confirm your payment + Hagyd jóvá a fizetést src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment Total additional cost + Teljes többlet költség src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost with + ezzel src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with Loading payment method... + Fizetési mód betöltése... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method Confirming your payment + Fizetés jóváhagyása src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment We are processing your payment... + Fizetés feldolgozása folyamatban... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing Accelerating your transaction + A tranzakciód felgyorsítása src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction Confirming your acceleration with our mining pool partners... + A gyorsítás jóváhagyása bányász partnereinkel folyamatban... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners ...sorry, this is taking longer than expected... + ...sajnáljuk, ez a vártnál tovább tart... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners Your transaction is being accelerated! + A tranzakciód gyorsítása zajlik! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message - - Your transaction has been accepted for acceleration by our mining pool partners. + + Transaction is already being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 578 + + accelerator.success-message-third-party + + + Your transaction has been accepted for acceleration by our mining pool partners. + A tranzakciód gyorsítása elfogadásra került a bányász partnereink által. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 587 accelerator.confirmed-acceleration-with-miners - - Calculating cost... + + Transaction has already been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + + + Calculating cost... + Költségek számítása... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 614 accelerator.calculating-cost customize + testreszabás src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize Accelerate to ~ sat/vB + Gyorsítás erre ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x Accelerate - Gyorsítás + Gyorsít src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate Your transaction will be prioritized by up to % of miners. + A tranzakciód előbbre kerül ennyivel % a bányászok által. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Következő blokk @@ -1101,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1116,6 +1212,7 @@ accelerated + gyorsított src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts 91 @@ -1123,6 +1220,7 @@ Status + Állapot src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 11 @@ -1159,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1182,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1218,33 +1316,34 @@ Accelerated + Gyorsított src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 16 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1257,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1277,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1321,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1341,6 +1440,7 @@ Out-of-band fees + Sávon kívüli díjak src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 27 @@ -1349,7 +1449,7 @@ Fee rate - Díj ráta + Díj hányad src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 36 @@ -1363,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1387,6 +1487,7 @@ Accelerated fee rate + Felgyorsított díj hányad src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 39 @@ -1396,14 +1497,15 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate Accelerated by + Felgyorsítva ettől src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html 48 @@ -1415,16 +1517,28 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees - Gyorsítási Díjak + Gyorsítási díjak src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.html 6 src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1434,16 +1548,18 @@ No accelerated transaction for this timeframe + Nincs felgyorsított tranzakció a megadott időablakra src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: + E blokknál: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1460,9 +1576,10 @@ Around block: + E blokk körül: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1479,6 +1596,7 @@ Requests + Igénylések src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 4 @@ -1499,6 +1617,7 @@ accelerated + felgyorsítva src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 7 @@ -1507,6 +1626,7 @@ Total Bid Boost + Teljes licit löket src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 11 @@ -1532,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1557,6 +1681,7 @@ Total vSize + Teljes virtuális méret src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 20 @@ -1577,6 +1702,7 @@ of blocks + blokkból src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 23 @@ -1585,6 +1711,7 @@ Accelerations + Gyorsítások src/app/components/acceleration/accelerations-list/accelerations-list.component.html 2 @@ -1623,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1642,6 +1773,7 @@ Bid + Licit src/app/components/acceleration/accelerations-list/accelerations-list.component.html 13 @@ -1650,6 +1782,7 @@ Requested + Igényelve src/app/components/acceleration/accelerations-list/accelerations-list.component.html 14 @@ -1662,6 +1795,7 @@ Bid Boost + Licit löket src/app/components/acceleration/accelerations-list/accelerations-list.component.html 17 @@ -1695,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1709,13 +1843,14 @@ Pending + Függőben src/app/components/acceleration/accelerations-list/accelerations-list.component.html 64 src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1725,6 +1860,7 @@ Completed + Teljesítve src/app/components/acceleration/accelerations-list/accelerations-list.component.html 65 @@ -1733,30 +1869,34 @@ Failed + Sikertelen src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled There are no active accelerations - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 - - accelerations.no-accelerations - - - There are no recent accelerations + Nincsenek aktív gyorsítások src/app/components/acceleration/accelerations-list/accelerations-list.component.html 134 accelerations.no-accelerations + + There are no recent accelerations + Nem voltak mostanában gyorsítások + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 135 + + accelerations.no-accelerations + Active Accelerations + Aktív gyorsítások src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 10 @@ -1769,6 +1909,7 @@ Acceleration stats + Gyorsítás adatai src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 24 @@ -1777,6 +1918,7 @@ (1 day) + (1 nap) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 27 @@ -1785,6 +1927,7 @@ (1 week) + (1 hét) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 30 @@ -1793,6 +1936,7 @@ (1 month) + (1 hónap) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 33 @@ -1801,12 +1945,26 @@ (all time) + (mindenkor) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 36 mining.all-time + + all + összes + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Továbbiak » @@ -1814,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1834,6 +1996,7 @@ Recent Accelerations + Legutóbbi gyorsítások src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 113 @@ -1842,17 +2005,15 @@ Accelerator Dashboard + Gyorsítási áttekintő src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to + Gyorsítva erre src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html 7 @@ -1862,6 +2023,7 @@ of hashrate + hasharányból src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html 32 @@ -1870,14 +2032,15 @@ not accelerating + nincs gyorsítás src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 pending - várakozik + függőben src/app/components/acceleration/pending-stats/pending-stats.component.html 7 @@ -1886,6 +2049,7 @@ Avg Max Bid + Átlagos legnagyobb licit src/app/components/acceleration/pending-stats/pending-stats.component.html 11 @@ -1898,6 +2062,7 @@ of block + blokkból src/app/components/acceleration/pending-stats/pending-stats.component.html 23 @@ -1909,7 +2074,7 @@ Egyenleg src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1917,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -1938,6 +2107,7 @@ Balances + Egyenlegek src/app/components/address-group/address-group.component.html 4 @@ -1946,6 +2116,7 @@ Total + Összes src/app/components/address-group/address-group.component.html 9 @@ -2015,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2036,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2049,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2071,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2093,11 +2268,15 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions Unspent TXOs - Nem elköltött TXO-k + Elköltetlen TXO-k src/app/components/address/address-preview.component.html 39 @@ -2113,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2137,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2154,110 +2333,147 @@ Cím: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . + Nézd meg a mempool tranzakciókat, megerősített tranzakciókat, egyenleget és mást ami a címhez tartozik. src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 - - Balance History + + Taproot Tree src/app/components/address/address.component.html 79 + address.taproot-tree + + + Balance History + Egyenleg alakulása + + src/app/components/address/address.component.html + 93 + src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent - - src/app/components/address/address.component.html - 87 - - recent - - - of transaction + mostanában src/app/components/address/address.component.html 101 + recent + + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + + + of transaction + a tranzakcióból + + src/app/components/address/address.component.html + 129 + X of X Address Transaction of transactions + a tranzakcióból src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) Error loading address data. - Hiba történt a cím információ lekérdezésekor. + Hiba történt a cím adat lekérdezésekor. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + Túl sok tranzakció tartozik ehhez a címhez, több mint amit végpontod kezelni képes. Tudj meg többet itt hogyan építsek erősebb végpontot. Próbáld inkább ezt a címet a hivatalos Mempool weboldalon megnézni: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error Confirmed balance + Megerősített egyenleg src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance Confirmed UTXOs + Megerősített UTXO-k src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos Pending UTXOs + Függőben lévő UTXO-k src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2266,21 +2482,30 @@ Típus src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset - Asset + Eszköz src/app/components/asset/asset.component.html 3 @@ -2325,7 +2550,7 @@ Issuer - Kibocsájtó + Kibocsátó src/app/components/asset/asset.component.html 29 @@ -2335,7 +2560,7 @@ Issuance TX - Kibocsájtó TX + Kibocsátó TX src/app/components/asset/asset.component.html 33 @@ -2345,7 +2570,7 @@ Pegged in - Betéve + Bekötve src/app/components/asset/asset.component.html 37 @@ -2355,7 +2580,7 @@ Pegged out - Kivéve + Kiváltva src/app/components/asset/asset.component.html 41 @@ -2365,7 +2590,7 @@ Issued amount - Kibocsájtott mennyiség + Kibocsátott mennyiség src/app/components/asset/asset.component.html 45 @@ -2385,7 +2610,7 @@ Circulating amount - Körforgásban lévő mennyiség + Forgalomban lévő mennyiség src/app/components/asset/asset.component.html 53 @@ -2408,7 +2633,7 @@ Peg In/Out and Burn Transactions - Betét/Kivét és Elégetési Tranzakciók + Bekötési/kiváltási és elégetési tranzakciók src/app/components/asset/asset.component.html 79 @@ -2417,7 +2642,7 @@ Issuance and Burn Transactions - Kibocsájtási és Égetési Tranzakciók + Kibocsátási és égetési tranzakciók src/app/components/asset/asset.component.html 80 @@ -2426,7 +2651,7 @@ Error loading asset data. - Hiba történt az asset adatainak betöltésekor. + Hiba történt az eszköz adatainak betöltésekor. src/app/components/asset/asset.component.html 150 @@ -2443,6 +2668,7 @@ Browse an overview of the Liquid asset (): see issued amount, burned amount, circulating amount, related transactions, and more. + Böngészd ennek a Liquid eszköznek az áttekintését: (): nézd meg a kibocsátott mennyiséget, elégetett mennyiséget, forgalomban lévő mennyiséget, kapcsolódó tranzakciókat és sok mást. src/app/components/asset/asset.component.ts 108 @@ -2450,7 +2676,7 @@ Group of assets - Csoportnyi asset + eszköz csoportja src/app/components/assets/asset-group/asset-group.component.html 8 @@ -2462,6 +2688,7 @@ No featured assets + Nincsenek kiemelt eszközök src/app/components/assets/assets-featured/assets-featured.component.html 3 @@ -2470,7 +2697,7 @@ Assets - Assetek + Eszközök src/app/components/assets/assets-nav/assets-nav.component.html 3 @@ -2483,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2506,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2526,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2538,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2547,7 +2770,7 @@ Search asset - Asset keresése + Eszköz keresése src/app/components/assets/assets-nav/assets-nav.component.html 19 @@ -2564,7 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2585,7 +2808,7 @@ Issuer domain - Kibocsájtó főcíme + Kibocsátó főcíme src/app/components/assets/assets.component.html 6 @@ -2598,7 +2821,7 @@ Asset ID - Asset ID + Eszköz azonosító src/app/components/assets/assets.component.html 7 @@ -2611,7 +2834,7 @@ Error loading assets data. - Hiba történt az assetok adainak betöltésekor. + Hiba történt az eszközök adainak betöltésekor. src/app/components/assets/assets.component.html 50 @@ -2620,7 +2843,7 @@ BTC Holdings - BTC Össztulajdon + BTC össztulajdon src/app/components/balance-widget/balance-widget.component.html 5 @@ -2637,6 +2860,7 @@ Change (7d) + Változás (7n) src/app/components/balance-widget/balance-widget.component.html 14 @@ -2649,6 +2873,7 @@ Change (30d) + Változás (30n) src/app/components/balance-widget/balance-widget.component.html 23 @@ -2661,7 +2886,7 @@ Block Fee Rates - Blokk Díj Ráta + Blokk díj hányad src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html 6 @@ -2678,6 +2903,7 @@ Avg Block Fee (24h) + Átlagos blokk díj (24ó) src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html 51 @@ -2690,6 +2916,7 @@ Avg Block Fee (1m) + Átlagos blokk díj (1p) src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html 57 @@ -2702,6 +2929,7 @@ See Bitcoin feerates visualized over time, including minimum and maximum feerates per block along with feerates at various percentiles. + Nézd meg a Bitcoin díjhányad alakulását az idő függvényében, beleértve a legkisebb és legnagyobb díjhányadot blokkonként továbbá a díjhányadot különböző mércék szerint. src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts 73 @@ -2709,6 +2937,7 @@ Block Fees + Blokk díjak src/app/components/block-fees-graph/block-fees-graph.component.html 6 @@ -2725,6 +2954,7 @@ See the average mining fees earned per Bitcoin block visualized in BTC and USD over time. + Nézd meg a megszerzett átlagos bányász díjakat Bitcoin blokkonként BTC-ben és USD-ben az idő függvényében ábrázolva. src/app/components/block-fees-graph/block-fees-graph.component.ts 70 @@ -2751,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2763,11 +2993,12 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 Block Fees Vs Subsidy + Blokk díjak és jutalom src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html 6 @@ -2784,6 +3015,7 @@ See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time. + Nézd meg a megszerzett bányász díjakat Bitcoin blokkonként a Bitcoin blokk juttatás mellett, BTC-ben és USD-ben az idő függvényében ábrázolva. src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 79 @@ -2791,6 +3023,7 @@ At block + blokknál src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 185 @@ -2798,6 +3031,7 @@ Around block + blokk körül src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 187 @@ -2805,43 +3039,19 @@ select filter categories to highlight matching transactions + válassz szűrő feltételt az illeszkedő tranzakciók kiemelésére src/app/components/block-filters/block-filters.component.html 2 Mempool Goggles™ tooltip - - beta - béta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Találat src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2851,17 +3061,19 @@ Any + Bármi src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any Tint + Színezés src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2870,7 +3082,7 @@ Klasszikus src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2880,14 +3092,16 @@ Age + Kor src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age Block Health + Blokk épség src/app/components/block-health-graph/block-health-graph.component.html 6 @@ -2904,6 +3118,7 @@ See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool's re-implementation of Bitcoin Core's transaction selection algorithm. + Nézd meg a Bitcoin blokk épséget az idő függvényében. A blokk épség annak a mérőszáma, hogy a várható tranzakciókból mennyi került a ténylegesen kibányászott blokkba. A várható tranzakciók számát a Mempool által újraírt Bitcoin Core tranzakció választó algoritmusa adja. src/app/components/block-health-graph/block-health-graph.component.ts 64 @@ -2946,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -2962,15 +3177,16 @@ nem elérhető src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available Your browser does not support this feature. + A böngésződ nem támogatja ezt a funkciót. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3019,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3037,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3059,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3076,6 +3296,7 @@ Removed + Eltávolítva src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 71 @@ -3089,19 +3310,20 @@ Marginal fee rate - Legkissebb díj ráta + Legkisebb díj hányad src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 72 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal High sigop count + Magas sigop szám src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 73 @@ -3110,7 +3332,7 @@ Recently broadcasted - Nemrég közvetítve + Nemrég közzétéve src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 74 @@ -3119,6 +3341,7 @@ Recently CPFP'd + Nemrég volt CPFP src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 75 @@ -3127,46 +3350,74 @@ Added + Hozzáadva src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added Prioritized + Előrehozva src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized - - Conflict + + Deprioritized src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 82 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + + + Conflict + Ütközés + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 88 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict Block Rewards - Blokk Jutalmak + Blokk jutalmak src/app/components/block-rewards-graph/block-rewards-graph.component.html 7 @@ -3183,6 +3434,7 @@ See Bitcoin block rewards in BTC and USD visualized over time. Block rewards are the total funds miners earn from the block subsidy and fees. + Nézd meg a Bitcoin blokk jutalmakat BTC-ben is USD-ben az idő függvényében ábrázolva. A blokk jutalom a blokk után járó juttatás és a díjak összege. src/app/components/block-rewards-graph/block-rewards-graph.component.ts 68 @@ -3207,6 +3459,7 @@ See Bitcoin block sizes (MB) and block weights (weight units) visualized over time. + Nézd meg a Bitcoin blokk méretet (MB) és blokk súlyt (súly egység) az idő függvényében ábrázolva. src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts 65 @@ -3229,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3249,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3285,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3319,21 +3580,6 @@ src/app/components/block-view/block-view.component.ts 110 - - src/app/components/block/block-preview.component.ts - 102 - - - src/app/components/block/block.component.ts - 260 - - - - See size, weight, fee range, included transactions, and more for Liquid block (). - - src/app/components/block-view/block-view.component.ts - 112 - src/app/components/block/block-preview.component.ts 104 @@ -3343,11 +3589,12 @@ 262 - - See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + + See size, weight, fee range, included transactions, and more for Liquid block (). + Nézd meg a méretét, súlyát, díjtartományát, kapcsolódó tranzakciókat és sok mást ennek a Liquid blokknak (). src/app/components/block-view/block-view.component.ts - 114 + 112 src/app/components/block/block-preview.component.ts @@ -3358,9 +3605,25 @@ 264 + + See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + Nézd meg a méretét, súlyát, díjtartományát, kapcsolódó tranzakciókat, elemzését (várt / tényleges) és sok mást ennek a Bitcoin blokknak (). + + src/app/components/block-view/block-view.component.ts + 114 + + + src/app/components/block/block-preview.component.ts + 108 + + + src/app/components/block/block.component.ts + 266 + + Genesis - Genezis + Ősblokk src/app/components/block/block-preview.component.html 10 @@ -3383,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3437,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3466,20 +3733,21 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner transaction + tranzakció src/app/components/block/block-transactions.component.html 4 src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3493,13 +3761,14 @@ transactions + tranzakció src/app/components/block/block-transactions.component.html 5 src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3534,6 +3803,7 @@ This block does not belong to the main chain, it has been replaced by: + Ez a blokk nem tartozik a főlánchoz, le lett cserélve ezzel: src/app/components/block/block.component.html 5 @@ -3552,6 +3822,7 @@ Stale + Elhagyott src/app/components/block/block.component.html 30 @@ -3566,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3577,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3589,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3617,17 +3896,17 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown Fee span - Díj fesztáv + Díj tartomány src/app/components/block/block.component.html 132 @@ -3640,7 +3919,7 @@ Based on average native segwit transaction of 140 vBytes - Az átlag 140 vBájtnyi native segwit tranzakción alapulvéve + Az átlag 140 vBájtnyi tiszta segwit tranzakciót alapulvéve src/app/components/block/block.component.html 140 @@ -3669,7 +3948,7 @@ Subsidy + fees - Támogatás + Díjak + Juttatás + díjak src/app/components/block/block.component.html 162 @@ -3686,34 +3965,38 @@ Várható src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected Actual - Aktuális + Tényleges src/app/components/block/block.component.html - 227 + 234 block.actual Expected Block - Várt Blokk + Várt blokk src/app/components/block/block.component.html - 231 + 238 block.expected-block Actual Block - Aktuális Blokk + Tényleges blokk src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3722,11 +4005,15 @@ Verzió src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3735,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3762,10 +4049,10 @@ Bits - Bits + Bitek src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3774,7 +4061,7 @@ Merkle törzs src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3783,7 +4070,7 @@ Nehézség src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3799,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3812,16 +4099,16 @@ Nounce src/app/components/block/block.component.html - 296 + 303 block.nonce Block Header Hex - Blokk Fejcím Hex + Blokk Fejléc Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3830,11 +4117,11 @@ Ellenőrzés src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3844,23 +4131,31 @@ Részletek src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3887,9 +4182,10 @@ Error loading block data. + Hiba a blokk adat betöltésekor. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3898,15 +4194,20 @@ Miért üres ez a blokk? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation Acceleration fees paid out-of-band + Gyorsítási díjak sávon kívül fizetve src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3915,24 +4216,20 @@ Blokkok src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3940,7 +4237,7 @@ Magasság src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3952,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3969,11 +4270,11 @@ Jutalom src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3981,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4002,28 +4307,28 @@ Díjjak src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees TXs - TXek + TX src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4035,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4053,27 +4358,30 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. - - src/app/components/blocks-list/blocks-list.component.ts - 71 - - - - See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. + Nézd meg a legújabb Liquid blokkokat alapvető információk mellett, mint blokk magasság, blokk méret és sok más. src/app/components/blocks-list/blocks-list.component.ts 73 + + See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. + Nézd meg a legújabb Bitcoin blokkokat alapvető információk mellett, mint blokk magasság, blokk jutalom, blokk méret és sok más. + + src/app/components/blocks-list/blocks-list.component.ts + 75 + + Calculator + Számológép src/app/components/calculator/calculator.component.html 3 src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4082,7 +4390,7 @@ Másolva! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4112,7 +4420,7 @@ Memory Usage - Memória Használat + Memória használat src/app/components/clock/clock.component.html 65 @@ -4165,7 +4473,7 @@ Incoming Transactions - Érkező Tranzakciók + Beérkező tranzakciók src/app/components/custom-dashboard/custom-dashboard.component.html 55 @@ -4182,7 +4490,7 @@ Minimum fee - Minimum Díj + Minimum díj src/app/components/custom-dashboard/custom-dashboard.component.html 71 @@ -4196,7 +4504,7 @@ Purging - Törlés + Eldobva src/app/components/custom-dashboard/custom-dashboard.component.html 72 @@ -4210,6 +4518,7 @@ Recent Replacements + Nemrég lecseréltek src/app/components/custom-dashboard/custom-dashboard.component.html 100 @@ -4299,6 +4608,7 @@ Recent Blocks + Mostani blokkok src/app/components/custom-dashboard/custom-dashboard.component.html 147 @@ -4313,12 +4623,13 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks Recent Transactions + Mostani tranzakciók src/app/components/custom-dashboard/custom-dashboard.component.html 190 @@ -4331,33 +4642,49 @@ Treasury + Kincstár src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury Treasury Transactions + Kincstári tranzakciók src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline + X idővonal src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline Consolidation + Egyesítés src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4365,15 +4692,15 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin - Coinjoin + Keverés src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4381,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4389,7 +4716,7 @@ Adat src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4397,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4420,7 +4747,7 @@ Difficulty Adjustment - Bányászási Nehézségifok + Bányászási nehézségi fok src/app/components/difficulty-mining/difficulty-mining.component.html 1 @@ -4437,7 +4764,7 @@ Remaining - Hátramaradt + Hátralévő src/app/components/difficulty-mining/difficulty-mining.component.html 7 @@ -4450,6 +4777,7 @@ blocks + blokk src/app/components/difficulty-mining/difficulty-mining.component.html 10,11 @@ -4474,7 +4802,7 @@ block - blokk + blokk src/app/components/difficulty-mining/difficulty-mining.component.html 11,12 @@ -4517,7 +4845,7 @@ Current Period - Mostani Periódus + Mostani időszak src/app/components/difficulty-mining/difficulty-mining.component.html 40 @@ -4526,7 +4854,7 @@ Next Halving - Következő Felezés + Következő felezés src/app/components/difficulty-mining/difficulty-mining.component.html 47 @@ -4665,7 +4993,7 @@ New subsidy - Új jutalom + Új juttatás src/app/components/difficulty/difficulty.component.html 103 @@ -4683,7 +5011,7 @@ Block remaining - Hátramaradt Blokk + Hátramaradt blokk src/app/components/difficulty/difficulty.component.html 112 @@ -4692,6 +5020,7 @@ Testnet4 Faucet + Testnet4 csap src/app/components/faucet/faucet.component.html 4 @@ -4700,17 +5029,19 @@ Amount (sats) + Mennyiség (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats Request Testnet4 Coins + Testnet4 érmék igénylése src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4725,7 +5056,7 @@ No Priority - Nem Sürgősség + Nem sürgős src/app/components/fees-box/fees-box.component.html 4 @@ -4791,7 +5122,7 @@ Backend is synchronizing - A háttérszolgáltatás épp szinkrinizál + A háttérszolgáltatás épp szinkronizál src/app/components/footer/footer.component.html 8 @@ -4852,7 +5183,7 @@ Pools Dominance - Pool Fölény + Pool fölény src/app/components/graphs/graphs.component.html 12 @@ -4865,7 +5196,7 @@ Hashrate & Difficulty - Hashráta és Nehézség + Hasharány & nehézség src/app/components/graphs/graphs.component.html 14 @@ -4876,13 +5207,13 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty Lightning - Villám + Lightning src/app/components/graphs/graphs.component.html 31 @@ -4891,7 +5222,7 @@ Lightning Nodes Per Network - Villám Nodeok Hálózatonként + Lightning csomópontok hálózatonként src/app/components/graphs/graphs.component.html 34 @@ -4912,7 +5243,7 @@ Lightning Network Capacity - Villám Hálózati Kapacítás + Lightning hálózati kapacítás src/app/components/graphs/graphs.component.html 36 @@ -4933,7 +5264,7 @@ Lightning Nodes Per ISP - Villám Node Szolgáltatónként + Lightning csomópont szolgáltatónként src/app/components/graphs/graphs.component.html 38 @@ -4946,7 +5277,7 @@ Lightning Nodes Per Country - Villám Nodeok Országonként + Lightning csomópont országonként src/app/components/graphs/graphs.component.html 40 @@ -4963,7 +5294,7 @@ Lightning Nodes World Map - Villám Node Világ Térkép + Lightning csomópontok világtérképe src/app/components/graphs/graphs.component.html 42 @@ -4980,7 +5311,7 @@ Lightning Nodes Channels World Map - Villám Node Csatorna Világ Térkép + Lightning csomópont csatornák világtérképe src/app/components/graphs/graphs.component.html 44 @@ -4991,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashráta + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hasharány src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5020,36 +5355,37 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate See hashrate and difficulty for the Bitcoin network visualized over time. + Nézd meg a hasharányt és nehézségi fokot a Bitcoin hálózaton az idő függvényében ábrázolva. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 Hashrate (MA) - Hashráta (MA) + Hasharány (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 Pools Historical Dominance - Történelmi Pool Fölény + Történelmi pool fölény src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts 74 @@ -5057,6 +5393,7 @@ See Bitcoin mining pool dominance visualized over time: see how top mining pools' share of total hashrate has fluctuated over time. + Nézd meg a Bitcoin bányász pool-ok fölényét az idő függvényében ábrázolva: hogyan alakul időben a legjobb bányász pool részesedése a teljes hasharányhoz képest. src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts 75 @@ -5072,7 +5409,7 @@ Indexing pools hashrate - Indexelő poolok hashrátája + Indexelő poolok hasharánya src/app/components/indexing-progress/indexing-progress.component.html 3 @@ -5087,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5104,72 +5441,26 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting Layer 2 Networks - Második Réteg Hálózatok + Layer 2 hálózatok src/app/components/liquid-master-page/liquid-master-page.component.html 56 master-page.layer2-networks-header - - Dashboard - Irányítópult - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafikon - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentáció - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired + Lejárt nem-por src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 3 @@ -5178,6 +5469,7 @@ Total amount of BTC held in non-dust Federation UTXOs that have expired timelocks + Teljes összeg BTC-ben a szövetség nem-por UTXO-iban tárolva amiken lejárt az időzár src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 5 @@ -5186,6 +5478,7 @@ UTXOs + UTXO-k src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 6 @@ -5198,10 +5491,15 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos Total Expired + Összes lejárt src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 12 @@ -5210,6 +5508,7 @@ Total amount of BTC held in Federation UTXOs that have expired timelocks + Teljes BTC mennyiség Szövetségi UTXO-ban tartva amin lejárt az időzár src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 15 @@ -5218,6 +5517,7 @@ Liquid Federation Wallet + Liquid szövetségi tárca src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 5 @@ -5238,6 +5538,7 @@ addresses + címek src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 8 @@ -5246,7 +5547,7 @@ Output - Kiemenet + Kimenet src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html 8 @@ -5263,6 +5564,7 @@ Related Peg-In + Kapcsolódó bekötés src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html 11 @@ -5271,6 +5573,7 @@ Expires in + Lejár src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html 13 @@ -5279,6 +5582,7 @@ Expired since + Lejárt ekkor src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html 14 @@ -5296,6 +5600,7 @@ Change output + Visszajáró kimenet src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html 55 @@ -5307,12 +5612,13 @@ blokkok src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks Timelock-Expired UTXOs + Lejárt időzáras UTXO-k src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html 12 @@ -5336,16 +5642,25 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses Recent Peg-In / Out's + Mostani bekötések / kiváltások src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html 4 @@ -5366,6 +5681,7 @@ Fund / Redemption Tx + Befizető / kiváltó tx src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html 15 @@ -5374,6 +5690,7 @@ BTC Address + BTC cím src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html 16 @@ -5382,14 +5699,16 @@ Peg out in progress... + Kiváltás folyamatban... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress 24h Peg-In Volume + 24ó bekötési mennyiség src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 12 @@ -5398,6 +5717,7 @@ Peg-Ins + Bekötések src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 13 @@ -5406,6 +5726,7 @@ 24h Peg-Out Volume + 24ó kiváltási mennyiség src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 18 @@ -5414,6 +5735,7 @@ Peg-Outs + Kiváltások src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 19 @@ -5422,14 +5744,15 @@ Unpeg + Bekötés visszavonása src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 3 liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5438,6 +5761,7 @@ Unpeg Event + Visszavont bekötési esemény src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 7 @@ -5446,6 +5770,7 @@ Avg Peg Ratio + Átlagos bekötési arány src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 14 @@ -5454,6 +5779,7 @@ Emergency Keys + Vészhelyzeti kulcsok src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 28 @@ -5462,6 +5788,7 @@ usage + használat src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 31 @@ -5470,14 +5797,14 @@ Assets vs Liabilities + Eszközök és adósságok src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts 163 - - L-BTC in circulation - L-BTC forgalomban + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5486,6 +5813,7 @@ As of block + Eddig a blokkig src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 7 @@ -5496,49 +5824,9 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Villám Felfedező - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. + Nézd meg a mempool-ban a tranzakciókhoz tartozó statisztikákat: díj tartomány, összevont méret és sok más. A mempool blokkok valós időben frissülnek ahogy a hálózatba érkeznek az új tranzakciók. src/app/components/mempool-block/mempool-block.component.ts 62 @@ -5562,6 +5850,7 @@ Count + Szám src/app/components/mempool-graph/mempool-graph.component.ts 329 @@ -5592,15 +5881,15 @@ Belépés src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5631,13 +5920,78 @@ dashboard.adjustments + + Mining Dashboard + Bányászat áttekintő + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. + Kapj valósidejű statisztikát a Bitcoin bányászokól mint hasharány, nehézségi fok állítás, blokk jutalom, pool-ok fölénye és sok más. src/app/components/mining-dashboard/mining-dashboard.component.ts 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Pool szerencse (1 hét) @@ -5649,19 +6003,20 @@ Pools Luck + Pool szerencse src/app/components/pool-ranking/pool-ranking.component.html 9 src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck The overall luck of all mining pools over the past week. A luck bigger than 100% means the average block time for the current epoch is less than 10 minutes. - Ez az összes bányászati mempool általános szerencséje az elmúlt héten. A 100%-ál nagyobb szerencse azt jelenti, hogy az átlagos blokkidő az aktuális korszakban kevesebb mint 10 perc. + Ez az összes bányász pool általános szerencséje az elmúlt héten. A 100%-ál nagyobb szerencse azt jelenti, hogy az átlagos blokkidő az aktuális korszakban kevesebb mint 10 perc. src/app/components/pool-ranking/pool-ranking.component.html 11 @@ -5670,7 +6025,7 @@ Pools count (1w) - Pool szám (1w) + Pool szám (1 hét) src/app/components/pool-ranking/pool-ranking.component.html 17 @@ -5679,13 +6034,14 @@ Pools Count + Pool szám src/app/components/pool-ranking/pool-ranking.component.html 17 src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5700,7 +6056,7 @@ Blocks (1w) - Blokkok (1hé) + Blokkok (1 hét) src/app/components/pool-ranking/pool-ranking.component.html 25 @@ -5711,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5743,7 +6099,7 @@ Avg Health - Átlagos Állapot + Átlagos állapot src/app/components/pool-ranking/pool-ranking.component.html 96 @@ -5758,17 +6114,17 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health Avg Block Fees - Átlag Blokk Díjjak + Átlag blokk díjjak src/app/components/pool-ranking/pool-ranking.component.html 97 @@ -5789,6 +6145,7 @@ Empty Blocks + Üres blokkok src/app/components/pool-ranking/pool-ranking.component.html 98 @@ -5800,13 +6157,13 @@ Minden bányász src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners Mining Pools - Bányászati Poolok + Bányász pool-ok src/app/components/pool-ranking/pool-ranking.component.ts 59 @@ -5814,6 +6171,7 @@ See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe. + Nézd meg a legjobb Bitcoin bányász pool-ok rangsorát a kibányászott blokkok alapján, az általad választott időablakban. src/app/components/pool-ranking/pool-ranking.component.ts 60 @@ -5822,17 +6180,17 @@ blocks blokkok - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5841,17 +6199,22 @@ Other () + Egyéb () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5872,7 +6235,7 @@ mining pool - bányászó pool + bányász pool src/app/components/pool/pool-preview.component.html 3 @@ -5896,23 +6259,24 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. + Nézd meg a bányász pool statisztikáit: legutóbb bányászott blokkok, hasharány az idő függvényében, összes blokk jutalom a mai napig, ismert coinbase címek és sok mást. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5931,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5955,60 +6343,66 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide Hashrate (24h) - Hashráta (24h) + Hasharány (24ó) src/app/components/pool/pool.component.html 95 src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate Blocks (24h) + Blokkok (24ó) src/app/components/pool/pool.component.html 120 src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h 1w - 1hé + 1 hét src/app/components/pool/pool.component.html 121 src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w Out-of-band Fees (1w) + Sávon kívüli díjak (1 hét) src/app/components/pool/pool.component.html 143 @@ -6017,6 +6411,7 @@ 1m + 1p src/app/components/pool/pool.component.html 144 @@ -6028,44 +6423,75 @@ Érmebázis címke src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag - - Error loading pool data. + + Clean src/app/components/pool/pool.component.html - 467 + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + + + Error loading pool data. + Hiba a pool adat betöltése közben. + + src/app/components/pool/pool.component.html + 589 pool.error.loading-pool-data Not enough data yet + Nincs még elég adat src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance + Pool fölény src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance Broadcast Transaction - Tranzakció Küldése + Tranzakció közlése src/app/components/push-transaction/push-transaction.component.html 2 @@ -6076,40 +6502,120 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction Transaction hex - Tranzakciós hex + Tranzakció hex src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Vesszővel tagolt lista a nyers tranzakciókról + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Legmagasabb díj arány (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Engedélyezett? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Visszautasítás oka + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction + Tranzakció közlése src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. + Tranzakció közlése a hálózatra a tranzakció hash használatával. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 RBF Replacements + RBF cserék src/app/components/rbf-list/rbf-list.component.html 2 @@ -6122,6 +6628,7 @@ There are no replacements in the mempool yet! + Nincsenek még cserék a mempool-ban! src/app/components/rbf-list/rbf-list.component.html 34 @@ -6130,6 +6637,7 @@ See the most recent RBF replacements on the Bitcoin network, updated in real-time. + Nézd meg a legújabb RBF cseréket a Bitcoin hálózaton, valós idejű frissítéssel. src/app/components/rbf-list/rbf-list.component.ts 62 @@ -6142,35 +6650,60 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less remaining + hátralévő src/app/components/rbf-timeline/rbf-timeline.component.html 86 src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining Miners Reward - Bányász Jutalma + Bányász jutalom src/app/components/reward-stats/reward-stats.component.html 5 @@ -6215,7 +6748,7 @@ Avg Tx Fee - Átlag Tx Díj + Átlag tx díj src/app/components/reward-stats/reward-stats.component.html 30 @@ -6241,7 +6774,7 @@ sats/tx - sats/tx + sat/tx src/app/components/reward-stats/reward-stats.component.html 33 @@ -6251,18 +6784,18 @@ Explore the full Bitcoin ecosystem - Fedezze fel a teljes Bitcoin ökoszisztémát + Fedezd fel a teljes Bitcoin ökoszisztémát src/app/components/search-form/search-form.component.html 4 src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6277,6 +6810,7 @@ Block Height + blokk magasság src/app/components/search-form/search-results/search-results.component.html 3 @@ -6285,6 +6819,7 @@ Transaction + tranzakció src/app/components/search-form/search-results/search-results.component.html 21 @@ -6293,6 +6828,7 @@ Address + cím src/app/components/search-form/search-results/search-results.component.html 27 @@ -6305,6 +6841,7 @@ Block + blokk src/app/components/search-form/search-results/search-results.component.html 33 @@ -6313,6 +6850,7 @@ Addresses + címek src/app/components/search-form/search-results/search-results.component.html 39 @@ -6321,6 +6859,7 @@ Mining Pools + Bányász pool-ok src/app/components/search-form/search-results/search-results.component.html 47 @@ -6329,7 +6868,7 @@ Lightning Nodes - Villám Nodeok + Lightning csomópontok src/app/components/search-form/search-results/search-results.component.html 56 @@ -6338,7 +6877,7 @@ Lightning Channels - Villám Csatornák + Lightning csatornák src/app/components/search-form/search-results/search-results.component.html 64 @@ -6347,6 +6886,7 @@ Other Network Address + Egyéb hálózati cím src/app/components/search-form/search-results/search-results.component.html 72 @@ -6355,6 +6895,7 @@ Liquid Asset + Liquid eszköz src/app/components/search-form/search-results/search-results.component.html 86 @@ -6363,13 +6904,81 @@ Go to "" - Ugrás ide: "" + Ugrás ide: &quot;&quot; src/app/components/search-form/search-results/search-results.component.html 93 search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool vBájtonként (sat/vBájt) @@ -6381,44 +6990,32 @@ Clock (Mempool) + Óra (Mempool) src/app/components/statistics/statistics.component.html 17 src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV nézet - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter - Filter + Szűrő src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title Invert - Invertál + Megfordít src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6427,41 +7024,69 @@ vBájtnyi tranzakciók másodpercenként (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second Cap outliers + Kivételek behatárolása src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafikon + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. + Nézd meg a mempool méretét (MvB-ben) és másodpercenkénti tranzakciókat (vB/s-ban) az idő függvényében ábrázolva. src/app/components/statistics/statistics.component.ts 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions + Próba tranzakciók src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6472,368 +7097,16 @@ Raw hex + Nyers hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Azonnal - - src/app/components/time/time.component.ts - 107 - - - - Just now - Épp most - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - ~ belül - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - után - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent + Elküldve src/app/components/tracker/tracker-bar.component.html 2 @@ -6842,6 +7115,7 @@ Soon + Hamarosan src/app/components/tracker/tracker-bar.component.html 6 @@ -6867,106 +7141,129 @@ Hátralévő idő src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta Not any time soon + Nem belátható időn belül src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon Confirmed at + Megerősítve ekkor src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at Block height + Blokk magasság src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height Your transaction has been accelerated + A tranzakciód fel lett gyorsítva src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated Waiting for your transaction to appear in the mempool + Várakozás míg a tranzakciód megjelenik a mempool-ban src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting Your transaction is in the mempool, but it will not be confirmed for some time. + A tranzakciód a mempool-ban van, de nem lesz megerősítve egy darabig. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending Your transaction is near the top of the mempool, and is expected to confirm soon. + A tranzakciód közel van a mempool tetejéhez, ezért várhatóan hamar megerősítésre kerül. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon Your transaction is expected to confirm in the next block + A tranzakciód várhatóan a következő blokkban megerősítésre kerül src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block Your transaction is confirmed! - Az ön tranzakciója megerősítve! + A tranzakciód megerősítve! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed Your transaction has been replaced by a newer version! + A tranzakciód lecserélve egy újabb verzió által! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced - - See more details + + Error loading transaction data. + Hiba a tranzakció adat betöltésekor. src/app/components/tracker/tracker.component.html - 193 + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + + + See more details + Több részlet + + src/app/components/tracker/tracker.component.html + 206 accelerator.show-more-details @@ -6979,42 +7276,94 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 Get real-time status, addresses, fees, script info, and more for transaction with txid . + Kapj valós idejű állapotképet, címeket, díjakat, szkript infót és sok mást a tranzakcióról ezzel a txid-vel: . src/app/components/tracker/tracker.component.ts 413 src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 + + Related Transactions + + src/app/components/transaction/cpfp-info.component.html + 3 + + CPFP List + transaction.related-transactions + + + Descendant + Utód + + src/app/components/transaction/cpfp-info.component.html + 20 + + + src/app/components/transaction/cpfp-info.component.html + 32 + + Descendant + transaction.descendant + + + Ancestor + Előd + + src/app/components/transaction/cpfp-info.component.html + 44 + + Transaction Ancestor + transaction.ancestor + + + Features + Jellemzők + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + Coinbase Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + src/app/components/transaction/transaction-preview.component.html 43 - - src/app/components/transaction/transaction.component.html - 520 - src/app/components/transactions-list/transactions-list.component.html - 54 + 90 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -7022,66 +7371,215 @@ transactions-list.coinbase - - Descendant - Utód + + This transaction was projected to be included in the block + Ez a tranzakció előjelzés szerint kibányászásra került a blokkban - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 - - src/app/components/transaction/transaction.component.html - 100 - - Descendant - transaction.descendant + Expected in block tooltip - - Ancestor - Felmenő + + Expected in Block + Várható blokk - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 - Transaction Ancestor - transaction.ancestor + Expected in Block + tx-features.tag.expected - - Hide accelerator + + This transaction was seen in the mempool prior to mining + Ezt a tranzakciót láttuk a mempool-ban a kibányászás előtt - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Látta a Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Ez a tranzakció hiányzott a mempool-ból kibányászás előtt + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool + Nem látta a Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band + Ez a tranzakció talán sávon kívül lett hozzáadva - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Ez a tranzakció talán sávon kívül lett előrébb hozva + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Ez a tranzakció ütközött a mempool-ban egy másik verziójával + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow - Áramlás + Folyamatábra - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7089,39 +7587,51 @@ Hide diagram Diagram elrejtése + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more Továbbiak megjelenítése + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more Inputs & Outputs - Bemenetek és Kimenetek + Bemenetek & kimenetek - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7129,167 +7639,140 @@ Show diagram Diagram megjelenítése + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize - Módosított vsize + Módosított virtuális méret + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize Locktime - Zárolási idő + Időzár + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops - Sigops + Sigop-ok + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + Gyorsító elrejtése + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + RBF idővonal + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + Gyorsítási idővonal + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. Nem található tranzakció. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found Waiting for it to appear in the mempool... - Várakozás arra hogy a mempoolban feltünjön... + Várakozás arra, hogy a mempoolban feltűnjön... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Jellemzők - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Elvárt Blokk - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Újjonnan Létrehozott Érmék) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7298,36 +7781,44 @@ Bekötés src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in - - ScriptSig (ASM) - SzkriptSzig (ASM) + + Inscription src/app/components/transactions-list/transactions-list.component.html - 105 + 123 + + transaction.inscription-tag + + + ScriptSig (ASM) + SzkriptSzignó (ASM) + + src/app/components/transactions-list/transactions-list.component.html + 157 ScriptSig (ASM) transactions-list.scriptsig.asm ScriptSig (HEX) - SzkriptSzig (HEX) + SzkriptSzignó (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex Witness - Szemtanú + Tanú src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7336,25 +7827,33 @@ P2SH kiváltási szkript src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript P2WSH witness script - P2WSH szemtanú szkript + P2WSH tanú szkript src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7363,7 +7862,7 @@ nSzekvencia src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7372,16 +7871,16 @@ Előző kimeneti szkript src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script Previous output type - Előző kimeneti típúsok + Előző kimeneti típusok src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7390,7 +7889,7 @@ Kiváltás erre src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7399,7 +7898,7 @@ SzkriptPublikusKulcs (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7409,7 +7908,7 @@ SzkriptPublikusKulcs (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7419,13 +7918,45 @@ További bemenetek megjelenítése a díjadatok megjelenítéséhez src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs - más bemenetek + további bemenetek src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html 12 @@ -7434,7 +7965,7 @@ other outputs - más kiemenetek + további kimenetek src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html 13 @@ -7456,7 +7987,7 @@ 1 block earlier - 1 blokkal hamarább + 1 blokkal hamarabb src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html 123 @@ -7474,6 +8005,7 @@ in the same block + ugyanabban a blokkban src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html 131 @@ -7482,6 +8014,7 @@ blocks earlier + blokkal korábban src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html 137 @@ -7508,7 +8041,7 @@ This transaction saved % on fees by using native SegWit - Ez a tranzakció % -ot takarított meg a díjakból a natív SegWit használatával + Ez a tranzakció % -ot takarított meg a díjakból a tiszta SegWit használatával src/app/components/tx-features/tx-features.component.html 2 @@ -7535,7 +8068,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit - Ez a tranzakció % -os díjakat takarított meg a SegWit használatával, és további % -os megtakarítást érhetett el, ha teljes mértékben vált a natív SegWitre + Ez a tranzakció % -os díjat takarított meg a SegWit használatával, és további % -os megtakarítást érhetett volna el, ha vált tiszta SegWitre src/app/components/tx-features/tx-features.component.html 4 @@ -7544,7 +8077,7 @@ This transaction could save % on fees by upgrading to native SegWit or % by upgrading to SegWit-P2SH - Ez a tranzakció % -ot takaríthat meg a díjakból, ha natív SegWitre vált, vagy % -ot, ha SegWit-P2SH-ra frissít + Ez a tranzakció % -ot takaríthat meg a díjakból, ha tiszta SegWitre vált, vagy % -ot, ha SegWit-P2SH-ra frissít src/app/components/tx-features/tx-features.component.html 6 @@ -7553,7 +8086,7 @@ This transaction uses Taproot and thereby saved at least % on fees - Ez a tranzakció Taprootot használ, és ezáltal legalább % -ot takarít meg a díjakon + Ez a tranzakció Taproot-ot használ, ezért legalább % megtakarítást jelent a díjakon src/app/components/tx-features/tx-features.component.html 12 @@ -7562,7 +8095,7 @@ This transaction uses Taproot and already saved at least % on fees, but could save an additional % by fully using Taproot - Ez a tranzakció Taprootot használ, és már legalább % -ot megtakarított a díjakból, de további % -ot takaríthat meg a Taproot teljes használatával + Ez a tranzakció Taproot-ot használ, ezért legalább % -ot megtakarított a díjakból, de további % -ot takaríthatna meg a Taproot teljes használatával src/app/components/tx-features/tx-features.component.html 14 @@ -7580,7 +8113,7 @@ This transaction does not use Taproot - Ez a tranzakció nem használja a Taproot-ot + Ez a tranzakció nem használ Taproot-ot src/app/components/tx-features/tx-features.component.html 18 @@ -7598,7 +8131,7 @@ This transaction supports Replace-By-Fee (RBF) allowing fee bumping - Ez a tranzakció támogatja a Replace-By-Fee (RBF) funkciót, amely lehetővé teszi a díjak felfutását + Ez a tranzakció támogatja a tranzakciós díj csere (RBF) funkciót, amely lehetővé teszi a díjak megemelését src/app/components/tx-features/tx-features.component.html 28 @@ -7651,8 +8184,67 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings + Liquid szövetségi birtoklás src/app/dashboard/dashboard.component.html 165 @@ -7665,6 +8257,7 @@ Federation Timelock-Expired UTXOs + Szövetségi lejárt időzáras UTXO-k src/app/dashboard/dashboard.component.html 174 @@ -7675,8 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7706,6 +8299,7 @@ mempool.space merely provides data about the Bitcoin network. It cannot help you with retrieving funds, wallet issues, etc.For any such requests, you need to get in touch with the entity that helped make the transaction (wallet software, exchange company, etc). + mempool.space csupán adatot szolgáltat a Bitcoin hálózatról. Nem tud segíteni tőke helyreállításban, tárca problémával, stb.Minden ehhez hasonló esetben fordulj ahhoz az alanyhoz aki segített a kapcsolódó tranzakció létrehozásában (tárca alkalmazás, váltó- vagy brókercég, stb). src/app/docs/api-docs/api-docs.component.html 15,16 @@ -7728,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7743,25 +8333,16 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Alaphelyzeti push: művelet: 'kell', data: ['blocks', ...] hogy kifejezd mit szeretnél pusholni. Elérhető: blocks, mempool-blocks, live-2h-chart, and stats.Pusholjon tranzakciókat címekhez fogva: 'cím-követés': '3PbJ...bF9B' az összes új tranzakció fogadásához, amely ezt a címet tartalmazza bemenetként vagy kimenetként. Tranzakciók tömbjét adja vissza. cím-tranzakciókúj mempool tranzakciókhoz , és block-tranzakciók az új blokk megerősített tranzakciókhoz. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example - Kód Példa + Kód példa src/app/docs/code-template/code-template.component.html 6 @@ -7782,7 +8363,7 @@ Install Package - Csomag Telepítése + Csomag telepítése src/app/docs/code-template/code-template.component.html 23 @@ -7798,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentáció + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ GYIK @@ -7808,6 +8398,7 @@ Get answers to common questions like: What is a mempool? Why isn't my transaction confirming? How can I run my own instance of The Mempool Open Source Project? And more. + Kapj választ gyakran felmerülő kérdésekre mint: Mi az a mempool? Miért nem kap megerősítést a tranzakcióm? Hogyan tudok saját példányt futtatni a Mempool nyíl forrású projektből? És sok más. src/app/docs/docs/docs.component.ts 47 @@ -7823,6 +8414,7 @@ Documentation for the liquid.network REST API service: get info on addresses, transactions, assets, blocks, and more. + Dokumentáció a liquid.network REST API szolgáltatáshoz: kapj infót címekről, tranzakciókról, eszközökről, blokkokról és sok egyébről. src/app/docs/docs/docs.component.ts 53 @@ -7830,6 +8422,7 @@ Documentation for the mempool.space REST API service: get info on addresses, transactions, blocks, fees, mining, the Lightning network, and more. + Dokumentáció a mempool.space REST API szolgáltatáshoz: kapj infót címekről, tranzakciókról, blokkokról, díjakról, bányászokról, a Lightning hálózatról és sok egyébről. src/app/docs/docs/docs.component.ts 55 @@ -7837,6 +8430,7 @@ WebSocket API + WebSocket API src/app/docs/docs/docs.component.ts 59 @@ -7844,6 +8438,7 @@ Documentation for the liquid.network WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Dokumentáció a liquid.network WebSocket API szolgáltatáshoz: kapj valós idejű infót blokkokról, mempool-ról, tranzakciókról, címekről és sok egyébről. src/app/docs/docs/docs.component.ts 61 @@ -7851,6 +8446,7 @@ Documentation for the mempool.space WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Dokumentáció a mempool.space WebSocket API szolgáltatáshoz: kapj valós idejú infót blokkokról, mempool-ról, tranzakciókról, címekről és sok egyébről. src/app/docs/docs/docs.component.ts 63 @@ -7866,6 +8462,7 @@ Documentation for our Electrum RPC interface: get instant, convenient, and reliable access to an Esplora instance. + Dokumentáció az Electrum RPC felületünkhöz: kapj azonnali, kényelmes és megbízható hozzáférést egy Espora csomóponthoz. src/app/docs/docs/docs.component.ts 68 @@ -7873,7 +8470,7 @@ Base fee - Bázis díj + Alapdíj src/app/lightning/channel/channel-box/channel-box.component.html 29 @@ -7886,7 +8483,7 @@ mSats - mSats + mSat src/app/lightning/channel/channel-box/channel-box.component.html 35 @@ -7907,7 +8504,7 @@ This channel supports zero base fee routing - Ez a csatorna támogatja a nulla alapdíjas útválasztást + Ez a csatorna támogatja az alapdíj nélküli útválasztást src/app/lightning/channel/channel-box/channel-box.component.html 44 @@ -7916,7 +8513,7 @@ Zero base fee - Zeró alapdíj + Nincs alapdíj src/app/lightning/channel/channel-box/channel-box.component.html 45 @@ -7925,7 +8522,7 @@ This channel does not support zero base fee routing - Ez a csatorna nem támogatja a nulla alapdíjas útválasztást + Ez a csatorna nem támogatja az alapdíj nélküli útválasztást src/app/lightning/channel/channel-box/channel-box.component.html 50 @@ -8011,7 +8608,7 @@ lightning channel - villám csatorna + Lightning csatorna src/app/lightning/channel/channel-preview.component.html 3 @@ -8092,7 +8689,7 @@ Capacity - Kapacítás + Kapacitás src/app/lightning/channel/channel-preview.component.html 27 @@ -8182,9 +8779,10 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. + Áttekintés a Lightning csatornáról. Nézd meg a csatorna kapacitást, a bevont Lightning csomópontokat, kapcsolódó főlánc tranzakciókat és sok mást. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8193,7 +8791,7 @@ Lightning channel - Villám csatorna + Lightning csatorna src/app/lightning/channel/channel.component.html 4 @@ -8252,7 +8850,7 @@ Closed by - Lezárva átala + Lezárva általa src/app/lightning/channel/channel.component.html 59 @@ -8337,7 +8935,7 @@ Alias - Alias + Álnév src/app/lightning/channels-list/channels-list.component.html 38 @@ -8405,7 +9003,7 @@ Avg Capacity - Átlag Kapacítás + Átlag kapacitás src/app/lightning/channels-statistics/channels-statistics.component.html 13 @@ -8418,7 +9016,7 @@ Avg Fee Rate - Átlag Díj Ráta + Átlag díj arány src/app/lightning/channels-statistics/channels-statistics.component.html 26 @@ -8431,7 +9029,7 @@ The average fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm - Az útválasztási nódok által felszámított átlagos díjtétel, figyelmen kívül hagyva a > 0,5% -os vagy 5000ppm-es díjakat + Az útválasztási csomópontok által felszámított átlagos díjtétel, figyelmen kívül hagyva a > 0,5% -os vagy 5000ppm-es díjakat src/app/lightning/channels-statistics/channels-statistics.component.html 28 @@ -8440,7 +9038,7 @@ Avg Base Fee - Átlag Bázis Díj + Átlag alapdíj src/app/lightning/channels-statistics/channels-statistics.component.html 41 @@ -8453,7 +9051,7 @@ The average base fee charged by routing nodes, ignoring base fees > 5000ppm - Az útválasztási nódok által felszámított átlagos alapdíj, figyelmen kívül hagyva az alapdíjakat > 5000ppm + Az útválasztó csomópontok által felszámított átlagos alapdíj, figyelmen kívül hagyva az alapdíjakat > 5000ppm src/app/lightning/channels-statistics/channels-statistics.component.html 43 @@ -8462,7 +9060,7 @@ Med Capacity - Közepes Kapacítás + Közepes kapacitás src/app/lightning/channels-statistics/channels-statistics.component.html 59 @@ -8471,7 +9069,7 @@ Med Fee Rate - Közép Díj Ráta + Közép díj arány src/app/lightning/channels-statistics/channels-statistics.component.html 72 @@ -8480,7 +9078,7 @@ The median fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm - Az útválasztási nódok által felszámított medián díjtétel, figyelmen kívül hagyva a > 0,5% vagy 5000 ppm díjakat + Az útválasztó csomópontok által felszámított medián díjtétel, figyelmen kívül hagyva a > 0,5% vagy 5000 ppm díjakat src/app/lightning/channels-statistics/channels-statistics.component.html 74 @@ -8489,7 +9087,7 @@ Med Base Fee - Közép Alapdíj + Közép alapdíj src/app/lightning/channels-statistics/channels-statistics.component.html 87 @@ -8498,7 +9096,7 @@ The median base fee charged by routing nodes, ignoring base fees > 5000ppm - Az útválasztási nódok által felszámított medián alapdíj, figyelmen kívül hagyva a > 5000ppm alapdíjakat + Az útválasztó csomópontok által felszámított medián alapdíj, figyelmen kívül hagyva a > 5000ppm alapdíjakat src/app/lightning/channels-statistics/channels-statistics.component.html 89 @@ -8507,7 +9105,7 @@ Lightning node group - Villám node csoport + Lightning csomópont csoport src/app/lightning/group/group-preview.component.html 3 @@ -8520,7 +9118,7 @@ Nodes - Nódok + Csomópontok src/app/lightning/group/group-preview.component.html 25 @@ -8561,7 +9159,7 @@ Liquidity - Likvidítás + Likviditás src/app/lightning/group/group-preview.component.html 29 @@ -8680,6 +9278,7 @@ Connect + Csatlakozás src/app/lightning/group/group.component.html 73 @@ -8730,6 +9329,7 @@ Penalties + Büntetések src/app/lightning/justice-list/justice-list.component.html 4 @@ -8738,7 +9338,7 @@ Network Statistics - Hálózati Statisztikák + Hálózati statisztika src/app/lightning/lightning-dashboard/lightning-dashboard.component.html 10 @@ -8747,7 +9347,7 @@ Channels Statistics - Csatorna Statisztika + Csatorna statisztika src/app/lightning/lightning-dashboard/lightning-dashboard.component.html 24 @@ -8756,7 +9356,7 @@ Lightning Network History - Villámhálózati Események + Események a Lightning hálózaton src/app/lightning/lightning-dashboard/lightning-dashboard.component.html 52 @@ -8765,7 +9365,7 @@ Liquidity Ranking - Likviditási Besorolás + Likviditási besorolás src/app/lightning/lightning-dashboard/lightning-dashboard.component.html 66 @@ -8786,7 +9386,7 @@ Connectivity Ranking - Csatlakozottsági Besorolás + Csatlakozottsági besorolás src/app/lightning/lightning-dashboard/lightning-dashboard.component.html 80 @@ -8805,8 +9405,21 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning böngésző + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). + Kapj statisztikát a Lightning hálózatról (összevont kapacitás, csatlaozottság, stb), Lightning csomópontokról (csatornák, likviditás, stb) és Lightning csatornákról (állapot, díjak, stb). src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts 34 @@ -8823,7 +9436,7 @@ Outgoing Fees - Kimenő Díjak + Kimenő díjak src/app/lightning/node-fee-chart/node-fee-chart.component.ts 179 @@ -8835,7 +9448,7 @@ Incoming Fees - Beérkező Díjak + Beérkező díjak src/app/lightning/node-fee-chart/node-fee-chart.component.ts 187 @@ -8864,7 +9477,7 @@ Lightning node - Villám node + Lightning csomópont src/app/lightning/node/node-preview.component.html 3 @@ -8881,7 +9494,7 @@ Active capacity - Átlagos kapacítás + Átlagos kapacitás src/app/lightning/node/node-preview.component.html 20 @@ -8916,9 +9529,10 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. + Áttekintés a Lightning hálózat nevű csomópontjáról. Nézd meg a csatornákat, kapacitást, helyszínt, díj statisztikát és sok mást. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -8954,7 +9568,7 @@ ISP - ISP + Internetszolgáltató src/app/lightning/node/node.component.html 92 @@ -8967,7 +9581,7 @@ Exclusively on Tor - Exkluzívan a Tor-on + Kizárólag Tor-on src/app/lightning/node/node.component.html 100 @@ -8976,6 +9590,7 @@ Decoded + Visszafejtve src/app/lightning/node/node.component.html 134 @@ -9077,7 +9692,7 @@ Node: - Node: + Csomópont: src/app/lightning/node/node.component.ts 63 @@ -9085,7 +9700,7 @@ (Tor nodes excluded) - (Tor nódok kiszűrve) + (Tor csomópontok nélkül) src/app/lightning/nodes-channels-map/nodes-channels-map.component.html 22 @@ -9106,7 +9721,7 @@ Lightning Nodes Channels World Map - Villám Nódok Csatorna Világtérképe + Lightning csomópont csatorna világtérképe src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts 73 @@ -9114,6 +9729,7 @@ See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + Nézd meg a nem-Tor Lightning hálózat csomópontok csatornáit világtérképen ábrázolva. Mutass/koppints a térkép pontjaira a csomópontok nevéért és részletekért. src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts 74 @@ -9121,7 +9737,7 @@ No geolocation data available - Geolokációs adat nem elérhető + Földrajzi adat nem elérhető src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts 245 @@ -9129,7 +9745,7 @@ Active channels map - Aktív csatorna térkép + Aktív csatornák térképe src/app/lightning/nodes-channels/node-channels.component.html 3 @@ -9138,6 +9754,7 @@ See the locations of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + Nézd meg a nem-Tor Lightning hálózat csomópontok helyeit világtérképen ábrázolva. Mutass/koppints a térkép pontjaira a csomópontok nevéért és részletekért. src/app/lightning/nodes-map/nodes-map.component.ts 52 @@ -9145,6 +9762,7 @@ See the number of Lightning network nodes visualized over time by network: clearnet only (IPv4, IPv6), darknet (Tor, I2p, cjdns), and both. + Nézd meg a Lightning hálózat csomópontok számát az idő függvényében ábrázolva: csak clearnet (IPv4, IPv6), darknet (Tor, I2p, cjdns), vagy mindkettő. src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts 74 @@ -9164,7 +9782,7 @@ Clearnet and Darknet - Clearnet és Darknet + Clearnet és darknet src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts 176 @@ -9176,7 +9794,7 @@ Clearnet Only (IPv4, IPv6) - Csakis Clearnet (IPv4, IPv6) + Csak clearnet (IPv4, IPv6) src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts 197 @@ -9188,7 +9806,7 @@ Darknet Only (Tor, I2P, cjdns) - Csak Darknet (Tor, I2P, cjdns) + Csak darknet (Tor, I2P, cjdns) src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts 218 @@ -9213,6 +9831,7 @@ See a geographical breakdown of the Lightning network: how many Lightning nodes are hosted in countries around the world, aggregate BTC capacity for each country, and more. + Nézd meg a földrajzi eloszlását a Lightning hálózatnak: hány Lightning csomópont működik a világ országaiban, összevont BTC kapacitás országonként és sok más. src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts 47 @@ -9220,7 +9839,7 @@ nodes - nodeok + Csomópontok src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts 104 @@ -9248,7 +9867,7 @@ Lightning nodes in - Villámnodeok itt + Lightning csomópontok itt src/app/lightning/nodes-per-country/nodes-per-country.component.html 3,4 @@ -9257,7 +9876,7 @@ ISP Count - ISP Szám + Internetszolgáltatók száma src/app/lightning/nodes-per-country/nodes-per-country.component.html 34 @@ -9266,7 +9885,7 @@ Top ISP - Top ISP + Legjobb internetszolgáltató src/app/lightning/nodes-per-country/nodes-per-country.component.html 38 @@ -9275,7 +9894,7 @@ Lightning nodes in - Villám nódok itt + Lightning csomópontok itt src/app/lightning/nodes-per-country/nodes-per-country.component.ts 43 @@ -9283,6 +9902,7 @@ Explore all the Lightning nodes hosted in and see an overview of each node's capacity, number of open channels, and more. + Böngéssz az összes székhelyű Lightning csomópont között és nézd meg az áttekintőt az egyes csomópontok kapacitásáról, nyitott csatornák számáról és sok másról. src/app/lightning/nodes-per-country/nodes-per-country.component.ts 44 @@ -9290,7 +9910,7 @@ Clearnet Capacity - Clearnet Kapacítás + Clearnet kapacitás src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 6 @@ -9303,7 +9923,7 @@ How much liquidity is running on nodes advertising at least one clearnet IP address - Mennyi likviditás fut a legalább egy clearnet IP-címet hirdető nódokon + Mennyi likviditás fut a legalább egy clearnet IP-címet hirdető csomópontokon src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 8 @@ -9312,7 +9932,7 @@ Unknown Capacity - Ismeretlen Kapacítás + Ismeretlen kapacitás src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 13 @@ -9325,7 +9945,7 @@ How much liquidity is running on nodes which ISP was not identifiable - Mennyi likviditás fut azon nódokon, amelyek internetszolgáltatója nem volt azonosítható + Mennyi likviditás fut azon csomópontokon, amelyek internetszolgáltatója nem volt azonosítható src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 15 @@ -9334,7 +9954,7 @@ Tor Capacity - Tor Kapacítás + Tor kapacitás src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 20 @@ -9347,7 +9967,7 @@ How much liquidity is running on nodes advertising only Tor addresses - Mennyi likviditás fut a csak Tor-címeket hirdető nódokon + Mennyi likviditás fut a csak Tor-címeket hirdető csomópontokon src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 22 @@ -9356,7 +9976,7 @@ Top 100 ISPs hosting LN nodes - A 100 legjobb LN-nódot szolgáltató internetszolgáltató + A 100 legjobb LN-csomópontot szolgáltató internetszolgáltató src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 31 @@ -9365,6 +9985,7 @@ Browse the top 100 ISPs hosting Lightning nodes along with stats like total number of nodes per ISP, aggregate BTC capacity per ISP, and more + Böngéssz a legjobb 100 Lightning csomópontot működtető internetszolgáltató között olyan statisztikák mellett, mint az összes csomópont az internetszolgáltatónál, együttes BTC kapacitás internetszolgáltatónként és sok mást. src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts 54 @@ -9384,7 +10005,7 @@ Lightning ISP - Villám ISP + Lightning ISP src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html 3 @@ -9393,7 +10014,7 @@ Top country - Top ország + Legjobb ország src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html 39 @@ -9406,7 +10027,7 @@ Top node - Top node + Legjobb csomópont src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html 45 @@ -9415,10 +10036,10 @@ Lightning nodes on ISP: [AS] - Villám nódok az internetszolgáltatón: [MINT] + Lightning csomópontok az internetszolgáltatón: [MINT] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9427,9 +10048,10 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. + Böngéssz az összes Bitcoin Lightning csomópont között ettől az internetszolgáltatótól: [mint] és nézd meg az egyesített statisztikákat mint csomópontok teljes száma, teljes kapacitás és sok mást ehhez az internetszolgáltatóhoz. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9438,7 +10060,7 @@ Lightning nodes on ISP: - Villámnódok az internetszolgáltatón: + Lightning csomópontok az internetszolgáltatón: src/app/lightning/nodes-per-isp/nodes-per-isp.component.html 2,4 @@ -9456,7 +10078,7 @@ Active nodes - Aktív nódok + Aktív csomópontok src/app/lightning/nodes-per-isp/nodes-per-isp.component.html 14 @@ -9465,7 +10087,7 @@ Top 100 oldest lightning nodes - 100 legrégebbi lightning nodeok + 100 legrégebbi lightning csomópont src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html 3 @@ -9474,7 +10096,7 @@ Oldest lightning nodes - Legidősebb villám nodeok + Legidősebb lightning csomópontok src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts 27 @@ -9482,6 +10104,7 @@ See the oldest nodes on the Lightning network along with their capacity, number of channels, location, etc. + Nézd meg a legrégebbi csomópontokat a Lightning hálózaton együtt a kapacitásukkal, csatornák számával, helyszínével, stb. src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts 28 @@ -9489,6 +10112,7 @@ See Lightning nodes with the most BTC liquidity deployed along with high-level stats like number of open channels, location, node age, and more. + Nézd meg a legnagyobb BTC likviditással rendelkező Lightning csomópontokat magas szintű statisztikák mellett, mint nyitott csatornák száma, csomópont kora és sok más. src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts 35 @@ -9496,6 +10120,7 @@ See Lightning nodes with the most channels open along with high-level stats like total node capacity, node age, and more. + Nézd meg a legtöbb nyitott csatornával rendelkező Lightning csomópontokat magas szintű statisztikák mellett, mint teljes csatorna kapacitás, csomópont kora és sok más. src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts 39 @@ -9503,7 +10128,7 @@ Oldest nodes - Legrégebbi nodeok + Legrégebbi csomópontok src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html 36 @@ -9512,7 +10137,7 @@ Top lightning nodes - Top villám nodeok + Legjobb lightning csomópontok src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts 22 @@ -9520,6 +10145,7 @@ See the top Lightning network nodes ranked by liquidity, connectivity, and age. + Nézd meg a legjobb Lightning csomópontokat a hálózaton likviditás, csatlakozottság és kor szerint rangsorolva. src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts 23 @@ -9527,13 +10153,347 @@ See the capacity of the Lightning network visualized over time in terms of the number of open channels and total bitcoin capacity. + Nézd meg a Lightning hálózat kapacitását a nyitott csatornák és teljes Bitcoin kapacitás szerint az idő függvényében ábrázolva. src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts 71 + + Immediately + Azonnal + + src/app/services/time.service.ts + 71 + + + + Just now + Épp most + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + ~ belül + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ~ múlva + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + után + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + korábban + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee + díj src/app/shared/components/address-type/address-type.component.html 3 @@ -9542,6 +10502,7 @@ empty + üres src/app/shared/components/address-type/address-type.component.html 6 @@ -9550,6 +10511,7 @@ provably unspendable + bizonyítottan elkölthetetlen src/app/shared/components/address-type/address-type.component.html 18 @@ -9558,14 +10520,24 @@ bare multisig + csupasz társaláíró src/app/shared/components/address-type/address-type.component.html 21 address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation + megerősítés src/app/shared/components/confirmations/confirmations.component.html 4 @@ -9575,6 +10547,7 @@ confirmations + megerősítés src/app/shared/components/confirmations/confirmations.component.html 5 @@ -9618,14 +10591,14 @@ My Account - Az én Fiókom + Saját fiók src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9634,32 +10607,35 @@ Felfedező src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore Test Transaction + Próba tranzakció src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction Connect to our Nodes + Csatlakozz a csomópontunkhoz src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes API Documentation + API dokumentáció src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9668,55 +10644,61 @@ Tudástár src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn What is a mempool? + Mi az a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool What is a block explorer? + Mi az a blokk böngésző? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer What is a mempool explorer? + Mi az a mempool böngésző? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer Why isn't my transaction confirming? + Miért nem kap megerősítést a tranzakcióm? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming More FAQs » + Még több GYIK » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq Research + Kutatás src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9725,73 +10707,79 @@ Hálózat src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks Mainnet Explorer + Mainnet böngésző src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer Testnet3 Explorer + Testnet3 böngésző src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer Testnet4 Explorer + Testnet4 böngésző src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer Signet Explorer + Signet böngésző src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer Liquid Testnet Explorer + Liquid Testnet böngésző src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer Liquid Explorer + Liquid böngésző src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer Tools - Eszközök + Kellékek src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools Clock (Mined) - Óra (Bányászott) + Óra (bányászott) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9800,52 +10788,52 @@ Jogi információk src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal Terms of Service - Általános Szolgáltatási Feltételek + Általános szolgáltatási feltételek src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service Privacy Policy - Adatkezelési Szabályzat + Adatkezelési szabályzat src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy Trademark Policy - Védjegyzési Információ + Védjegyzési információ src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy Third-party Licenses - Harmadikfél Licenszek + Harmadikfél licenszek src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9854,7 +10842,7 @@ This is a test network. Coins have no value. - Ez egy teszt hálózat. Az itt mozgó pénzeknek nincs értéke! + Ez egy teszt hálózat. Az itt mozgó pénznek nincs értéke! src/app/shared/components/testnet-alert/testnet-alert.component.html 4 @@ -9863,33 +10851,27 @@ Testnet3 is deprecated, and will soon be replaced by Testnet4 + Testnet3 elavult ezért hamarosan le lesz cserélve Testnet4-re src/app/shared/components/testnet-alert/testnet-alert.component.html 6 testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment + Kötegelt kifizetés src/app/shared/filters.utils.ts - 108 + 110 Address Types - Cím Típúsok + Cím típusok src/app/shared/filters.utils.ts - 119 + 121 @@ -9897,7 +10879,7 @@ Viselkedés src/app/shared/filters.utils.ts - 120 + 122 @@ -9905,7 +10887,7 @@ Heurisztika src/app/shared/filters.utils.ts - 122 + 124 @@ -9913,12 +10895,12 @@ Sighash Zászlók src/app/shared/filters.utils.ts - 123 + 125 year - év + éve src/app/shared/i18n/dates.ts 3 @@ -9934,7 +10916,7 @@ month - hónap + hónapja src/app/shared/i18n/dates.ts 5 @@ -9950,7 +10932,7 @@ week - hét + hete src/app/shared/i18n/dates.ts 7 @@ -9966,7 +10948,7 @@ day - nap + napja src/app/shared/i18n/dates.ts 9 @@ -9974,7 +10956,7 @@ days - nap + napja src/app/shared/i18n/dates.ts 10 @@ -9982,7 +10964,7 @@ hour - óra + órája src/app/shared/i18n/dates.ts 11 @@ -9990,7 +10972,7 @@ hours - óra + órája src/app/shared/i18n/dates.ts 12 @@ -9998,7 +10980,7 @@ minute - min + perce src/app/shared/i18n/dates.ts 13 @@ -10006,7 +10988,7 @@ minutes - mins + perce src/app/shared/i18n/dates.ts 14 @@ -10014,7 +10996,7 @@ second - másodperc + másodperce src/app/shared/i18n/dates.ts 15 @@ -10022,7 +11004,7 @@ seconds - másodperc + másodperce src/app/shared/i18n/dates.ts 16 @@ -10038,9 +11020,10 @@ Multisig of + Részaláírás ennyiből: src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.it.xlf b/frontend/src/locale/messages.it.xlf index f177061af..c1d6c9a6f 100644 --- a/frontend/src/locale/messages.it.xlf +++ b/frontend/src/locale/messages.it.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Sponsor Aziendali 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Sponsor Whale 🐳 src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Sponsor Chad 💪 src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Sponsor OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integrazioni della comunità src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Alleanze della comunità src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Traduttori del progetto src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Contributori del progetto src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Membri del Progetto src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Manutentori del progetto src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Scusa, qualcosa è andato storto! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Non siamo stati in grado di accelerare questa transazione. Per favore riprova più tardi. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Chiudi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ La tua transazione src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Più antenati non confermati src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Dimensione virtuale src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Dimensione in vbyte di questa transazione (compresi gli antenati non confermati) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Commissioni in-band src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Commissioni già pagate per questa transazione (compresi gli antenati non confermati) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Quanto più veloce? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Ciò ridurrà il tempo di attesa previsto fino alla prima conferma a src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Riepilogo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Tasso di mercato del blocco successivo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Stima della commissione aggiuntiva richiesta src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Tasso target src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Extra fee richiesta src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Commissioni di Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Commissione per il Servizio di Accelerazione src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Supplemento per Dimensione della Transazione src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Costo di accelerazione stimato src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Costo di accelerazione massimo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Costo di accelerazione src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Saldo disponibile src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Torna indietro src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Accelerare la tua transazione Bitcoin? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Aspetta src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Si prevede una conferma src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ La conferma non è prevista in tempi brevi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Per un ulteriore src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Riduzione del tempo di conferma previsto a src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Pagamento a mempool.space per l'accelerazione di txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Il tuo conto verrà addebitato per non più di src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Paga src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Impossibile caricare l'invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Caricamento fattura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - O + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Conferma il tuo pagamento src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Costo aggiuntivo totale src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ con src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Caricamento metodo di pagamento... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Conferma del pagamento src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Stiamo elaborando il tuo pagamento... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Accelerando la transazione src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Confermando la tua accelerazione con i nostri partner delle mining pool... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...scusa, l'operazione sta richiedendo più tempo del previsto... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ La tua transazione è stata accelerata! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. La tua transazione è stata accettata per l'accelerazione dai nostri partner delle mining pool. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Calcolo del costo... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ personalizza src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Accelera a ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Accelerare src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Alla tua transazione verrà assegnata la priorità fino al % dei miner. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Blocco Successivo @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Commisioni di Accelerazione @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ Nessuna transazione accelerata in questo lasso di tempo src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ Al blocco: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ Intorno al blocco: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ Non ci sono accelerazioni attive src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ Non ci sono accelerazioni recenti src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + tutto + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Scopri di più » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ non accelerando src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ Indirizzo: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ Visualizza le transazioni mempool, le transazioni confermate, il saldo e altro per l'indirizzo src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Storia del Saldo src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - tutto - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent recente src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction di transazione src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ di transazioni src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ Errore nel caricamento dei dati dell'indirizzo. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ Ci sono troppe transazioni su questo indirizzo, più di quelle che il tuo backend può gestire. Scopri di più sulla configurazione di un backend più potente. Considera invece la visualizzazione di questo indirizzo sul sito web ufficiale di Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ Saldo confermato src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ UTXO confermate src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ UTXO in sospeso src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ Tipo src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Asset @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Esplora tutti gli asset emessi sulla rete Liquid come L-BTC, L-CAD, USDT e altro ancora. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Corrispondenza src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ Qualunque src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ Tinta src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ Classico src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ Età src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ non disponibile src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ Il tuo browser non supporta questa funzione. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflitto src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ Previsto src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ Effettivo src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ Blocco Previsto src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ Blocco Effettivo src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ Versione src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ Bit src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ Difficoltà src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ Dettagli src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ Errore durante il caricamento dei dati del blocco. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ Perché questo blocco è vuoto? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ Commissioni di accelerazione pagate fuori banda src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ Blocchi src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ Altezza src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ Ricompensa src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ Commissioni src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ Vedi gli ultimi blocchi Liquid con le statistiche di base come l'altezza del blocco, la dimensione del blocco e altro ancora. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ Vedi gli ultimi blocchi Bitcoin con le statistiche di base come l'altezza del blocco, la ricompensa del blocco, la dimensione del blocco e altro ancora. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ Copiato! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ Timeline X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ Consolidamento src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ Dati src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ Importo (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ Richiedi Monete Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ Vedi l'hashrate e la difficoltà per la rete Bitcoin visualizzati nel tempo. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - Dashboard - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafici - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentazione - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Dust Scaduto @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ blocchi src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Peg out in corso... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Numero di volte in cui le disponibilità di BTC della Federazione scendono al di sotto del 95% dell'offerta totale di L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - L-BTC in circolazione + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Vedi le statistiche per le transazioni nella mempool: intervallo di commissioni, dimensione aggregata e altro ancora. I blocchi della mempool vengono aggiornati in tempo reale man mano che la rete riceve nuove transazioni. @@ -5771,15 +5878,15 @@ Accedi src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Ottieni statistiche di mining di Bitcoin in tempo reale come hashrate, regolazione della difficoltà, ricompense per blocco, dominanza del pool e altro ancora. @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Fortuna delle Pool (1 settimana) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ Tutti i minatori src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks blocchi - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ Altro () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ Visualizza le statistiche delle mining pool per : blocchi estratti più recenti, hashrate nel tempo, ricompensa totale del blocco fino ad oggi, indirizzi coinbase conosciuti e altro ancora. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6420,48 @@ Tag Coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Errore durante il caricamento dei dati della pool. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6470,7 @@ Dati non ancora sufficienti src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6478,11 @@ Dominanza delle Pool src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6499,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6511,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Elenco separato da virgole di transazioni raw + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Tariffa massima (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Consentito? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Motivo del rifiuto + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Trasmetti Transazione src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6607,7 @@ Trasmetti una transazione alla rete utilizzando l'hash della transazione. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6647,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6694,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6788,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6908,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool in vByte (sat/vByte) @@ -6594,29 +6994,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Vista TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtro src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7012,7 @@ Inverti src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7021,7 @@ vByte per transazione al secondo (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7030,18 @@ Limiti anomali src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafici + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Visualizza le dimensioni della mempool (in MvB) e le transazioni al secondo (in vB/s) visualizzate nel tempo. @@ -6655,24 +7050,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Visualizza i blocchi Bitcoin e la congestione della mempool in tempo reale in un formato semplificato perfetto per una TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Transazioni Test src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7097,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Elenco separato da virgole di transazioni raw - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Tariffa massima (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Consentito? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Motivo del rifiuto - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Subito - - src/app/components/time/time.component.ts - 107 - - - - Just now - Adesso - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - fa - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - entro ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Dopo - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - prima - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Inviata @@ -7087,11 +7138,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7152,11 @@ Non tanto presto src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7166,7 @@ Confermato a src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7175,7 @@ Altezza del blocco src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7184,7 @@ La tua transazione è stata accelerata src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7193,7 @@ In attesa che la transazione venga visualizzata nella mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7202,7 @@ La tua transazione è nella mempool, ma non sarà confermata in breve tempo. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7211,7 @@ La tua transazione è quasi nella parte alta della mempool e dovrebbe essere confermata presto. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7220,7 @@ La transazione dovrebbe essere confermata nel prossimo blocco src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7229,7 @@ La tua transazione è confermata! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7238,29 @@ La tua transazione è stata sostituita da una versione più recente! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Errore durante il caricamento dei dati della transazione. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Vedi maggiori dettagli src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7273,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7289,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Discendente - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7323,398 @@ Ancestor Antenato - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Caratteristiche + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Si prevedeva che questa transazione fosse inclusa nel blocco + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Prevista nel Blocco + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Questa transazione è stata vista nella mempool prima del mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Vista nella Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Questa transazione nonera presente nella nostra mempool prima del mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Non vista nella mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Questa transazione potrebbe essere stata aggiunta fuori banda + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Questa transazione potrebbe essere stata prioritizzata fuori banda + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Questa transazione è in conflitto con un'altra versione nella nostra mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flusso + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Nascondi diagramma + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Mostra di più + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Input & Output + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Mostra diagramma + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize adattato + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Nascondi l'acceleratore src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7723,7 @@ Cronologia RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7733,17 @@ Cronologia Accelerazione src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flusso - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Nascondi diagramma - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Mostra di più - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Input & Output - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Mostra diagramma - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize adattato - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transazione non trovata. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7752,24 @@ Aspettando che appaia nella mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Errore durante il caricamento dei dati della transazione. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Caratteristiche - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Si prevedeva che questa transazione fosse inclusa nel blocco - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Prevista nel Blocco - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Questa transazione è stata vista nella mempool prima del mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Vista nella Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Questa transazione nonera presente nella nostra mempool prima del mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Non vista nella mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Questa transazione potrebbe essere stata aggiunta fuori banda - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Questa transazione potrebbe essere stata prioritizzata fuori banda - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Questa transazione è in conflitto con un'altra versione nella nostra mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Bitcoin Appena Generati) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7778,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7805,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7815,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7824,24 @@ Script di riscatto P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7850,7 @@ Script witness P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7859,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7868,7 @@ Script output precedente src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7877,7 @@ Tipo di output precedente src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7886,7 @@ Peg-out a src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7895,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7905,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7915,42 @@ Mostra più input per rivelare i dati sulle commissioni src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs altri input @@ -7896,6 +8181,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Capitale della Federazione Liquid @@ -7922,9 +8265,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Fornitura di L-BTC contro capitale di BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8319,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8330,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Push predefinito: action: 'want', data: ['blocks', ...] per esprimere cosa vuoi inviare. Disponibili: blocks, mempool-blocks, live-2h-chart, and stats.Push di transazioni collegate all'indirizzo: 'track-address': '3PbJ...bF9B' per ricevere tutte le nuove transazioni contenenti quell'indirizzo come input o output. Restituisce un array di transazioni. address-transactions per nuove transazioni nella mempool e block-transactions per le nuove transazioni confermate nel blocco. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Esempio di Codice @@ -8047,6 +8376,15 @@ API Docs API response + + Documentation + Documentazione + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8441,7 +8779,7 @@ Panoramica per il canale Lightning . Visualizza la capacità del canale, i nodi Lightning coinvolti, le transazioni on-chain correlate e altro ancora. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9402,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Ottieni statistiche sulla rete Lightning (capacità aggregata, connettività, ecc.), sui nodi Lightning (canali, liquidità, ecc.) e sui canali Lightning (stato, tariffe, ecc.). @@ -9179,7 +9529,7 @@ Panoramica del nodo di rete Lightning denominato . Visualizza canali, capacità, posizione, statistiche sulle tariffe e altro ancora. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10036,7 @@ Nodi Lightning su ISP: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10048,7 @@ Sfoglia tutti i nodi Bitcoin Lightning utilizzando l'ISP [AS] e visualizza statistiche aggregate come numero totale di nodi, capacità totale, e altro ancora per l'ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10156,338 @@ 71 + + Immediately + Subito + + src/app/services/time.service.ts + 71 + + + + Just now + Adesso + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + fa + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + entro ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Dopo + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + prima + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee commissione @@ -9842,6 +10524,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation conferma @@ -9901,11 +10591,11 @@ Il Mio Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10604,7 @@ Esplora src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10613,7 @@ Transazione Test src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10623,7 @@ Connettiti ai nostri Nodi src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10632,7 @@ Documentazione dell'API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10641,7 @@ Impara src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10650,7 @@ Cos'è una mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10659,7 @@ Cos'è un block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10668,7 @@ Cos'è un mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10677,7 @@ Perché la mia transazione non viene confermata? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10686,7 @@ Altre FAQ » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10695,7 @@ Ricerca src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10704,7 @@ Reti src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10713,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10722,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10731,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10740,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10749,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10758,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10767,7 @@ Strumenti src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10776,7 @@ Orologio (Minato) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10785,7 @@ Legale src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10794,7 @@ Termini di Servizio src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10804,7 @@ Politica sulla Privacy src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10814,7 @@ Politica sul Trademark src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10824,13 @@ Licenze di terze parti src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Il tuo saldo è troppo basso.Per favore ricarica il tuo account . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10855,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 non è ancora finalizzato e potrebbe essere ripristinato in qualsiasi momento. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Pagamento batch src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10868,7 @@ Tipi di Indirizzi src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10876,7 @@ Comportamento src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10884,7 @@ Euristiche src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10892,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11020,7 @@ Multisig di src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ja.xlf b/frontend/src/locale/messages.ja.xlf index e1ad43042..4f327c2d2 100644 --- a/frontend/src/locale/messages.ja.xlf +++ b/frontend/src/locale/messages.ja.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 企業のスポンサー 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ クジラスポンサー src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ チャッドスポンサー src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OGスポンサー❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ コミュニティーの統合 src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ コミュニティーの提携 src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ プロジェクト翻訳者 src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ プロジェクト貢献者 src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ プロジェクトメンバー src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ プロジェクトメンテナー src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ 申し訳ございません。問題が発生しました。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ この取引を高速化できませんでした。しばらくしてからもう一度お試しください。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ 閉じる src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ ご自身の取引 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ さらに 個の未承認のancestor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ vSize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ この取引のvbytesサイズ(未承認の親取引を含む) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ ネットワーク手数料 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ サトシ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ この取引ですでに支払われた手数料(未承認の親取引を含む) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ どれくらい速くなる? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ これにより、お待ちいただく予想時間がまで短縮されます src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ まとめ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ 次のブロックの手数料レート src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ サトシ/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ 推定追加手数料 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ 目標レート src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ 追加手数料が必要 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ 手数料 + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ 高速化サービス手数料 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ 取引サイズ追加料金 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ 推定高速化コスト src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ 最大高速化コスト src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ 高速化コスト src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ 利用可能残高 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ 戻る src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ ビットコイン取引を高速化しますか? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ お待ちください src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ 承認予想時間 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ 承認されるまで結構待つかも… src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ 追加で src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ 予想される承認時間を に短縮 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - txid .. の高速化のための mempool.space への支払い + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ 最大で口座から引き落とされる金額は src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ お支払い src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ インボイスの読み込みに失敗しました src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ インボイスを読み込んでいます... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - または + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ お支払いの確認 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ 合計追加費用 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ 方法 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ 支払い方法を読み込んでいます... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ お支払いの確認中 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ お支払いを処理中です... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ 取引を高速化中 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ マイニングプールのパートナーとの高速化条件を交渉しています... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...申し訳ありませんが、予想よりも時間がかかっています... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ 取引を高速化中です! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. 取引はマイニング プール パートナーによって高速化の承諾がされました。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... 費用を計算しています... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ カスタマイズ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ ~ sat/vB まで高速化 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ 高速化 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ あなたの取引は、最大 % のマイナーによって優先されます。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - サトシ - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block 次のブロック @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees 高速化手数料 @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ この期間には高速化取引がありません src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ ブロック: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ 近くのブロック: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ 失敗 src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ アクティブな高速化取引はありません src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ 最近の高速化取引はありません src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + 全て + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » 詳細を表示 » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ 高速化してない src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ 残高 src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ アドレス: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ のアドレスに関するmempoolの取引、承認済み取引、残高などを表示する。 src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History 残高履歴 src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - 全て - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent 直近 src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction / 取引 src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ / 取引 src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ アドレスデータを読み込み中にエラーが発生しました。 src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ このアドレスには、バックエンドが処理できる以上のトランザクションの数があります。詳細については、より強力なバックエンドの設定をご覧ください。代わりに、公式 Mempool サイトでこのアドレスを表示することを検討してください。 src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ 承認済み残高 src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ 承認済み UTXO src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ 承認待ちUTXO src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ タイプ src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset アセット @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - L-BTC、L-CAD、USDT など、Liquid ネットワークで発行されたすべての資産を閲覧。 + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - ベータ - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match マッチ src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ どれか src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ 色合い src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ クラシック src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ 古さ src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ 該当なし src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ お使いのブラウザはこの機能をサポートしていません。 src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict 衝突 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ 予定 src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ 予定ブロック src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ 実ブロック src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ バージョン src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ ビット src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ マークル・ルート src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ 難易度 src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ ノンス src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ ブロックヘッダーの16進値 src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ 監査 src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ 詳細 src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ ブロックデータを読み込み中にエラーが発生しました。 src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ このブロックはなぜ空ですか? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ ネットワーク外で支払われた高速化手数料 src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ ブロック src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ 高さ src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ 報酬 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ 手数料 src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ 最新の Liquid ブロックと、ブロックの高さ、ブロック サイズなどの基本的な情報を確認します。 src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ 最新の Bitcoin ブロックと、ブロックの高さ、ブロック報酬、ブロック サイズなどの基本情報を確認します。 src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ コピー されました! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X タイムライン src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ 集約 src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ データ src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ 金額(sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ テストネット4 コインをリクエスト src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - ハッシュレート + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + ハッシュレート src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Bitcoin ネットワークのハッシュレートと難易度を時間の経過に沿って視覚化して表示します。 src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ ハッシュレート(MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - ダッシュボード - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - グラフ - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - ドキュメンテーション - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired 非ダスト期限切れ @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ ブロック src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ ペグアウト進行中... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Liquid連盟のBTC保有量がL-BTC総供給量の95%を下回った回数 + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - 流通しているL-BTC + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - マイニング・ダッシュボード - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - ライトニングエキスプローラ - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - フォーセット - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. mempool内の 取引の情報:手数料の範囲、合計サイズなど。ネットワークが新しい取引を受信すると、mempool ブロックはリアルタイムで更新されます。 @@ -5774,15 +5881,15 @@ ログイン src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + マイニング・ダッシュボード + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. ハッシュレート、難易度調整、ブロック報酬、プールの優位性などのリアルタイムのビットコインマイニング統計を取得します。 @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) プール運(1週間) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ すべてのマイナー src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks ブロック - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ その他 () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ のマイニング プールの情報を表示します。最新のマイニング ブロック、一定期間のハッシュレート、現在までの合計ブロック報酬、既知のコインベース アドレスなどです。 src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ コインベース・タグ src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. プールデータを読み込み中にエラーが発生しました。 src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ まだデータが足りません src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ プールの優位性 src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + カンマ区切りの生の取引のリスト + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + 最大手数料レート(sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + 許可済み? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + 拒否理由 + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction ブロードキャストトランザクション src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ 取引のハッシュを使用して、取引を ネットワークにブロードキャストします。 src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) vByte単位のMempool(サトシ/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - テレビ - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter フィルター src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ 反転 src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ トランザクションvByte毎秒(vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ 外れ値の上限 src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + グラフ + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. 時間の経過に伴って視覚化されたmempool サイズ (MvB 単位) と 1 秒あたりの取引数 (vB/s 単位) を表示します。 @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - テレビに最適な簡略化された形式で、ビットコイン ブロックとmempoolの混雑をリアルタイムで確認できます。 + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions お試しの取引 src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ 生の16進数 src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - カンマ区切りの生の取引のリスト - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - 最大手数料レート(sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - 許可済み? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - 拒否理由 - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - すぐに - - src/app/components/time/time.component.ts - 107 - - - - Just now - ちょうど今 - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - あと〜 - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - ~ 以内 - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - の後 - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent 送信済み @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ 結構待つかも… src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ 承認時刻 src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ ブロック高 src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ 取引が高速化されました src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ mempoolに取引が表示されるのを待っています... src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ 取引はmempoolにありますが、しばらくは承認されません。 src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ あなたの取引はmempoolの上位近くにあり、すぐに承認される予定です。 src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ あなたの取引は次のブロックで承認される予定です src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ 取引が承認されました! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ 取引は新しいバージョンに置き換えられました。 src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + 取引データの読み込み中にエラーが発生しました。 + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details 詳細を見る src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - コインベース + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Ancestor - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + 特徴 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + コインベース + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + この取引はブロックに含まれると予測されていた + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + ブロックに入ると推定 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + この取引は採掘前にmempoolで発見された + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Mempoolで見られた + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + この取引は採掘前にmempoolで発見されていない + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + mempoolで未発見 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + このトランザクションはネットワーク外で追加された可能性があります + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + このトランザクションはネットワーク外で優先された可能性があります + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + この取引はmempool内の別の取引と競合した + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + 流れ + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + 図表を非表示 + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + 詳細を表示 + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + インプットとアウトプット + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + 図表を表示 + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + 調整済みvsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + ロックタイム + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigop + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator 高速化画面を非表示 src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF タイムライン src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ 高速化タイムライン src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - 流れ - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - 図表を非表示 - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - 詳細を表示 - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - インプットとアウトプット - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - 図表を表示 - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - 調整済みvsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - ロックタイム - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigop - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. トランザクションが見つかりません。 src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ mempoolに表示されるのを待っています... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - 取引データの読み込み中にエラーが発生しました。 + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - 特徴 - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - この取引はブロックに含まれると予測されていた - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - ブロックに入ると推定 - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - この取引は採掘前にmempoolで発見された - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Mempoolで見られた - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - この取引は採掘前にmempoolで発見されていない - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - mempoolで未発見 - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - このトランザクションはネットワーク外で追加された可能性があります - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - このトランザクションはネットワーク外で優先された可能性があります - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - この取引はmempool内の別の取引と競合した - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (新しく生成されたコイン) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ ペグイン src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ ウィットネス src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH引き換えスクリプト src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSHウィットネススクリプト src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ 前の出力スクリプト src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ 以前の出力タイプ src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ へのペグアウト src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ 手数料データを見るにはもっとインプットを表示する src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs 他のインプット @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings リキッド・フェデレーションの保有量 @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - BTC保有に対するL-BTCの供給 + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - デフォルト・プッシュ: 行動: 'want', データ: ['ブロック', ...] プッシュしたいことを表現するために. 利用可能: blocksmempool-blockslive-2h-chartstatsこのアドレスと関係するプッシュトランザクション: 'track-address': '3PbJ...bF9B' インプットまたはアウトプットとしてそのアドレスを含む新トランザクションを得るために。トランザクションの配列を返す。 新しいメモリプールトランザクションの場合はaddress-transactions, そして新しいブロック承認済みトランザクションの場合はblock-transactions - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example コード例 @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + ドキュメンテーション + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ よくある質問 @@ -8444,7 +8782,7 @@ Lightning チャネル の概要。チャネル容量、関係する Lightning ノード、関連するオンチェーン トランザクションなどを確認します。 src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + ライトニングエキスプローラ + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Lightning ネットワーク (総容量、接続性など)、Lightning ノード (チャネル、流動性など)、および Lightning チャネル (ステータス、手数料など) に関する情報を取得します。 @@ -9182,7 +9532,7 @@ という名前の Lightning ネットワーク ノードの概要。チャネル、容量、場所、手数料情報などを確認します。 src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ ISP管轄内ライトニングノード: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ [AS] ISP を使用しているすべての Bitcoin Lightning ノードを参照し、ISP の合計ノード数、合計容量などの集計統計情報を確認します。 src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + すぐに + + src/app/services/time.service.ts + 71 + + + + Just now + ちょうど今 + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + あと〜 + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ~ 以内 + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + の後 + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee 手数料 @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation 承認 @@ -9904,11 +10594,11 @@ マイアカウント src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ 探検 src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ お試しの取引 src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ mempoolノードに接続する src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ APIドキュメント src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ 学ぶ src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ mempoolとは何ですか? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ ブロックエクスプローラーとは何ですか? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ mempoolエクスプローラーとは何ですか? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ 取引が承認されないのはなぜですか? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ その他のよくある質問 » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ 研究 src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ ネットワーク src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ メインネットエクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ テストネット3エクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ テストネット4エクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ シグネットエクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ リキッドテストネットエクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ リキッドエクスプローラー src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ ツール src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ 時計 (採掘済み) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ 法令に関する事項 src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ 利用規約 src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ プライバシー・ポリシー src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ 商標ポリシー src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ サードパーティライセンス src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - 残高が低すぎます。アカウントに入金してください + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - 「テストネット4」はまだ完成しておらず、いつでもリセットされる可能性があります。 - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment おまとめ送金 src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ アドレスの種類 src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ 行動 src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ 発見法 src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighashフラグ src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ / のマルチシグ src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ka.xlf b/frontend/src/locale/messages.ka.xlf index 942906e84..d59fa05d9 100644 --- a/frontend/src/locale/messages.ka.xlf +++ b/frontend/src/locale/messages.ka.xlf @@ -297,12 +297,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 კორპორატიული სპონსორები src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -310,7 +330,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -318,7 +338,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -326,7 +346,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -335,7 +355,7 @@ მოხალისეების ინტეგრაციები src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -344,7 +364,7 @@ ალიანსი src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -353,7 +373,7 @@ მთარგმნელები src/app/components/about/about.component.html - 367 + 395 about.translators @@ -362,7 +382,7 @@ მოხალისეები src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -371,7 +391,7 @@ პროექტის წევრები src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -380,7 +400,7 @@ პროექტის შემქმნელები src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -391,14 +411,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -411,7 +423,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -419,7 +431,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -427,11 +439,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -439,7 +451,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -447,7 +459,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -456,7 +468,7 @@ ვირტუალური ზომა src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -467,12 +479,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -481,7 +497,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -489,7 +505,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -498,55 +514,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -556,6 +604,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -614,7 +682,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -622,7 +690,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -630,7 +698,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -638,7 +706,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -646,7 +714,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -655,11 +723,11 @@ სატ/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -676,7 +744,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -684,7 +752,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -692,15 +760,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -708,7 +776,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -716,7 +784,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -724,7 +792,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -732,7 +800,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -740,7 +808,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -748,7 +816,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -756,15 +824,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -772,7 +840,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -780,7 +848,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -788,11 +856,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -800,7 +868,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -808,7 +876,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -816,19 +884,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -836,7 +904,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -844,19 +912,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -865,7 +933,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -873,15 +941,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -889,7 +957,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -897,7 +965,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -905,7 +973,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -913,7 +981,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -921,7 +989,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -929,7 +997,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -937,7 +1005,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -945,7 +1013,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -953,7 +1021,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -961,23 +1029,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -985,7 +1085,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -993,7 +1093,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1001,15 +1101,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1018,60 +1114,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - სატ - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block შემდეგი ბლოკი @@ -1091,6 +1137,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1148,7 +1198,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1171,12 +1221,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1213,27 +1263,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1246,11 +1296,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1266,11 +1316,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1310,12 +1360,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1352,12 +1402,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1385,8 +1435,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1404,6 +1454,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1412,7 +1474,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1424,14 +1486,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1450,7 +1512,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,6 +1581,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1610,12 +1676,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1682,11 +1752,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1702,7 +1772,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1722,7 +1792,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1730,7 +1800,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1738,7 +1808,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1794,6 +1864,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » მეტის ნახვა » @@ -1801,6 +1883,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1833,10 +1919,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1859,7 +1941,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1895,7 +1977,7 @@ Ბალანსი src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1903,15 +1985,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2001,7 +2087,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2022,7 +2108,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2035,7 +2121,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2057,19 +2147,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2079,6 +2169,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2099,7 +2193,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2123,7 +2217,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2140,57 +2234,77 @@ მისამართი: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2198,7 +2312,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2207,11 +2321,11 @@ შეცდომა მისამართის მონაცემების მოძებვნისას. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2219,7 +2333,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2227,7 +2341,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2235,7 +2353,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2243,7 +2365,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2252,18 +2374,27 @@ ტიპი src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset აქტივი @@ -2469,10 +2600,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2492,11 +2619,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2512,11 +2639,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2524,7 +2651,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2550,7 +2677,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2736,7 +2863,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2748,7 +2875,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2796,37 +2923,12 @@ Mempool Goggles™ tooltip - - beta - ბეტა - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match დამთხვევა src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2838,7 +2940,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2846,7 +2948,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2854,7 +2956,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2866,7 +2968,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2930,15 +3032,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -2946,7 +3048,7 @@ მიუწვდომელია src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2954,7 +3056,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3003,8 +3105,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3021,12 +3123,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3042,8 +3148,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3079,7 +3185,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3115,8 +3221,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3128,21 +3242,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3212,7 +3343,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3232,15 +3363,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3268,19 +3403,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3304,11 +3443,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3319,11 +3458,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3334,11 +3473,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3366,23 +3505,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3420,15 +3563,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3449,8 +3592,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3462,7 +3605,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3482,7 +3625,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3549,6 +3692,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3560,11 +3707,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3572,7 +3723,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3600,11 +3751,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3669,7 +3820,11 @@ მოსალოდნელი src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3678,7 +3833,7 @@ მიმდინარე src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3687,7 +3842,7 @@ მოსალოდნელი ბლოკი src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3696,7 +3851,7 @@ მიმდინარე ბლოკი src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3705,11 +3860,15 @@ ვერსია src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3718,7 +3877,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3748,7 +3907,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3757,7 +3916,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3766,7 +3925,7 @@ სირთულე src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3782,11 +3941,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3795,7 +3954,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3804,7 +3963,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3813,11 +3972,11 @@ აუდიტი src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3827,23 +3986,31 @@ დეტალები src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3872,7 +4039,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3881,7 +4048,7 @@ რატომ არის ეს ბლოკი ცარიელი? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3889,7 +4056,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3898,24 +4069,20 @@ ბლოკი src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3923,7 +4090,7 @@ სიმაღლე src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3935,11 +4102,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3952,11 +4123,11 @@ ანაზღაურება src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3964,19 +4135,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3985,15 +4160,15 @@ საკომისიოები src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4002,11 +4177,11 @@ ტრანზაქცია src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4018,11 +4193,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4038,14 +4213,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4056,7 +4231,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4065,7 +4240,7 @@ დაკოპირდა src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4291,7 +4466,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4313,6 +4488,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4321,13 +4504,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4335,7 +4522,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4343,14 +4530,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4358,14 +4545,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4373,7 +4560,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4661,7 +4848,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4669,7 +4856,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4834,7 +5021,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4949,24 +5136,28 @@ lightning.nodes-channels-world-map - - Hashrate - ჰაშრეიტი + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + ჰაშრეიტი src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4978,11 +5169,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -4990,7 +5181,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -4998,11 +5189,11 @@ ჰაშრეიტი src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5045,11 +5236,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5062,11 +5253,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5079,53 +5270,6 @@ master-page.layer2-networks-header - - Dashboard - დაფა - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - დიაგრამები - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - დოკუმენტაცია - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5156,6 +5300,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5263,7 +5411,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5292,11 +5440,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5340,7 +5496,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5384,8 +5540,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5431,9 +5587,8 @@ 163 - - L-BTC in circulation - L-BTC ბრუნვაში + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5452,47 +5607,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning ექსპლორერი - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5547,15 +5661,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5586,6 +5700,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5593,6 +5718,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) pool ის იღბალი (1კვ.) @@ -5610,7 +5787,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5640,7 +5817,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5666,7 +5843,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5713,11 +5890,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5755,7 +5932,7 @@ ყველა მაინერი src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5776,17 +5953,17 @@ blocks - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5797,15 +5974,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5850,11 +6031,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5862,11 +6043,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5885,20 +6066,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5909,6 +6114,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5920,11 +6129,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5936,11 +6145,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5953,11 +6162,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5982,19 +6191,47 @@ Coinbase tag src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6002,18 +6239,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6030,7 +6267,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6042,24 +6279,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6096,17 +6406,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6118,7 +6452,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6212,11 +6546,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6324,6 +6658,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) მემპული vBytes (სატ/vByte) მიხედვით @@ -6341,29 +6743,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - სატელევიზიო ხედვა - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter გაფილტვრა src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6372,7 +6761,7 @@ შებრუნება src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6381,7 +6770,7 @@ ტრანზაქცია vBytes წამში (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6389,10 +6778,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + დიაგრამები + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6400,22 +6797,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6428,362 +6842,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - ახლა - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - წინ - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - შემდეგ - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6819,11 +6881,11 @@ სავარაუდო ლოდინის დრო src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6832,11 +6894,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6845,7 +6907,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6853,7 +6915,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6861,7 +6923,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6869,7 +6931,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6877,7 +6939,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6885,7 +6947,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6893,7 +6955,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6901,7 +6963,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6909,15 +6971,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6930,11 +7004,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6945,44 +7019,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant კლებადი - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -6991,48 +7053,251 @@ Ancestor შთამომავალი - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + მეთოდი - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow Flow - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7040,26 +7305,34 @@ Hide diagram დიაგრამის დამალვა + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more მეტის ჩვენება + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7067,12 +7340,16 @@ Inputs & Outputs შემავალი & გამომავალი - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7080,17 +7357,25 @@ Show diagram დიაგრამის ჩვენება + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7098,27 +7383,83 @@ Locktime Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. ტრანსაქცია ვერ მოიძებნა. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7127,117 +7468,24 @@ დაელოდეთ mempool-ში რომ გამოჩნდეს... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - მეთოდი - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (ახალი ქოინები) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7246,16 +7494,24 @@ მიბმული src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7265,7 +7521,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7275,7 +7531,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7284,16 +7540,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7302,7 +7566,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7311,7 +7575,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7320,7 +7584,7 @@ Previous output script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7329,7 +7593,7 @@ Previous output type src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7338,7 +7602,7 @@ Peg-out to src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7347,7 +7611,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7357,7 +7621,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7367,10 +7631,42 @@ მეტი input-ის ჩვენება, საკომისიოს დატადან src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs სხვა input ები @@ -7595,6 +7891,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7619,8 +7973,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7672,10 +8026,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7687,22 +8037,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example კოდის მაგალითი @@ -7742,6 +8083,15 @@ API Docs API response + + Documentation + დოკუმენტაცია + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8125,7 +8475,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8746,6 +9096,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning ექსპლორერი + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8859,7 +9221,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9358,7 +9720,7 @@ Lightning nodes on ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9369,7 +9731,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9472,6 +9834,334 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + ახლა + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + წინ + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + შემდეგ + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9504,6 +10194,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9558,11 +10256,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9570,7 +10268,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9578,7 +10276,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9587,7 +10285,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9595,7 +10293,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9603,7 +10301,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9611,7 +10309,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9619,7 +10317,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9627,7 +10325,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9635,7 +10333,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9643,7 +10341,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9651,7 +10349,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9659,7 +10357,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9667,7 +10365,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9675,7 +10373,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9683,7 +10381,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9691,7 +10389,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9699,7 +10397,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9707,7 +10405,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9715,7 +10413,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9723,7 +10421,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9731,7 +10429,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9740,7 +10438,7 @@ Მომსახურების პირობები src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9750,7 +10448,7 @@ Კონფიდენციალურობის პოლიტიკა src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9759,7 +10457,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9768,13 +10466,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9797,47 +10495,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9964,7 +10654,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ko.xlf b/frontend/src/locale/messages.ko.xlf index 47c1eac43..d218e6d8f 100644 --- a/frontend/src/locale/messages.ko.xlf +++ b/frontend/src/locale/messages.ko.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 기업 스폰서 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ 고래 스폰서 src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ 차드 스폰서 src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG 스폰서 ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ 커뮤니티 통합 src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ 커뮤니티 연합 src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ 프로젝트 번역자 src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ 프로젝트 참여자 목록 src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ 프로젝트 멤버들 src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ 프로젝트 관리자 목록 src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ 죄송합니다, 문제가 생겼습니다! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ 이 트랜잭션을 가속할 수 없었습니다. 나중에 다시 시도해 주세요. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ 닫기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ 내 트랜잭션 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ 컨펌되지 않은 조상(들) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ 가상 크기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ 트랜잭션 크기 (확인되지 않은 조상 포함) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ 대역 내 수수료 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ 이 트랜잭션이 이미 지불한 수수료 (확인되지 않은 조상 포함) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ 얼마나 더 빠르게 원하시나요? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ 첫 번째 컨펌까지 예상 대기 시간이 로 단축됩니다 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ 요약 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ 다음 블록 시장 수수료율 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ 예측된 추가발생 수수료 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ 목표율 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ 필요한 추가 수수료 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - 멤풀 엑셀러레이터 수수료 + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ 엑셀러레이터 서비스 수수료 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ 트랜잭션 사이즈에 의한 추가 요금 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ 예상 가속 비용 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ 최대 가속 비용 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ 가속 비용 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ 잔액 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ 뒤로가기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ 비트코인 트랜잭션 가속하기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ 기다려 주세요 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ 컨펌이 예상됩니다 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -834,7 +901,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -842,7 +909,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -850,19 +917,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -870,7 +937,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -879,19 +946,19 @@ 결제하기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -901,7 +968,7 @@ 인보이스 불러오기 실패 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -910,16 +977,15 @@ 인보이스 불러오는 중... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - 또는 + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -928,7 +994,7 @@ 결제 내용을 확인해 주세요 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -937,7 +1003,7 @@ 총 추가 비용 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -946,7 +1012,7 @@ 결제 방식 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -955,7 +1021,7 @@ 결제 방식 불러오는 중... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -964,7 +1030,7 @@ 결제 확인 중 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -973,7 +1039,7 @@ 결제 진행중... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -982,7 +1048,7 @@ 트랜잭션 가속 중 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -991,7 +1057,7 @@ 협력 채굴풀들로부터 트랜잭션 가속 확인 중... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1000,7 +1066,7 @@ 죄송합니다, 예상보다 오래 걸리고 있습니다... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1009,24 +1075,56 @@ 트랜잭션이 가속되고 있습니다! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... 비용 계산 중... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1035,7 +1133,7 @@ 커스터마이징 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1044,7 +1142,7 @@ ~sat/vB로 가속하기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1053,15 +1151,11 @@ 가속하기 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1070,60 +1164,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - 사토시 - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block 다음 블록 @@ -1143,6 +1187,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1203,7 +1251,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1226,12 +1274,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1269,27 +1317,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1302,11 +1350,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1322,11 +1370,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1366,12 +1414,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1408,12 +1456,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1441,8 +1489,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1460,6 +1508,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees 가속 수수료 @@ -1469,7 +1529,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1481,14 +1541,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1507,7 +1567,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1580,6 +1640,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1672,12 +1736,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1744,11 +1812,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1764,7 +1832,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1784,7 +1852,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1792,7 +1860,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1800,7 +1868,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1856,6 +1924,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » 더 보기 » @@ -1863,6 +1943,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1895,10 +1979,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1921,7 +2001,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1957,7 +2037,7 @@ 잔액 src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1965,15 +2045,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2063,7 +2147,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2084,7 +2168,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2097,7 +2181,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2119,19 +2207,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2141,6 +2229,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2161,7 +2253,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2185,7 +2277,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2202,57 +2294,77 @@ 주소: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2260,7 +2372,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2269,11 +2381,11 @@ 주소 데이터 불러오기 실패 src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2281,7 +2393,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2289,7 +2401,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2297,7 +2413,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2305,7 +2425,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2314,18 +2434,27 @@ 종류 src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset 자산 @@ -2531,10 +2660,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2554,11 +2679,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2574,11 +2699,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2586,7 +2711,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2612,7 +2737,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2798,7 +2923,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2810,7 +2935,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2858,37 +2983,12 @@ Mempool Goggles™ tooltip - - beta - 베타 - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match 일치 src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2900,7 +3000,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2908,7 +3008,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2916,7 +3016,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2928,7 +3028,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2992,15 +3092,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3008,7 +3108,7 @@ 사용할 수 없음 src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3016,7 +3116,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3065,8 +3165,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3083,12 +3183,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3104,8 +3208,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3141,7 +3245,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3177,8 +3281,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3190,21 +3302,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3275,7 +3404,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3295,15 +3424,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3331,19 +3464,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3367,11 +3504,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3382,11 +3519,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3397,11 +3534,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3429,23 +3566,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3483,15 +3624,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3512,8 +3653,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3525,7 +3666,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3545,7 +3686,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3612,6 +3753,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3623,11 +3768,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3635,7 +3784,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3663,11 +3812,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3732,7 +3881,11 @@ 예상 src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3741,7 +3894,7 @@ 실제 src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3750,7 +3903,7 @@ 예상된 블록 src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3759,7 +3912,7 @@ 실제 블록 src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3768,11 +3921,15 @@ 버전 src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3781,7 +3938,7 @@ 탭루트 src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3811,7 +3968,7 @@ 비트 src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3820,7 +3977,7 @@ 머클 루트 src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3829,7 +3986,7 @@ 난이도 src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3845,11 +4002,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3858,7 +4015,7 @@ 임시값 src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3867,7 +4024,7 @@ 블록헤더 16진수 src/app/components/block/block.component.html - 300 + 307 block.header @@ -3876,11 +4033,11 @@ 감사 src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3890,23 +4047,31 @@ 자세히 src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3935,7 +4100,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3944,7 +4109,7 @@ 이 블록은 왜 트랜잭션이 없나요? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3952,7 +4117,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3961,24 +4130,20 @@ 블록 src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3986,7 +4151,7 @@ 높이 src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3998,11 +4163,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4015,11 +4184,11 @@ 보상 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4027,19 +4196,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4048,15 +4221,15 @@ 수수료 src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4065,11 +4238,11 @@ 트랜잭션 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4081,11 +4254,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4101,14 +4274,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4119,7 +4292,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4128,7 +4301,7 @@ 복사됨! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4354,7 +4527,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4376,6 +4549,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4384,13 +4565,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4398,7 +4583,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4406,14 +4591,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4421,14 +4606,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4436,7 +4621,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4735,7 +4920,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4743,7 +4928,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4908,7 +5093,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5023,24 +5208,28 @@ lightning.nodes-channels-world-map - - Hashrate - 해시레이트 + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + 해시레이트 src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5052,11 +5241,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5064,7 +5253,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5072,11 +5261,11 @@ 해시레이트 (이동 평균) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5119,11 +5308,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5136,11 +5325,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5153,53 +5342,6 @@ master-page.layer2-networks-header - - Dashboard - 대시보드 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - 그래프 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - 문서 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5230,6 +5372,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5337,7 +5483,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5366,11 +5512,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5414,7 +5568,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5458,8 +5612,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5505,9 +5659,8 @@ 163 - - L-BTC in circulation - 유통 중인 L-BTC + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5526,47 +5679,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - 라이트닝 탐색기 - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5621,15 +5733,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5660,6 +5772,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5667,6 +5790,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) 채굴풀들의 운 (1주) @@ -5684,7 +5859,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5714,7 +5889,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5740,7 +5915,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5787,11 +5962,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5829,7 +6004,7 @@ 모든 채굴자 src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5851,17 +6026,17 @@ blocks 개 블록 - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5872,15 +6047,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5925,11 +6104,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5937,11 +6116,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5960,20 +6139,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5984,6 +6187,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5995,11 +6202,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6011,11 +6218,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6028,11 +6235,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6057,19 +6264,47 @@ 코인베이스 태그 src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6077,18 +6312,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6105,7 +6340,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6117,24 +6352,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6171,17 +6479,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6193,7 +6525,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6287,11 +6619,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6399,6 +6731,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) vBytes별 멤풀 (sat.vByte) @@ -6416,29 +6816,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV 뷰 - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter 필터 src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6447,7 +6834,7 @@ 뒤집기 src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6456,7 +6843,7 @@ 초당 트랜잭션 vByte (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6464,10 +6851,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + 그래프 + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6475,22 +6870,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6503,363 +6915,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - 방금 전 - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - 이후 - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent 보내짐 @@ -6896,11 +6955,11 @@ 컨펌까지 남은 예상시간 src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6909,11 +6968,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6923,7 +6982,7 @@ 컨펌 블록 src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6932,7 +6991,7 @@ 블록 높이 src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6941,7 +7000,7 @@ 트랜잭션이 가속되었습니다 src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6949,7 +7008,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6957,7 +7016,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6965,7 +7024,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6973,7 +7032,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6981,7 +7040,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6989,15 +7048,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7010,11 +7081,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7025,44 +7096,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - 코인베이스 + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant 자손 - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7071,48 +7130,251 @@ Ancestor 조상 - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + 기능 - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + 코인베이스 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow 흐름 - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7120,26 +7382,34 @@ Hide diagram 도표 숨기기 + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more 더 보기 + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7147,12 +7417,16 @@ Inputs & Outputs 인풋과 아웃풋 - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7160,17 +7434,25 @@ Show diagram 도표 보기 + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7178,27 +7460,83 @@ Locktime 잠금 시간 + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. 트랜잭션을 찾을 수 없음 src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7207,117 +7545,24 @@ 멤풀에 포함될때까지 대기하는 중... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - 기능 - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (새로 채굴된 코인들) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7326,16 +7571,24 @@ 페그 인 src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7345,7 +7598,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7355,7 +7608,7 @@ 증인 (디지털 서명) src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7364,16 +7617,24 @@ P2SH 사용 스크립트 src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR 탭 스크립트 src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7382,7 +7643,7 @@ P2WSH 증인 스크립트 src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7391,7 +7652,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7400,7 +7661,7 @@ 이전 아웃풋 스크립트 src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7409,7 +7670,7 @@ 이전 아웃풋 유형 src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7418,7 +7679,7 @@ 로 페그아웃 src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7427,7 +7688,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7437,7 +7698,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7447,10 +7708,42 @@ 수수료 정보를 표기하기 위해 더 많은 인풋을 보기 src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs 기타 인풋 @@ -7675,6 +7968,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7699,8 +8050,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7752,10 +8103,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7767,22 +8114,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - 기본 푸시: 작업: 'want', 데이터 : [ 'blocks', ...] 을 사용하여 푸시하려는 것을 표시할 수 있습니다. 사용 가능: blocks, mempool-blocks, live-2h-chart, 및stats.주소와 관련된 트랜잭션을 푸시:’track-address’: ‘3PbJ…bF9B’을 사용하여 인풋 또는 아웃풋 주소를 포함한 새로운 트랜잭션을 받을 수 있습니다. 트랜잭션들은 행렬로 반환합니다. 새로운 트랜잭션일 경우address-transactions이고, 새롭게 컨펌된 트랜잭션일 경우block-transactions입니다. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example 코드 예시 @@ -7822,6 +8160,15 @@ API Docs API response + + Documentation + 문서 + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8205,7 +8552,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8826,6 +9173,18 @@ lightning.connectivity-ranking + + Lightning Explorer + 라이트닝 탐색기 + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8939,7 +9298,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9439,7 +9798,7 @@ 통신사 관할 내 라이트닝 노드: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9450,7 +9809,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9553,6 +9912,335 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + 방금 전 + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + 이후 + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9585,6 +10273,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9639,11 +10335,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9651,7 +10347,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9659,7 +10355,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9668,7 +10364,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9676,7 +10372,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9684,7 +10380,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9692,7 +10388,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9700,7 +10396,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9708,7 +10404,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9716,7 +10412,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9724,7 +10420,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9732,7 +10428,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9740,7 +10436,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9748,7 +10444,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9756,7 +10452,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9764,7 +10460,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9772,7 +10468,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9780,7 +10476,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9788,7 +10484,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9796,7 +10492,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9804,7 +10500,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9812,7 +10508,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9821,7 +10517,7 @@ 이용약관 src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9831,7 +10527,7 @@ 개인정보처리방침 src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9840,7 +10536,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9849,13 +10545,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9878,47 +10574,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10045,7 +10733,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.lt.xlf b/frontend/src/locale/messages.lt.xlf index 0363a4ab2..1742fe6be 100644 --- a/frontend/src/locale/messages.lt.xlf +++ b/frontend/src/locale/messages.lt.xlf @@ -59,6 +59,7 @@ + node_modules/src/ngb-config.ts 13 @@ -266,6 +267,7 @@ Become a Community Sponsor + Tapk Bendruomenės Rėmeju src/app/components/about/about-sponsors.component.html 4 @@ -274,6 +276,7 @@ Become an Enterprise Sponsor + Tapk Verslo Rėmeju src/app/components/about/about-sponsors.component.html 11 @@ -291,42 +294,65 @@ Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties. - Nuo trečiųjų šalių paslaugų nepriklausoma BTC sandorių ir daugiasluoksnės Bitkoino ekosistemos analizei skirta atminties baseino bei blokų grandinės naršyklė. + Nuo trečiųjų šalių nepriklausoma daugiasluoksnės Bitkoino ekosistemos ir transakcijų analizei skirta atminties telkinio bei blokų grandinės naršyklė skirta Bitkoino bendruomenei. src/app/components/about/about.component.html 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Verslo Rėmėjai 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket Whale Sponsors + Banginiai Rėmėjai src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart Chad Sponsors + Čadai Rėmejai src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart OG Sponsors ❤️ + OG Rėmejai src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -335,7 +361,7 @@ Bendruomenės Integracijos src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -344,7 +370,7 @@ Bendruomenės Aljansai src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -353,7 +379,7 @@ Projekto Vertėjai src/app/components/about/about.component.html - 367 + 395 about.translators @@ -362,7 +388,7 @@ Projekto Pagalbininkai src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -371,7 +397,7 @@ Projekto Nariai src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -380,7 +406,7 @@ Projekto Prižiūrėtojai src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -391,14 +417,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -409,37 +427,41 @@ Sorry, something went wrong! + Atsiprašome, įvyko klaida! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title We were not able to accelerate this transaction. Please try again later. + Mes negalime pagreitinti šios transakcijos. Bandykite dar kartą vėliau. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate Close + Uždaryti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close Your transaction + Tavo transakcija src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -447,7 +469,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -456,7 +478,7 @@ Virtualus dydis src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -467,21 +489,26 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize Size in vbytes of this transaction (including unconfirmed ancestors) + Transakcijos dydis vbaitais (įskaitant nepatvirtintus protėvius) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -489,7 +516,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -498,55 +525,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -556,6 +615,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -612,9 +691,10 @@ Fees already paid by this transaction (including unconfirmed ancestors) + Mokesčiai jau sumokėti su šia transakcija (įskaitant nepatvirtintus protėvius) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -622,7 +702,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -630,7 +710,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -638,7 +718,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -646,7 +726,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -655,11 +735,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -676,7 +756,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -684,7 +764,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -692,15 +772,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -708,15 +788,16 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee Transaction Size Surcharge + Transakcijos Dydžio Priemoka src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -724,7 +805,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -732,7 +813,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -740,7 +821,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -748,7 +829,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -756,23 +837,24 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back Accelerate your Bitcoin transaction? + Paspartinti jūsų Bitkoino transakciją? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -780,7 +862,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -788,11 +870,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -800,7 +882,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -808,7 +890,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -816,19 +898,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -836,7 +918,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -844,19 +926,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -865,7 +947,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -873,15 +955,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -889,7 +971,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -897,7 +979,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -905,7 +987,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -913,7 +995,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -921,7 +1003,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -929,15 +1011,16 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing Accelerating your transaction + Vyksta transakcijos spartinimas src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -945,7 +1028,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -953,31 +1036,65 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners Your transaction is being accelerated! + Jūsų transakcija yra spartinama! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message - - Your transaction has been accepted for acceleration by our mining pool partners. + + Transaction is already being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 578 + + accelerator.success-message-third-party + + + Your transaction has been accepted for acceleration by our mining pool partners. + Jūsų transakcija buvo priimta paspartinimui mūsų kasimo baseino partnerių. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -985,7 +1102,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -993,7 +1110,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1001,77 +1118,24 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate Your transaction will be prioritized by up to % of miners. + Jūsų transakcijai pirmenybę teikia iki % kasėjų. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Kitas Blokas @@ -1091,6 +1155,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1148,7 +1216,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1171,12 +1239,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1213,27 +1281,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1246,11 +1314,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1266,11 +1334,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1310,12 +1378,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1352,12 +1420,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1385,8 +1453,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1404,6 +1472,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1412,7 +1492,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1422,16 +1502,17 @@ No accelerated transaction for this timeframe + Paspartintų transakcijų šiuo laikotarpiu nėra src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1450,7 +1531,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,6 +1600,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1610,12 +1695,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1682,11 +1771,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1702,7 +1791,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1722,7 +1811,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1730,7 +1819,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1738,7 +1827,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1794,6 +1883,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Rodyti daugiau » @@ -1801,6 +1902,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1833,10 +1938,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1859,7 +1960,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1895,7 +1996,7 @@ Likutis src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1903,15 +2004,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2001,7 +2106,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2022,7 +2127,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2035,7 +2140,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2050,26 +2159,26 @@ Transactions - Sandoriai + Transakcijos src/app/components/address/address-preview.component.html 35 src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2079,6 +2188,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2099,7 +2212,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2123,7 +2236,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2140,65 +2253,88 @@ Adresas: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . + Peržiūrėti mempool transakcijas, patvirtintas transakcijas, balansą, ir daugiau adresui . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent - - of transaction + + Unspent Outputs src/app/components/address/address.component.html - 101 + 114 + + address.unspent-outputs + + + of transaction + transakcijų + + src/app/components/address/address.component.html + 129 X of X Address Transaction of transactions + transakcijų src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2207,19 +2343,20 @@ Įkeliant adreso duomenis įvyko klaida. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + Per daug transakcijų šiam adresui, daugiau nei jūsų posistemė gali apdoroti. Daugiau apie galingesnės posistemės įrengimą. Tai pat galite peržiūrėti šį adresą oficialiame Mempool puslapyje: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2227,7 +2364,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2235,7 +2376,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2243,7 +2388,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2252,18 +2397,27 @@ Rūšis src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Turtas @@ -2385,7 +2539,7 @@ of   - +   src/app/components/asset/asset.component.html 78 @@ -2394,7 +2548,7 @@ Peg In/Out and Burn Transactions - Prisegimo/Išsegimo ir Deginimo Sandoriai + Prisegimo/Išsegimo ir Deginimo Transakcijos src/app/components/asset/asset.component.html 79 @@ -2403,7 +2557,7 @@ Issuance and Burn Transactions - Išdavimo ir Deginimo Sandoriai + Išdavimo ir Deginimo Transakcijos src/app/components/asset/asset.component.html 80 @@ -2429,6 +2583,7 @@ Browse an overview of the Liquid asset (): see issued amount, burned amount, circulating amount, related transactions, and more. + Naršyti Liquid turto peržiurą (): žiūrėti išduotą kiekį, sudegintą kiekį, cirkuliuojantį kiekį, susijusias transakcijas, ir daugiau. src/app/components/asset/asset.component.ts 108 @@ -2469,10 +2624,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2492,11 +2643,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2512,11 +2663,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2524,7 +2675,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2550,7 +2701,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2736,7 +2887,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2748,7 +2899,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2790,43 +2941,19 @@ select filter categories to highlight matching transactions + pasirinkite filtro kategorijas atinkančių transakcijų paryškinimui src/app/components/block-filters/block-filters.component.html 2 Mempool Goggles™ tooltip - - beta - beta versija - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Atitikmuo src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2838,7 +2965,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2846,7 +2973,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2854,7 +2981,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2866,7 +2993,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2888,6 +3015,7 @@ See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool's re-implementation of Bitcoin Core's transaction selection algorithm. + Žiurėti Bitkoino bloko sveikatos vizualizaciją pagal laiką. Bloko sveikata yra vienetas matuojantis kiek laukiamų transakcijų buvo įtraukta į išgautą bloką. Laukiamos transakcijos yra nustatomos naudojant Mempool perįdiegtą Bitcoin Core transakcijų parinkimo algoritmą. src/app/components/block-health-graph/block-health-graph.component.ts 64 @@ -2930,15 +3058,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -2946,7 +3074,7 @@ nepasiekiamas src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2954,13 +3082,13 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled Transaction - Sandoris + Transakcija src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 12 @@ -3003,8 +3131,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3021,12 +3149,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3042,8 +3174,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3079,7 +3211,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3115,8 +3247,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3128,21 +3268,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3212,7 +3369,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3232,15 +3389,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3268,19 +3429,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3302,21 +3467,6 @@ src/app/components/block-view/block-view.component.ts 110 - - src/app/components/block/block-preview.component.ts - 102 - - - src/app/components/block/block.component.ts - 260 - - - - See size, weight, fee range, included transactions, and more for Liquid block (). - - src/app/components/block-view/block-view.component.ts - 112 - src/app/components/block/block-preview.component.ts 104 @@ -3326,11 +3476,12 @@ 262 - - See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + + See size, weight, fee range, included transactions, and more for Liquid block (). + Žiurėti dydį, mokesčių ribas, įtrauktas transakcijas, ir daugiau Liquid blokui (). src/app/components/block-view/block-view.component.ts - 114 + 112 src/app/components/block/block-preview.component.ts @@ -3341,6 +3492,22 @@ 264 + + See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + Žiūrėti dydį, svorį, mokesčių ribas, įtrauktas transakcijas, auditą (lauktas / esamas), ir daugiau Bitkoino blokui (). + + src/app/components/block-view/block-view.component.ts + 114 + + + src/app/components/block/block-preview.component.ts + 108 + + + src/app/components/block/block.component.ts + 266 + + Genesis Genezė @@ -3366,23 +3533,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3420,15 +3591,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3449,20 +3620,21 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner transaction + transakcija src/app/components/block/block-transactions.component.html 4 src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3476,13 +3648,14 @@ transactions + transakcijos src/app/components/block/block-transactions.component.html 5 src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3549,6 +3722,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3560,11 +3737,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3572,7 +3753,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3600,11 +3781,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3623,7 +3804,7 @@ Based on average native segwit transaction of 140 vBytes - Remiantis vidutine 140 vBaitų 'native segwit' operacija + Remiantis vidutine 140 vBaitų 'native segwit' transakcija src/app/components/block/block.component.html 140 @@ -3669,7 +3850,11 @@ Tikimasi src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3678,7 +3863,7 @@ Tikras src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3687,7 +3872,7 @@ Numatytas Blokas src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3696,7 +3881,7 @@ Esamas Blokas src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3705,11 +3890,15 @@ Versija src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3718,7 +3907,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3748,7 +3937,7 @@ Bitai src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3757,7 +3946,7 @@ Merkle šaknis src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3766,7 +3955,7 @@ Sudėtingumas src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3782,11 +3971,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3795,7 +3984,7 @@ Noncas src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3804,7 +3993,7 @@ Bloko Antraštės Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3813,11 +4002,11 @@ Auditas src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3827,23 +4016,31 @@ Detalės src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3872,7 +4069,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3881,7 +4078,7 @@ Kodėl šis blokas tuščias? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3889,7 +4086,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3898,24 +4099,20 @@ Blokai src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3923,7 +4120,7 @@ Aukštis src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3935,11 +4132,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3952,11 +4153,11 @@ Atlygis src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3964,19 +4165,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3985,15 +4190,15 @@ Mokesčiai src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4002,11 +4207,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4018,11 +4223,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4038,14 +4243,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4056,7 +4261,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4065,7 +4270,7 @@ Nukopijuota! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4134,7 +4339,7 @@ Transaction Fees - Sandorių Mokesčiai + Transakcijų Mokesčiai src/app/components/custom-dashboard/custom-dashboard.component.html 8 @@ -4147,6 +4352,7 @@ Incoming Transactions + Įeinančios Transakcijos src/app/components/custom-dashboard/custom-dashboard.component.html 55 @@ -4291,12 +4497,13 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks Recent Transactions + Naujos Transakcijos src/app/components/custom-dashboard/custom-dashboard.component.html 190 @@ -4313,21 +4520,34 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury Treasury Transactions + Iždo Transakcijos src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4335,7 +4555,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4343,14 +4563,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4358,14 +4578,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4373,7 +4593,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4672,7 +4892,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4680,7 +4900,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4708,7 +4928,7 @@ Usually places your transaction in between the second and third mempool blocks - Paprastai įkelia jūsų sandorį tarp antrojo ir trečiojo atminties telkinio blokų + Paprastai įkelia jūsų transakciją tarp antrojo ir trečiojo mempool blokų src/app/components/fees-box/fees-box.component.html 8 @@ -4730,7 +4950,7 @@ Usually places your transaction in between the first and second mempool blocks - Paprastai įkelia jūsų sandorį tarp pirmojo ir antrojo atminties telkinio blokų + Paprastai įkelia jūsų transakciją tarp pirmojo ir antrojo mempool blokų src/app/components/fees-box/fees-box.component.html 9 @@ -4752,7 +4972,7 @@ Places your transaction in the first mempool block - Įkelia jūsų sandorį į pirmąjį atminties telkinio bloką + Įkelia jūsų transakciją į pirmąjį mempool bloką src/app/components/fees-box/fees-box.component.html 10 @@ -4845,7 +5065,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4960,24 +5180,28 @@ lightning.nodes-channels-world-map - - Hashrate - Maišos Dažnis + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Maišos Dažnis src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4989,11 +5213,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5001,7 +5225,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5009,11 +5233,11 @@ Maišos dažnis (JV) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5056,11 +5280,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5073,11 +5297,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5090,53 +5314,6 @@ master-page.layer2-networks-header - - Dashboard - Valdymo Skydas - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafikai - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentacija - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5167,6 +5344,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5274,7 +5455,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5303,11 +5484,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5351,7 +5540,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5395,8 +5584,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5442,9 +5631,8 @@ 163 - - L-BTC in circulation - L-BTC apyvartoje + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5463,49 +5651,9 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - "Lightning" Naršyklė - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. + Žiūrėti statistiką mempool transakcijoms: mokesčių ribos, bendras dydis, ir daugiau. Mempool blokai yra atnaujinami realiu laiku tinklui priimant naujas transakcijas. src/app/components/mempool-block/mempool-block.component.ts 62 @@ -5558,15 +5706,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5597,6 +5745,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5604,6 +5763,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Telkinių sėkmė (1 savaitė) @@ -5621,7 +5832,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5651,7 +5862,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5677,7 +5888,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5724,11 +5935,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5766,7 +5977,7 @@ Visi kasėjai src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5788,17 +5999,17 @@ blocks blokai - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5809,15 +6020,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5862,11 +6077,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5874,11 +6089,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5897,20 +6112,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5921,6 +6160,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5932,11 +6175,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5948,11 +6191,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5965,11 +6208,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5994,19 +6237,47 @@ Monetų bazės žyma src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6014,24 +6285,24 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance Broadcast Transaction - Transliuoti Sandorį + Transliuoti Transakciją src/app/components/push-transaction/push-transaction.component.html 2 @@ -6042,36 +6313,112 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction Transaction hex - Sandorio hex + Transakcijos hex src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Kableliu atskirtų, grynų transakcijų sąrašas + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction + Transliuoti Transakciją src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. + Transliuoti transakciją į tinklą naudojant transakcijos maišą src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6108,17 +6455,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6130,7 +6501,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6198,7 +6569,7 @@ Fee paid on average for each transaction in the past 144 blocks - Vid. mokestis už sandorį per paskutinius 144 blokus + Vid. mokestis už transakciją per paskutinius 144 blokus src/app/components/reward-stats/reward-stats.component.html 31 @@ -6224,11 +6595,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6251,6 +6622,7 @@ Transaction + Transakcija src/app/components/search-form/search-results/search-results.component.html 21 @@ -6336,6 +6708,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool pagal vBitus (sat/vByte) @@ -6353,29 +6793,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV vaizdas - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtruoti src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6384,16 +6811,16 @@ Apversti src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title Transaction vBytes per second (vB/s) - Operacijos vBaitai per sekundę (vB/s) + Transakcijos vBaitai per sekundę (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6401,33 +6828,60 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafikai + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. + Žiūrėti mempool dydį (MvB) ir transakcijas per sekundę (vB/s) vizualizuojant per laiką. src/app/components/statistics/statistics.component.ts 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions + Testuoti Transakcijas src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6440,363 +6894,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - Dabar - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Prieš - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Už ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Po - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6832,11 +6933,11 @@ Tikimasi src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6845,11 +6946,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6858,7 +6959,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6866,136 +6967,145 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height Your transaction has been accelerated + Jūsų transakcija buvo paspartinta src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated Waiting for your transaction to appear in the mempool + Laukiama kol jūsų transakcija atsiras mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting Your transaction is in the mempool, but it will not be confirmed for some time. + Jūsų transakcija jau yra mempool, bet nebus patvirtinta dar kurį laiką. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending Your transaction is near the top of the mempool, and is expected to confirm soon. + Jūsų transakcija jau beveik mempool viršuje, ir neužilgo bus patvirtinta. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon Your transaction is expected to confirm in the next block + Jūsų transakcija bus patvirtinta sekančiame bloke. src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block Your transaction is confirmed! + Jūsų transakcija buvo patvirtinta! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed Your transaction has been replaced by a newer version! + Jūsų transakcija buvo pakeista naujesne versija! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Klaida kraunant transakcijos duomenis. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details Transaction: - Operacija: + Transakcija: src/app/components/tracker/tracker.component.ts 409 src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 Get real-time status, addresses, fees, script info, and more for transaction with txid . + Gaukite realaus laiko statusą, adresus, mokesčius, skripto info, ir daugiau transakcijai su txid . src/app/components/tracker/tracker.component.ts 413 src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Monetų bazė + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Palikuonis - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7004,48 +7114,257 @@ Ancestor Protėvis - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + Funkcijos - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Monetų bazė + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Buvo tikimasi kad ši transakcija bus įtraukta į šį bloką + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Ši transakcija buvo matoma mempool prieš bloko radimą + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Ši transakcija nebuvo matoma mūsų mempool prieš randant bloką + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band + Ši transakcija galimai buvo įtraukta alternatyviu būdu - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Ši transakcija galimai gavo pirmenybę alternatyviu būdu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Ši transakcija prieštarauja kitai versijai mūsų atminties telkinyje + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow Srautas - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7053,26 +7372,34 @@ Hide diagram Slėpti diagramą + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more Rodyti daugiau + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7080,12 +7407,16 @@ Inputs & Outputs Įvestys ir Išvestys - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7093,17 +7424,25 @@ Show diagram Rodyti diagramą + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7111,27 +7450,83 @@ Locktime Užrakinimo laikas + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops - - Transaction not found. - Sandoris nerastas. + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator src/app/components/transaction/transaction.component.html - 407 + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + + + Transaction not found. + Transakcija nerasta. + + src/app/components/transaction/transaction.component.html + 350 transaction.error.transaction-not-found @@ -7140,117 +7535,24 @@ Laukiama pasirodymo atmintinėje... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Funkcijos - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Naujai Sugeneruotos Monetos) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7259,16 +7561,24 @@ Prisegimas src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7278,7 +7588,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7288,7 +7598,7 @@ Liudytojas src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7297,16 +7607,24 @@ P2SH išpirkimo skriptas src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapskriptas src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7315,7 +7633,7 @@ P2WSH liudininko skriptas src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7324,7 +7642,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7333,7 +7651,7 @@ Ankstesnės išvesties skriptas src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7342,7 +7660,7 @@ Ankstesnės išvesties tipas src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7351,7 +7669,7 @@ Atsegti į src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7360,7 +7678,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7370,7 +7688,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7380,10 +7698,42 @@ Žiūrėti daugiau įvesčių kad matyti mokesčių duomenis src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs kitos įvestys @@ -7465,7 +7815,7 @@ This transaction saved % on fees by using native SegWit - Šis sandoris sutaupė % mokesčių nes naudojo vietinį SegWit + Ši transakcija sutaupė % mokesčių nes naudojo native SegWit src/app/components/tx-features/tx-features.component.html 2 @@ -7492,7 +7842,7 @@ This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit - Šis sandoris sutaupė % mokesčių naudojant SegWit ir gali sutaupyti % daugiau naudojant vietinį SegWit + Ši transakcija sutaupė % mokesčių naudojant SegWit ir gali sutaupyti % daugiau naudojant native SegWit src/app/components/tx-features/tx-features.component.html 4 @@ -7501,7 +7851,7 @@ This transaction could save % on fees by upgrading to native SegWit or % by upgrading to SegWit-P2SH - Šis sandoris galėjo sutaupyti % mokesčių naudojant vietinį SegWit arba % naujovinus į SegWit-P2SH + Ši transakcija galėjo sutaupyti % mokesčių naudojant vietinį SegWit arba % atnaujinus į SegWit-P2SH src/app/components/tx-features/tx-features.component.html 6 @@ -7510,7 +7860,7 @@ This transaction uses Taproot and thereby saved at least % on fees - Šis sandoris naudoja Taproot ir taip sutaupė bent % mokesčių + Ši transakcija naudoja Taproot ir taip sutaupė bent % mokesčių src/app/components/tx-features/tx-features.component.html 12 @@ -7519,7 +7869,7 @@ This transaction uses Taproot and already saved at least % on fees, but could save an additional % by fully using Taproot - Šis sandoris naudojo „Taproot“ ir jau sutaupė bent % mokesčių, bet gali sutaupyti papildomai % pilnai išnaudojant Taproot + Ši transakcija naudojo „Taproot“ ir jau sutaupė bent % mokesčių, bet gali sutaupyti papildomai % pilnai išnaudojant Taproot src/app/components/tx-features/tx-features.component.html 14 @@ -7528,7 +7878,7 @@ This transaction could save % on fees by using Taproot - Šis sandoris gali sutaupyti % mokesčių naudojant Taproot + Ši transakcija gali sutaupyti % mokesčių naudojant Taproot src/app/components/tx-features/tx-features.component.html 16 @@ -7537,7 +7887,7 @@ This transaction does not use Taproot - Šis sandoris nenaudoja Taproot + Ši transakcija nenaudoja Taproot src/app/components/tx-features/tx-features.component.html 18 @@ -7546,7 +7896,7 @@ This transaction uses Taproot - Šis sandoris naudoja Taproot + Ši transakcija naudoja Taproot src/app/components/tx-features/tx-features.component.html 21 @@ -7555,7 +7905,7 @@ This transaction supports Replace-By-Fee (RBF) allowing fee bumping - Šis sandoris palaiko „Replace-By-Fee“ (RBF), kuris leidžia jį paspartinti. + Ši transakcija naudoja Replace-By-Fee“ (RBF), kuris leidžia ją paspartinti. src/app/components/tx-features/tx-features.component.html 28 @@ -7564,7 +7914,7 @@ This transaction does NOT support Replace-By-Fee (RBF) and cannot be fee bumped using this method - Ši operacija nepalaiko "Replace-By-Fee" (RBF) ir negali būti paspartinta. + Ši transakcija nepalaiko "Replace-By-Fee" (RBF) ir negali būti paspartinta. src/app/components/tx-features/tx-features.component.html 29 @@ -7608,6 +7958,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7632,8 +8040,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7663,6 +8071,7 @@ mempool.space merely provides data about the Bitcoin network. It cannot help you with retrieving funds, wallet issues, etc.For any such requests, you need to get in touch with the entity that helped make the transaction (wallet software, exchange company, etc). + mempool.space tik pateikia duomenis apie Bitkoino tinklą. Ši paslauga negali padėti prarastų lėšų atvejais, esant piniginės klaidomis, ir pan. Dėl tokių užklausų, kreipkitės į subjektus kurie padėjo jums sukonstruoti šią transakciją (piniginės kūrėjai, keitykla, ir pan.). src/app/docs/api-docs/api-docs.component.html 15,16 @@ -7685,10 +8094,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7700,22 +8105,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Numatytas passtūmimas: veiksmas: 'want', data: ['blocks', ...] , išreikšti tai, ką norite pastūmėti. Galimi: blokai , mempool blokai , realaus laiko-2val grafikas , ir statistika . Pastūmėti sandorius susietus su adresu: 'track-address': '3PbJ...bF9B' priimti visus naujus sandorius susietus su adresu kaip įvestis ar išvestis. Pateikiama kaip sandorių rinkinys. adreso-sandoriainaujiems mempool sandoriams, ir bloko sandoriainaujiems bloke patvirtintoms sandoriams. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Kodo Pavyzdys @@ -7755,6 +8151,15 @@ API Docs API response + + Documentation + Dokumentacija + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -7764,6 +8169,7 @@ Get answers to common questions like: What is a mempool? Why isn't my transaction confirming? How can I run my own instance of The Mempool Open Source Project? And more. + Gaukite atsakymus į bendrus klausimus kaip kad: Kas yra mempool? Kodėl mano transakcija nepatvirtinta? Kaip įsidiegti savo The Mempool Open Source Project? Ir daugiau. src/app/docs/docs/docs.component.ts 47 @@ -7778,6 +8184,7 @@ Documentation for the liquid.network REST API service: get info on addresses, transactions, assets, blocks, and more. + Dokumentacija skirta liquid.network REST API paslaugai: gaukite info apie adresus, transakcijas, turtą, blokus, ir daugiau. src/app/docs/docs/docs.component.ts 53 @@ -7785,6 +8192,7 @@ Documentation for the mempool.space REST API service: get info on addresses, transactions, blocks, fees, mining, the Lightning network, and more. + Dokumentacija skirta mempool.space REST API paslaugai: gaukite info apie adresus, transakcijas, turtą, blokus, ir daugiau. src/app/docs/docs/docs.component.ts 55 @@ -7799,6 +8207,7 @@ Documentation for the liquid.network WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Dokumentacija skirta liquid.network WebSocket API paslaugai: gaukite info apie blokus, atminties telkinius, transakcijas, adresus, ir daugiau. src/app/docs/docs/docs.component.ts 61 @@ -7806,6 +8215,7 @@ Documentation for the mempool.space WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Dokumentacija skirta mempool.space WebSocket API paslaugai: gaukite info apie blokus, atminties telkinius, transakcijas, adresus, ir daugiau. src/app/docs/docs/docs.component.ts 63 @@ -8136,9 +8546,10 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. + Apžvalga Lightning kanalui . Žiūrėti kanalo našumą, Lightning tinklo mazgus, susijusias on-chain transakcijas, ir daugiau. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8215,7 +8626,7 @@ Opening transaction - Atidarymo sandoris + Atidarymo transakcija src/app/lightning/channel/channel.component.html 91 @@ -8228,7 +8639,7 @@ Closing transaction - Uždarymo sandoris + Uždarymo transakcija src/app/lightning/channel/channel.component.html 100 @@ -8759,6 +9170,18 @@ lightning.connectivity-ranking + + Lightning Explorer + "Lightning" Naršyklė + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8872,7 +9295,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9372,7 +9795,7 @@ "Lightning" mazgai pagal IPT: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9383,7 +9806,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9486,6 +9909,335 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + Dabar + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Prieš + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Už ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Po + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9518,6 +10270,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9572,11 +10332,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9584,15 +10344,16 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore Test Transaction + Testuoti Transakciją src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9601,7 +10362,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9609,7 +10370,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9617,7 +10378,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9625,7 +10386,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9633,7 +10394,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9641,15 +10402,16 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer Why isn't my transaction confirming? + Kodėl mano transakcija nėra patvirtinama? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9657,7 +10419,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9665,7 +10427,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9673,7 +10435,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9681,7 +10443,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9689,7 +10451,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9697,7 +10459,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9705,7 +10467,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9713,7 +10475,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9721,7 +10483,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9729,7 +10491,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9737,7 +10499,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9745,7 +10507,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9754,7 +10516,7 @@ Paslaugų Teikimo Sąlygos src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9764,7 +10526,7 @@ Privatumo Politika src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9773,7 +10535,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9782,13 +10544,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9811,47 +10573,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9968,7 +10722,7 @@ Transaction fee - Operacijos mokestis + Transakcijos mokestis src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts 11 @@ -9978,7 +10732,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.mk.xlf b/frontend/src/locale/messages.mk.xlf index 71e818622..742b59cb5 100644 --- a/frontend/src/locale/messages.mk.xlf +++ b/frontend/src/locale/messages.mk.xlf @@ -297,12 +297,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Корпоративни Спонзори 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -310,7 +330,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -318,7 +338,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -326,7 +346,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -335,7 +355,7 @@ Интеграции од заедницата src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -344,7 +364,7 @@ Соработка со Заедницата src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -353,7 +373,7 @@ Преведувачи src/app/components/about/about.component.html - 367 + 395 about.translators @@ -362,7 +382,7 @@ Контрибутори src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -371,7 +391,7 @@ Членови на проектот src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -380,7 +400,7 @@ Одржувачи на проектот src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -391,14 +411,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -411,7 +423,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -419,7 +431,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -427,11 +439,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -439,7 +451,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -447,7 +459,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -456,7 +468,7 @@ Виртуелна големина src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -467,12 +479,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -481,7 +497,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -489,7 +505,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -498,55 +514,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -556,6 +604,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -614,7 +682,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -622,7 +690,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -630,7 +698,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -638,7 +706,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -646,7 +714,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -655,11 +723,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -676,7 +744,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -684,7 +752,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -692,15 +760,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -708,7 +776,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -716,7 +784,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -724,7 +792,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -732,7 +800,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -740,7 +808,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -748,7 +816,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -756,15 +824,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -772,7 +840,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -780,7 +848,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -788,11 +856,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -800,7 +868,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -808,7 +876,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -816,19 +884,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -836,7 +904,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -844,19 +912,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -865,7 +933,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -873,15 +941,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -889,7 +957,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -897,7 +965,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -905,7 +973,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -913,7 +981,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -921,7 +989,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -929,7 +997,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -937,7 +1005,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -945,7 +1013,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -953,7 +1021,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -961,23 +1029,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -985,7 +1085,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -993,7 +1093,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1001,15 +1101,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1018,60 +1114,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Нареден Блок @@ -1091,6 +1137,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1148,7 +1198,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1171,12 +1221,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1213,27 +1263,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1246,11 +1296,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1266,11 +1316,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1310,12 +1360,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1352,12 +1402,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1385,8 +1435,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1404,6 +1454,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1412,7 +1474,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1424,14 +1486,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1450,7 +1512,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,6 +1581,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1610,12 +1676,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1682,11 +1752,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1702,7 +1772,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1722,7 +1792,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1730,7 +1800,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1738,7 +1808,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1794,6 +1864,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Види повеќе » @@ -1801,6 +1883,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1833,10 +1919,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1859,7 +1941,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1895,7 +1977,7 @@ Состојба src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1903,15 +1985,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2001,7 +2087,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2022,7 +2108,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2035,7 +2121,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2057,19 +2147,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2079,6 +2169,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2099,7 +2193,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2123,7 +2217,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2140,57 +2234,77 @@ Адреса: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2198,7 +2312,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2207,11 +2321,11 @@ Грешка во вчитување податоци за адресата. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2219,7 +2333,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2227,7 +2341,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2235,7 +2353,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2243,7 +2365,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2252,18 +2374,27 @@ Тип src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Средство @@ -2469,10 +2600,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2492,11 +2619,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2512,11 +2639,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2524,7 +2651,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2550,7 +2677,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2736,7 +2863,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2748,7 +2875,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2796,37 +2923,12 @@ Mempool Goggles™ tooltip - - beta - бета - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Се совпаѓа src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2838,7 +2940,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2846,7 +2948,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2854,7 +2956,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2866,7 +2968,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2930,15 +3032,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -2946,7 +3048,7 @@ не е достапно src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2954,7 +3056,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3003,8 +3105,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3021,12 +3123,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3042,8 +3148,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3079,7 +3185,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3115,8 +3221,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3128,21 +3242,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3212,7 +3343,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3232,15 +3363,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3268,19 +3403,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3304,11 +3443,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3319,11 +3458,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3334,11 +3473,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3366,23 +3505,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3420,15 +3563,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3449,8 +3592,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3462,7 +3605,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3482,7 +3625,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3549,6 +3692,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3560,11 +3707,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3572,7 +3723,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3600,11 +3751,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3669,7 +3820,11 @@ Очекувано src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3678,7 +3833,7 @@ Реален src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3687,7 +3842,7 @@ Очекуван Блок src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3696,7 +3851,7 @@ Реален Блок src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3705,11 +3860,15 @@ Верзија src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3718,7 +3877,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3748,7 +3907,7 @@ Битови src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3757,7 +3916,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3766,7 +3925,7 @@ Сложеност src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3782,11 +3941,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3795,7 +3954,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3804,7 +3963,7 @@ Хекс од заглавието на блокот src/app/components/block/block.component.html - 300 + 307 block.header @@ -3813,11 +3972,11 @@ Ревизија src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3827,23 +3986,31 @@ Детали src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3872,7 +4039,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3881,7 +4048,7 @@ Зошто овој блок е празен? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3889,7 +4056,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3898,24 +4069,20 @@ Блокови src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3923,7 +4090,7 @@ Број src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3935,11 +4102,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3952,11 +4123,11 @@ Награда src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3964,19 +4135,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3985,15 +4160,15 @@ Провизии src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4002,11 +4177,11 @@ Трансакции src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4018,11 +4193,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4038,14 +4213,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4056,7 +4231,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4065,7 +4240,7 @@ Копирано! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4291,7 +4466,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4313,6 +4488,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4321,13 +4504,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4335,7 +4522,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4343,14 +4530,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4358,14 +4545,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4373,7 +4560,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4672,7 +4859,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4680,7 +4867,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4845,7 +5032,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4960,24 +5147,28 @@ lightning.nodes-channels-world-map - - Hashrate - Хашрејт + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Хашрејт src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4989,11 +5180,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5001,7 +5192,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5009,11 +5200,11 @@ Хашрејт (МА) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5056,11 +5247,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5073,11 +5264,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5090,53 +5281,6 @@ master-page.layer2-networks-header - - Dashboard - Почетна - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Графици - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Документација - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5167,6 +5311,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5274,7 +5422,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5303,11 +5451,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5351,7 +5507,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5395,8 +5551,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5442,9 +5598,8 @@ 163 - - L-BTC in circulation - L-BTC во циркулација + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5463,47 +5618,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning Прелистувач - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5558,15 +5672,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5597,6 +5711,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5604,6 +5729,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Среќа на пулови (1 недела) @@ -5621,7 +5798,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5651,7 +5828,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5677,7 +5854,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5724,11 +5901,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5766,7 +5943,7 @@ Сите мајнери src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5788,17 +5965,17 @@ blocks блокови - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5809,15 +5986,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5862,11 +6043,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5874,11 +6055,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5897,20 +6078,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5921,6 +6126,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5932,11 +6141,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5948,11 +6157,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5965,11 +6174,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5994,19 +6203,47 @@ Таг од ковачницата src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6014,18 +6251,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6042,7 +6279,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6054,24 +6291,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6108,17 +6418,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6130,7 +6464,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6224,11 +6558,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6336,6 +6670,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool прикажан по vBytes (sat/vByte) @@ -6353,29 +6755,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV преглед - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Филтер src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6384,7 +6773,7 @@ Инвертирај src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6393,7 +6782,7 @@ Трансакциски vBytes во секунда (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6401,10 +6790,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Графици + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6412,22 +6809,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6440,363 +6854,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - Штотуку - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Пред - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - За ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - После - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6832,11 +6893,11 @@ Потврдена src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6845,11 +6906,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6858,7 +6919,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6866,7 +6927,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6874,7 +6935,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6882,7 +6943,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6890,7 +6951,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6898,7 +6959,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6906,7 +6967,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6914,7 +6975,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6922,15 +6983,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6943,11 +7016,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6958,44 +7031,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Ковачница + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Наследник - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7004,48 +7065,251 @@ Ancestor Претходник - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + Карактеристики - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Ковачница + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow Тек - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7053,26 +7317,34 @@ Hide diagram Сокриј го дијаграмот + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more Прикажи повеќе + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7080,12 +7352,16 @@ Inputs & Outputs Влезови / Излези - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7093,17 +7369,25 @@ Show diagram Прикажи го дијаграмот + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7111,27 +7395,83 @@ Locktime Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. Трансакцијата не е пронајдена src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7140,117 +7480,24 @@ Се чека да се појави во mempool-от... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Карактеристики - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Ново создадени монети) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7259,16 +7506,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7278,7 +7533,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7288,7 +7543,7 @@ Сведок src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7297,16 +7552,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7315,7 +7578,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7324,7 +7587,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7333,7 +7596,7 @@ Претходни излезни скрипти src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7342,7 +7605,7 @@ Претходен тип на излезот src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7351,7 +7614,7 @@ Peg-out кон src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7360,7 +7623,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7370,7 +7633,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7380,10 +7643,42 @@ Прикажи повеќе влезови за да ја откриеш провизијата src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs други влезови @@ -7608,6 +7903,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7632,8 +7985,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7685,10 +8038,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7700,22 +8049,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Објавување: action: 'want', data: ['blocks', ...] за да специфираш што да биде објавено. Достапни полиња: blocks, mempool-blocks, live-2h-chart, и stats.Објави трансакции поврзани со адресса: 'track-address': '3PbJ...bF9B' за да ги добиеш сите нови трансакции што ја содржат таа адреса како влез или излез. Враќа низа од транссакции. address-transactions за нови трансакции во mempool-от, и block-transactions за поврдени трансакции во најновиот блок. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Пример за Код @@ -7755,6 +8095,15 @@ API Docs API response + + Documentation + Документација + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8138,7 +8487,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8759,6 +9108,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning Прелистувач + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8872,7 +9233,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9372,7 +9733,7 @@ Lightning нодови на ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9383,7 +9744,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9486,6 +9847,335 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + Штотуку + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Пред + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + За ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + После + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9518,6 +10208,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9572,11 +10270,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9584,7 +10282,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9592,7 +10290,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9601,7 +10299,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9609,7 +10307,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9617,7 +10315,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9625,7 +10323,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9633,7 +10331,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9641,7 +10339,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9649,7 +10347,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9657,7 +10355,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9665,7 +10363,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9673,7 +10371,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9681,7 +10379,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9689,7 +10387,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9697,7 +10395,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9705,7 +10403,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9713,7 +10411,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9721,7 +10419,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9729,7 +10427,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9737,7 +10435,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9745,7 +10443,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9754,7 +10452,7 @@ Услови на Користење src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9764,7 +10462,7 @@ Полиса за Приватност src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9773,7 +10471,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9782,13 +10480,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9811,47 +10509,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9978,7 +10668,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.nb.xlf b/frontend/src/locale/messages.nb.xlf index b2de6219c..5fc55618b 100644 --- a/frontend/src/locale/messages.nb.xlf +++ b/frontend/src/locale/messages.nb.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Bedriftssponsorer 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Hvalsponsorer src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chadsponsorer src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG Sponsorer ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Sammfunnsintegrasjoner src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Samfunnsallianser src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Oversettere src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Bidragsytere til prosjektet src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Prosjektmedlemmer src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Prosjektvedlikeholdere src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Beklager, noe gikk galt! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Vi klarte ikke å akselerere denne transaksjonen. Prøv igjen senere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Lukk src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Din transaksjon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Pluss ubekreftede forfedre(r) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuell størrelse src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Størrelse i vbyte for denne transaksjonen (inkludert ubekreftede forfedre) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ In-band avgifter src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Avgifter som allerede er betalt for denne transaksjonen (inkludert ubekreftede forfedre) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Hvor mye raskere? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Dette vil redusere forventet ventetid frem til den første bekreftelsen til src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Sammendrag src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Neste blokkmarkedsrente src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Estimert ekstra avgift kreves src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Målsats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Ekstra avgift kreves src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™-avgifter + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Accelerator Service avgift src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Transaksjonsstørrelsetillegg src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Estimert akselerasjonskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maksimal akselerasjonskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Akselerasjonskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Tilgjengelig balanse src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Gå tilbake src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Akselerere din Bitcoin-transaksjon? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Vent src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Forventet bekreftelse src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Bekreftelse forventes ikke med det første src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ For en ekstra src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Reduserer forventet bekreftelsestid til src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Betaling til mempool.space for akselerasjon av txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Kontoen din vil ikke bli belastet med mer enn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Betal src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Kunne ikke laste inn faktura src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Laster inn faktura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - ELLER + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Bekreft betalingen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Total tilleggskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ med src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Laster inn betalingsmåte... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Bekrefter betalingen din src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Vi behandler betalingen din... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Akselererer transaksjonen din src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Bekrefter akselerasjonen din med våre utvinningsgruppe-partnere... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...beklager, dette tar lengre tid enn forventet... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Transaksjonen din blir akselerert! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Transaksjonen din har blitt akseptert for akselerasjon av våre utvinningsgruppe-partnere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Beregner kostnad... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ tilpass src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Akselerer til ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Akselerer src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Transaksjonen din vil bli prioritert av opptil % av utvinnere. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Neste blokk @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Akselerasjonsavgifter @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Ingen akselerert transaksjon for denne tidsrammen src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ Ved blokk: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Rundt blokk: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Mislyktes src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Det er ingen aktive akselerasjoner src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Det er ingen nylige akselerasjoner src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + allt + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Se mer » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ akselererer ikke src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Balanse src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adresse: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Se mempool-transaksjoner, bekreftede transaksjoner, saldo og mer for adresse . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Balansehistorie src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - allt - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent nylig src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction av transaksjon src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ av transaksjoner src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Lasting av adressedata feilet. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Det er for mange transaksjoner på denne adressen, flere enn din backend kan håndtere. Se mer om oppretting av en sterkere backend. Vurder å se denne adressen på det offisielle Mempool-nettstedet i stedet: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Bekreftet saldo src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Bekreftede UTXOer src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ Ventende UTXOer src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Type src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Ressurs @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Utforsk alle eiendelene utstedt på Liquid-nettverket som L-BTC, L-CAD, USDT og mer. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Identisk src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Noen src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Fargenyanse src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Klassisk src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Alder src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ ikke tilgjengelig src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Nettleseren din støtter ikke denne funksjonen. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Forventet src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Faktisk src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Forventet blokk src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Faktisk blokk src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Versjon src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Merklerot src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Vanskelighetsgrad src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Blokkheader Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Revisjon src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Detaljer src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Feil ved innlasting av blokkdata. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Hvorfor er denne blokken tom? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Akselerasjonsavgifter betalt out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Blokker src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Høyde src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Belønning src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Avgifter src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Se de nyeste Liquid-blokkene sammen med grunnleggende statistikk som blokkhøyde, blokkstørrelse og mer. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Se de nyeste Bitcoin-blokkene sammen med grunnleggende statistikk som blokkhøyde, blokkbelønning, blokkstørrelse og mer. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Kopiert! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X Tidslinje src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Konsolidering src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Beløp (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Be om Testnet4-mynter src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Se hashrate og vanskelighetsgrad for Bitcoin-nettverket visualisert over tid. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Dashbord - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafer - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentasjon - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Ikke-støv utløpt @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ blokker src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg-ut pågår... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Antall ganger Federasjonens BTC-beholdning faller under 95% av den totale L-BTC-forsyningen + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC i omløp + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Utvinnings-Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Se statistikk for transaksjoner i mempoolen: gebyrområde, samlet størrelse og mer. Mempool-blokker oppdateres i sanntid etter hvert som nettverket mottar nye transaksjoner. @@ -5774,15 +5881,15 @@ Logg inn src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Utvinnings-Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Få sanntids Bitcoin-utvinningsstatistikk som hashrate, vanskeliggradsjustering, blokkbelønninger, gruppedominans og mer. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Utvinningsgrupper flaks (1 uke) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Alle utvinnere src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks blokker - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Annet () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Se utvinningsgruppe-statistikk for : siste utvunnede blokker, hashrate over tid, total blokkbelønning hittil, kjente coinbaseadresser og mer. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Coinbase tagg src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Feil ved innlasting av utvinningsgruppe data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Ikke nok data ennå src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Utvinningsgruppe dominans src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Kommaseparert liste over transaksjoner + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maksimal avgiftsats (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Tillatt? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Grunn til avvisning + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Kringkast transaksjon src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Kringkast en transaksjon til -nettverket ved å bruke transaksjonens hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool i vBytes (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV-modus - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Inverter src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Transaksjoner per sekund (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Fjern avvikere src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafer + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Se mempoolstørrelse (i MvB) og transaksjoner per sekund (i vB/s) visualisert over tid. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Se Bitcoin-blokker og mempool i sanntid i et forenklet format perfekt for en TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testtransaksjoner src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Kommaseparert liste over transaksjoner - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maksimal avgiftsats (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Tillatt? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Grunn til avvisning - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Med en gang - - src/app/components/time/time.component.ts - 107 - - - - Just now - Akkurat nå - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - siden - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Om ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - innenfor ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Etter - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - før - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Sendt @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Ikke snart src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Bekreftet i src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Blokkhøyde src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Transaksjonen din har blitt akselerert src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Venter på at transaksjonen din skal vises i mempoolen src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Transaksjonen din er i mempoolen, men den vil ikke bli bekreftet på en stund. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Transaksjonen din er nær toppen av mempoolen, og forventes å bekrefte snart. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Transaksjonen din forventes å bekreftes i neste blokk src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Transaksjonen din er bekreftet! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Transaksjonen din er erstattet av en nyere versjon! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Feil ved innlasting av transaksjonsdata. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Se flere detaljer src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Etterkommer - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Forfader - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Funksjoner + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Denne transaksjonen ble anslått å bli inkludert i blokken + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Forventet i blokk + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Denne transaksjonen ble sett i mempoolen før utvinning + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Sett i Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Denne transaksjonen manglet fra vår mempool før utvinning + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Ikke sett i Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Denne transaksjonen kan ha blitt lagt til out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Denne transaksjonen kan ha blitt prioritert out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Denne transaksjonen kom i konflikt med en annen versjon i mempoolen vår + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Strøm + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Skjul diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Vis mer + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Innganger & Utganger + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Vis diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Justert vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Skjul akselerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF tidslinje src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Tidslinje for akselerasjon src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Strøm - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Skjul diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Vis mer - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Innganger & Utganger - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Vis diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Justert vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transaksjon ikke funnet src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Venter på at den kommer inn i mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Feil ved innlasting av transaksjonsdata. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Funksjoner - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Denne transaksjonen ble anslått å bli inkludert i blokken - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Forventet i blokk - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Denne transaksjonen ble sett i mempoolen før utvinning - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Sett i Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Denne transaksjonen manglet fra vår mempool før utvinning - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Ikke sett i Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Denne transaksjonen kan ha blitt lagt til out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Denne transaksjonen kan ha blitt prioritert out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Denne transaksjonen kom i konflikt med en annen versjon i mempoolen vår - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nygenererte Mynter) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-inn src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig(ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig(HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Forrige utgangs-script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Tidligere utdatatype src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Peg-out til src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Vis mer inndata for å avsløre avgiftsdata src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs andre innganger @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Federation Holdings @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Standard push: handling: 'want', data: ['blocks', ...] for å uttrykke hva du vil ha pushet. Tilgjengelig: blocks , mempool-blocks , live-2h-chart , og stats . Push-transaksjoner relatert til adresse: 'track-address': '3PbJ...bF9B' for å motta alle nye transaksjoner som inneholder den adressen som inngang eller utgang. Returnerer en tabell av transaksjoner. adress-transactions for nye mempool-transaksjoner, og block-transactions for nye blokkbekreftede transaksjoner. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Kodeeksempel @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentasjon + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8782,7 @@ Oversikt for Lightning-kanalen . Se kanalkapasitet, Lightning-nodene som er involvert, relaterte transaksjoner i kjeden og mer. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Få statistikk om Lightning-nettverket (samlet kapasitet, tilkobling osv.), Lightning-noder (kanaler, likviditet osv.) og Lightning-kanaler (status, avgifter osv.). @@ -9182,7 +9532,7 @@ Oversikt for Lightning-nettverksnoden . Se kanaler, kapasitet, plassering, gebyrstatistikk og mer. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Lightning-noder på ISP: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Bla gjennom alle Bitcoin Lightning-noder ved å bruke [AS] ISP og se samlet statistikk som totalt antall noder, total kapasitet, og mer for Internett-leverandøren. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Med en gang + + src/app/services/time.service.ts + 71 + + + + Just now + Akkurat nå + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + siden + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Om ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + innenfor ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Etter + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + før + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee avgift @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation bekreftelse @@ -9904,11 +10594,11 @@ Min konto src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Utforsk src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Test Transaksjon src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Koble til nodene våre src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ API-dokumentasjon src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Lær src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Hva er en mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Hva er en blokkutforsker? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Hva er en mempool utforsker? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Hvorfor bekreftes ikke transaksjonen min? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Flere vanlige spørsmål » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Forskning src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Nettverk src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Mainnet utforsker src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Signet utforsker src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Liquid testnet utforsker src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Liquid utforsker src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Verktøy src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Klokke (utvunnet) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Lovlig src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Bruksvilkår src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Personvernerklæring src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Varemerkepolitikk src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Tredjepartslisenser src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Saldoen din er for lav.Vennligst fyll på kontoen din . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 er ennå ikke ferdigstilt, og kan tilbakestilles når som helst. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Batchbetaling src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Adressetyper src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Oppførsel src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heuristikk src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighash-flagg src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig av src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ne.xlf b/frontend/src/locale/messages.ne.xlf index 5474f3b5a..0c5150f7b 100644 --- a/frontend/src/locale/messages.ne.xlf +++ b/frontend/src/locale/messages.ne.xlf @@ -297,12 +297,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 एंटरप्राइज़ प्रायोजक 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -310,7 +330,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -318,7 +338,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -326,7 +346,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -335,7 +355,7 @@ समुदाय एकीकरण src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -344,7 +364,7 @@ सामुदायिक गठबन्धनहरू src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -353,7 +373,7 @@ परियोजना अनुवादकहरू src/app/components/about/about.component.html - 367 + 395 about.translators @@ -362,7 +382,7 @@ परियोजना योगदानकर्ताहरू src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -371,7 +391,7 @@ परियोजना सदस्यहरू src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -380,7 +400,7 @@ परियोजना संरक्षकहरू src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -391,14 +411,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -411,7 +423,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -419,7 +431,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -427,11 +439,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -439,7 +451,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -447,7 +459,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -456,7 +468,7 @@ वर्चुअल साइज src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -467,12 +479,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -481,7 +497,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -489,7 +505,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -498,55 +514,87 @@ sats / सैटस src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -556,6 +604,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -614,7 +682,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -622,7 +690,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -630,7 +698,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -638,7 +706,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -646,7 +714,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -655,11 +723,11 @@ स्याट/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -676,7 +744,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -684,7 +752,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -692,15 +760,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -708,7 +776,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -716,7 +784,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -724,7 +792,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -732,7 +800,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -740,7 +808,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -748,7 +816,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -756,15 +824,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -772,7 +840,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -780,7 +848,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -788,11 +856,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -800,7 +868,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -808,7 +876,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -816,19 +884,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -836,7 +904,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -844,19 +912,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -865,7 +933,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -873,15 +941,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -889,7 +957,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -897,7 +965,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -905,7 +973,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -913,7 +981,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -921,7 +989,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -929,7 +997,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -937,7 +1005,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -945,7 +1013,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -953,7 +1021,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -961,23 +1029,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -985,7 +1085,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -993,7 +1093,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1001,15 +1101,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1018,60 +1114,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - स्याट - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block अर्को ब्लक @@ -1091,6 +1137,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1148,7 +1198,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1171,12 +1221,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1213,27 +1263,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1246,11 +1296,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1266,11 +1316,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1310,12 +1360,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1352,12 +1402,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1385,8 +1435,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1404,6 +1454,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1412,7 +1474,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1424,14 +1486,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1450,7 +1512,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,6 +1581,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1610,12 +1676,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1682,11 +1752,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1702,7 +1772,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1722,7 +1792,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1730,7 +1800,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1738,7 +1808,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1794,6 +1864,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » अरु पनि हेर्नुहोस् @@ -1801,6 +1883,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1833,10 +1919,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1859,7 +1941,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1895,7 +1977,7 @@ शेष src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1903,15 +1985,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2001,7 +2087,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2022,7 +2108,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2035,7 +2121,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2057,19 +2147,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2079,6 +2169,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2099,7 +2193,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2123,7 +2217,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2140,57 +2234,77 @@ ठेगानाहरू: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2198,7 +2312,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2207,11 +2321,11 @@ डाटा लोड गर्दा त्रुटि। src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2219,7 +2333,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2227,7 +2341,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2235,7 +2353,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2243,7 +2365,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2252,18 +2374,27 @@ प्रकार src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset एसेट @@ -2469,10 +2600,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2492,11 +2619,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2512,11 +2639,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2524,7 +2651,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2550,7 +2677,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2736,7 +2863,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2748,7 +2875,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2796,37 +2923,12 @@ Mempool Goggles™ tooltip - - beta - बिता - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match बराबर src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2838,7 +2940,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2846,7 +2948,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2854,7 +2956,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2866,7 +2968,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2930,15 +3032,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -2946,7 +3048,7 @@ उपलब्ध छैन src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2954,7 +3056,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3003,8 +3105,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3021,12 +3123,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3042,8 +3148,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3079,7 +3185,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3115,8 +3221,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3128,21 +3242,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3212,7 +3343,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3232,15 +3363,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3268,19 +3403,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3304,11 +3443,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3319,11 +3458,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3334,11 +3473,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3366,23 +3505,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3420,15 +3563,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3449,8 +3592,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3462,7 +3605,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3482,7 +3625,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3549,6 +3692,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3560,11 +3707,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3572,7 +3723,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3600,11 +3751,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3669,7 +3820,11 @@ अपेक्षित src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3678,7 +3833,7 @@ वास्तविक src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3687,7 +3842,7 @@ अपेक्षित ब्लक src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3696,7 +3851,7 @@ वास्तविक ब्लक src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3705,11 +3860,15 @@ रुपान्तर src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3718,7 +3877,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3748,7 +3907,7 @@ बिट्स src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3757,7 +3916,7 @@ मर्कल रुट src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3766,7 +3925,7 @@ कठिनाई src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3782,11 +3941,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3795,7 +3954,7 @@ नोन्स src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3804,7 +3963,7 @@ ब्लक हेडर हेक्स src/app/components/block/block.component.html - 300 + 307 block.header @@ -3813,11 +3972,11 @@ अदित src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3827,23 +3986,31 @@ विवरण src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3872,7 +4039,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3881,7 +4048,7 @@ यो ब्लक किन खाली छ? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3889,7 +4056,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3898,24 +4069,20 @@ ब्लकहरू src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3923,7 +4090,7 @@ ऊचाई src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3935,11 +4102,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3952,11 +4123,11 @@ इनाम src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3964,19 +4135,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3985,15 +4160,15 @@ शुल्क src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4002,11 +4177,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4018,11 +4193,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4038,14 +4213,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4056,7 +4231,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4065,7 +4240,7 @@ प्रतिलिपि गरियो! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4291,7 +4466,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4313,6 +4488,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4321,13 +4504,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4335,7 +4522,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4343,14 +4530,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4358,14 +4545,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4373,7 +4560,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4672,7 +4859,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4680,7 +4867,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4845,7 +5032,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4960,24 +5147,28 @@ lightning.nodes-channels-world-map - - Hashrate - हसरेट + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + हसरेट src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4989,11 +5180,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5001,7 +5192,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5009,11 +5200,11 @@ हसरेट (एमए) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5054,11 +5245,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5071,11 +5262,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5088,53 +5279,6 @@ master-page.layer2-networks-header - - Dashboard - डैशबोर्ड - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - ग्राफहरू - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - कागजात - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5165,6 +5309,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5272,7 +5420,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5301,11 +5449,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5349,7 +5505,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5393,8 +5549,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5440,9 +5596,8 @@ 163 - - L-BTC in circulation - L-BTC संचलनमा + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5461,47 +5616,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - लाइटनिङ एक्सप्लोरर - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5556,15 +5670,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5595,6 +5709,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5602,6 +5727,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) पूल भाग्य (1 हप्ता) @@ -5619,7 +5796,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5649,7 +5826,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5675,7 +5852,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5722,11 +5899,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5764,7 +5941,7 @@ सबै माईनर्स हरू src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5786,17 +5963,17 @@ blocks ब्लकहरू - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5807,15 +5984,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5860,11 +6041,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5872,11 +6053,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5895,20 +6076,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5919,6 +6124,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5930,11 +6139,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5946,11 +6155,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5963,11 +6172,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5992,19 +6201,47 @@ कोइनबैस ट्याग src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6012,18 +6249,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6040,7 +6277,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6052,24 +6289,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6106,17 +6416,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6128,7 +6462,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6222,11 +6556,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6333,6 +6667,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) vBytes द्वारा मेम्पपुल (sat/vByte) @@ -6350,29 +6752,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - टिभी दृश्य - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter फिल्टर src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6381,7 +6770,7 @@ उल्टो src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6390,7 +6779,7 @@ ट्रांसेक्शन vBytes प्रति सेकेन्ड (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6398,10 +6787,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + ग्राफहरू + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6409,22 +6806,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6437,363 +6851,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - भर्खरै - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - पहिले - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - लगभग - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - पछि - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6829,11 +6890,11 @@ अनुमानित समय src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6842,11 +6903,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6855,7 +6916,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6863,7 +6924,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6871,7 +6932,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6879,7 +6940,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6887,7 +6948,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6895,7 +6956,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6903,7 +6964,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6911,7 +6972,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6919,15 +6980,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6940,11 +7013,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6955,44 +7028,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - कॉइनबेस + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant वंशज - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7001,48 +7062,251 @@ Ancestor पुर्खा - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + विशेषताहरु - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + कॉइनबेस + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow प्रवाह - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow @@ -7050,26 +7314,34 @@ Hide diagram रेखाचित्र लुकाउनुहोस् + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more थप देखाउनुहोस् + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7077,12 +7349,16 @@ Inputs & Outputs इनपुट र आउटपुट - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs @@ -7090,17 +7366,25 @@ Show diagram रेखाचित्र देखाउनुहोस् + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7108,27 +7392,83 @@ Locktime लकटाइम + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. ट्रांसेक्शन फेला परेन। src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7137,117 +7477,24 @@ मेम्पपुल मा देखिन को लागी प्रतिक्षा गर्दै ... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - विशेषताहरु - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (नयाँ उत्पन्न कोइन्स) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7256,16 +7503,24 @@ पेग-इन src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) स्क्रिप्टसिग (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7275,7 +7530,7 @@ स्क्रिप्टसिग (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7285,7 +7540,7 @@ विटनेस src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7294,16 +7549,24 @@ P2SH रिडीम स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR ट्यापस्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7312,7 +7575,7 @@ P2WSH विटनेस स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7321,7 +7584,7 @@ nसीक्वेंस src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7330,7 +7593,7 @@ अघिल्लो आउटपुट स्क्रिप्ट src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7339,7 +7602,7 @@ अघिल्लो आउटपुट प्रकार src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7348,7 +7611,7 @@ मा पेग-आउट src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7357,7 +7620,7 @@ स्क्रिप्टपबकी (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7367,7 +7630,7 @@ स्क्रिप्टपबकी (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7377,10 +7640,42 @@ शुल्क डेटा प्रकट गर्न थप इनपुटहरू देखाउनुहोस् src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs अन्य इनपुटहरू @@ -7605,6 +7900,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7629,8 +7982,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7682,10 +8035,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7697,21 +8046,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example कोड उदाहरण @@ -7751,6 +8092,15 @@ API Docs API response + + Documentation + कागजात + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8133,7 +8483,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8749,6 +9099,18 @@ lightning.connectivity-ranking + + Lightning Explorer + लाइटनिङ एक्सप्लोरर + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8862,7 +9224,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9349,7 +9711,7 @@ ISP मा लाइटनिङ नोडहरू: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9360,7 +9722,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9463,6 +9825,335 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + भर्खरै + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + पहिले + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + लगभग + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + पछि + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9495,6 +10186,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9549,11 +10248,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9561,7 +10260,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9569,7 +10268,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9578,7 +10277,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9586,7 +10285,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9594,7 +10293,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9602,7 +10301,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9610,7 +10309,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9618,7 +10317,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9626,7 +10325,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9634,7 +10333,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9642,7 +10341,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9650,7 +10349,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9658,7 +10357,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9666,7 +10365,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9674,7 +10373,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9682,7 +10381,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9690,7 +10389,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9698,7 +10397,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9706,7 +10405,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9714,7 +10413,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9722,7 +10421,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9731,7 +10430,7 @@ सेवाका सर्तहरु src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9741,7 +10440,7 @@ गोपनीयता नीति src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9750,7 +10449,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9759,13 +10458,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9788,47 +10487,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9955,7 +10646,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.nl.xlf b/frontend/src/locale/messages.nl.xlf index 5c3ae08e8..95d0f9fd8 100644 --- a/frontend/src/locale/messages.nl.xlf +++ b/frontend/src/locale/messages.nl.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Bedrijfssponsoren 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Whale-sponsoren src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad-sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG-sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Community-integraties src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Community-allianties src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Projectvertalers src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Projectbijdragers src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Projectleden src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Projectonderhouders src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Sorry, er ging iets mis! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ We hebben deze transactie niet kunnen versnellen. Probeer het later opnieuw. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Sluiten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Jouw transactie src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus onbevestigde voorouder(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Virtuele grootte src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Grootte in vbytes van deze transactie (inclusief onbevestigde voorouders) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ In-band kosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Reeds betaalde kosten voor deze transactie (inclusief onbevestigde voorouders) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Hoeveel sneller? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Dit verkort de verwachte wachttijd tot de eerste bevestiging tot src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Samenvatting src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Volgende blok-tarief (markt) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Geschatte extra vereiste vergoeding src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Doeltarief src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Extra vergoeding vereist src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™-kosten + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Servicekosten voor versnellen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Toeslag transactiegrootte src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Geschatte versnel-kosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maximale versnel-kosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Acceleratiekosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Beschikbaar saldo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Ga terug src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Bitcoin-transactie versnellen? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Wacht src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Bevestiging verwacht src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Bevestiging wordt niet snel verwacht src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Voor een extra src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Verkort verwachte bevestigingstijd naar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Betaling aan mempool.space voor versnelling van txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Er wordt maximaal van uw rekening afgeschreven src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Betalen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Kan betaling niet laden src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Betaling laden... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - OF + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Bevestig uw betaling src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Totale extra kosten src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ met src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Betaalmethode laden... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Betaling aan het bevestigen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Wij verwerken uw betaling... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Transactie aan het versnellen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Bevestiging van uw versnelling met onze mining-partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...sorry, dit duurt langer dan verwacht... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Uw transactie wordt versneld! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Uw transactie is geaccepteerd voor versnelling door onze mining-partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Kosten berekenen... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ aanpassen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Versnellen naar ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Versnellen src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Uw transactie krijgt prioriteit door maximaal % van de miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Volgend Blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Versnellingstarief @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Geen versnelde transacties in dit tijdvak src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ Bij blok: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Rond blok: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Mislukt src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Geen actieve versnellingen src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Geen recente versnellingen src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + alle + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Laat meer zien » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ niet versneld src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Balans src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adres: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Bekijk mempool-transacties, bevestigde transacties, saldo en meer voor adres . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Saldogeschiedenis src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - alle - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction van transactie src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ van transacties src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Fout bij het laden van adresdata. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Er zijn te veel transacties op dit adres, meer dan uw backend aankan. Bekijk meer informatie over het opzetten van een sterkere backend. Bekijk in plaats daarvan dit adres op de officiële Mempool-website: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Bevestigd saldo src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Bevestigde UTXO's src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXO's in behandeling src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Type src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Asset @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Ontdek alle activa die zijn uitgegeven op het Liquid-netwerk, zoals L-BTC, L-CAD, USDT en meer. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Overeenkomst src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Elke src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Klassiek src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Leeftijd src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ niet beschikbaar src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Uw browser ondersteunt deze functie niet. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Verwacht src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Werkelijk src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Verwachte Blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Werkelijke Blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Versie src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Moeilijkheid src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Blokheader-hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Details src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Fout bij het laden van blokgegevens. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Waarom is dit blok leeg? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Betaalde versnelvergoeding buiten blockchain om src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Blokken src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Hoogte src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Beloning src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Vergoedingen src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TX's src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Bekijk de meest recente Liquid-blokken, samen met basisstatistieken zoals blokhoogte, blokgrootte en meer. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Bekijk de meest recente Bitcoin-blokken samen met basisstatistieken zoals blokhoogte, blokbeloning, blokgrootte en meer. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Gekopiëerd! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X Tijdlijn src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Consolidatie src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Bedrag (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Testnet4-munten aanvragen src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Bekijk de hashrate en moeilijkheidsgraad voor het Bitcoin netwerk in de loop van de tijd gevisualiseerd. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Hashrate (MG) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Dashboard - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafieken - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentatie - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Niet-stof verlopen @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ blokken src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg-out wordt uitgevoerd... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Aantal keren dat de BTC-bezit van de Federatie onder de 95% van het totale L-BTC-aanbod daalt + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC in circulatie + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Mining-dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightningexplorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Kraan - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Bekijk statistieken voor transacties in de mempool: vergoedingsbereik, totale omvang en meer. Mempool-blokken worden in realtime bijgewerkt wanneer het netwerk nieuwe transacties ontvangt. @@ -5774,15 +5881,15 @@ Aanmelden src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Mining-dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Ontvang realtime Bitcoin-mining-statistieken zoals hashrate, aanpassing van de moeilijkheidsgraad, blokbeloningen, pooldominantie en meer. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Geluk van pool (1 week) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Alle miners src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks blokken - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Andere () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Bekijk mining-poolstatistieken voor : meest recent gedolven blokken, hashrate in de loop van de tijd, totale blokbeloning tot nu toe, bekende Coinbase-adressen en meer. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Coinbaselabel src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Fout bij het laden van poolgegevens. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Nog niet genoeg gegevens src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Dominantie Pool src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Komma-gescheiden lijst met ruwe transacties + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maximale kosten (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Toegestaan? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Reden van afwijzing + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Transactie uitzenden src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Zend een transactie uit naar het netwerk met behulp van de hash van de transactie. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool per vBytes (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV-weergave - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Omkeren src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Transactie-vBytes per seconde (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Limiteer uitschieters src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafieken + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Bekijk de mempoolgrootte (in MvB) en transacties per seconde (in vB/s) gevisualiseerd in de loop van de tijd. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Bekijk Bitcoin-blokken en mempool-congestie in realtime in een vereenvoudigd formaat, perfect voor een tv. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Test-transacties src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Ruwe hexcode src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Komma-gescheiden lijst met ruwe transacties - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maximale kosten (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Toegestaan? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Reden van afwijzing - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Onmiddellijk - - src/app/components/time/time.component.ts - 107 - - - - Just now - Zojuist - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - geleden - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Over ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - binnen ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Na - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - eerder - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Verstuurd @@ -7090,11 +7141,11 @@ Verwacht src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Niet snel src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Bevestigd om src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Blokhoogte src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Uw transactie is versneld src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Wachten tot uw transactie in de mempool verschijnt src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Uw transactie staat in de mempool, maar wordt binnenkort niet bevestigd. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Uw transactie staat bovenaan de mempool en zal naar verwachting binnenkort worden bevestigd. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Uw transactie wordt naar verwachting in het volgende blok bevestigd src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Uw transactie is bevestigd! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Uw transactie is vervangen door een nieuwere versie! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Fout bij het laden van transactiegegevens. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Zie meer details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Ancestor - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Kenmerken + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Deze transactie zou naar verwachting in het blok worden opgenomen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Verwacht in Blok + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Deze transactie werd vóór mining in de mempool gezien + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Gezien in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Deze transactie ontbrak in onze mempool vóór mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Niet gezien in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Deze transactie is mogelijk out-of-band toegevoegd + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Deze transactie heeft mogelijk out-of-band prioriteit gekregen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Deze transactie was in strijd met een andere versie in onze mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Stroom + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Verberg diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Toon meer + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Inputs & Outputs + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Toon diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Aangepaste v-maat + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Verberg versneller src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF-geschiedenis src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Accelatiegeschiedenis src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Stroom - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Verberg diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Toon meer - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Inputs & Outputs - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Toon diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Aangepaste v-maat - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transactie niet gevonden. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Wachten tot het in de mempool verschijnt... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Fout bij het laden van transactiegegevens. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Kenmerken - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Deze transactie zou naar verwachting in het blok worden opgenomen - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Verwacht in Blok - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Deze transactie werd vóór mining in de mempool gezien - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Gezien in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Deze transactie ontbrak in onze mempool vóór mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Niet gezien in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Deze transactie is mogelijk out-of-band toegevoegd - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Deze transactie heeft mogelijk out-of-band prioriteit gekregen - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Deze transactie was in strijd met een andere versie in onze mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nieuw-gegenereerde munten) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Getuige-data src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH claim-script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSH claim-script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Vorig output-script src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Vorig output-type src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Peg-out naar src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Toon meer inputs om vergoedingsgegevens te onthullen src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs andere inputs @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquide Federatie Holdings @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC-aanbod tegenover BTC-holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Default push: actie: 'want', data: ['blocks', ...] om uit te drukken wat je gepushed wilt hebben. Beschikbaar: blocks, mempool-blocks, live-2h-chart, en stats.Pushtransacties gerelateerd aan adres: 'track-address': '3PbJ...bF9B' om alle nieuwe transacties met dat adres als invoer of uitvoer te ontvangen. Retourneert een reeks transacties. address-transactions voor nieuwe mempooltransacties, en block-transactions voor nieuwe blokbevestigde transacties. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Codevoorbeeld @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Documentatie + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8782,7 @@ Overzicht voor Lightning-kanaal . Bekijk de kanaalcapaciteit, de betrokken Lightning-nodes, gerelateerde on-chain-transacties en meer. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightningexplorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Ontvang statistieken over het Lightning-netwerk (totale capaciteit, connectiviteit, enz.), Lightning-nodes (kanalen, liquiditeit, enz.) en Lightning-kanalen (status, kosten, enz.). @@ -9182,7 +9532,7 @@ Overzicht voor het Lightning-node met de naam . Bekijk kanalen, capaciteit, locatie, kostenstatistieken en meer. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Lightningnodes op ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Blader door alle Bitcoin Lightning-nodes met behulp van de [AS] ISP en bekijk verzamelde statistieken zoals het totale aantal knooppunten, de totale capaciteit, en meer voor de ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Onmiddellijk + + src/app/services/time.service.ts + 71 + + + + Just now + Zojuist + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + geleden + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Over ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + binnen ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Na + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + eerder + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee kosten @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation bevestiging @@ -9904,11 +10594,11 @@ Mijn account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Verken src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Test transactie src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Maak verbinding met onze nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ API-documentatie src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Leer src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Wat is een mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Wat is een blokverkenner? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Wat is een mempool-verkenner? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Waarom wordt mijn transactie niet bevestigd? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Meer veelgestelde vragen » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Onderzoek src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Netwerken src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Mainnet-verkenner src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Testnet3 Verkenner src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Testnet4 Verkenner src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Signet-verkenner src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Liquid Testnet verkenner src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Liquid verkenner src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Hulpmiddelen src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Klok (gedolven) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Juridisch src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Servicevoorwaarden src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Privacybeleid src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Handelsmerkbeleid src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Licenties van derden src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Uw saldo is te laag.waardeer alstublieft uw account op . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 is nog niet afgerond en kan op elk moment worden gereset. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Batchbetaling src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Adrestypen src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Gedrag src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heuristieken src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighash-vlaggen src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig van src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.pl.xlf b/frontend/src/locale/messages.pl.xlf index e7281c9a7..84d8aa529 100644 --- a/frontend/src/locale/messages.pl.xlf +++ b/frontend/src/locale/messages.pl.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Sponsorzy Korporacyjni 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Sponsorzy Wieloryby src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Sponsorzy Chad src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Sponsorzy OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integracje społecznościowe src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Sojusze społecznościowe src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Tłumacze projektu src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Współtwórcy projektu src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Członkowie projektu src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Opiekunowie projektu src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Wybacz, coś poszło nie tak! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Nie byliśmy w stanie przyspieszyć tej transakcji. Proszę spróbować ponownie później. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Zamknij src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Twoja transakcja src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus niepotwierdzonych przodków src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Rozmiar wirtualny src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Rozmiar tej transakcji w vbytach (włącznie z niepotwierdzonymi poprzednikami) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Opłaty z użyciem mempool src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Opłaty już zapłacone przez tę transakcję (włącznie z niepotwierdzonymi poprzednikami) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ O ile szybciej? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ To skróci oczekiwany czas do pierwszego potwierdzenia do src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Podsumowanie src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Stawka rynkowa następnego bloku src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Estymata wymaganej opłaty dodatkowej src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Docelowa stawka src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Wymagana dodatkowa opłata src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Opłaty Mempool Acceleratora™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Opłata usługi akceleratora src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Dopłata za wielkość transakcji src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Szacowany koszt akceleracji src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maksymalny koszt akceleracji src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Koszt akceleracji src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Dostępne saldo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Wróć src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Przyspieszyć twoją transakcję? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Poczekaj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Potwierdzenie oczekiwane src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Potwierdzenie nie oczekiwane w najbliższym czasie src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Za dodatkowe src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Skrócenie oczekiwanego czasu do src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Płatność dla mempool.space za przyspieszenie txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Z twojego konta zostanie pobrane nie więcej niż src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Zapłać src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Błąd ładowania faktury src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Ładowanie faktury... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - LUB + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Potwierdź swoją płatność src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Całkowity dodatkowy koszt src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ z src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Ładowanie metod płatności... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Potwierdzanie twojej płatności src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Przetwarzamy twoją płatność... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Przyspieszanie twojej transakcji src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Potwierdzanie przyspieszenia z naszymi partnerami z puli wydobywczych... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...przepraszamy, to trwa dłużej niż się spodziewaliśmy... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Twoja transakcja jest przyspieszana! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Twoja transakcja została zaakceptowana do przyspieszenia przez naszych partnerów z puli wydobywczych. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Obliczam koszt... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ dostosuj src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Przyszpiesz do ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Przyspiesz src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Twoja transakcja otrzyma wyższy priorytet u nawet % wydobywców. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Następny blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Opłaty akceleracji @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Brak przyspieszanych transakcji w tym okresie src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ W bloku: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Około bloku: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Nieudane src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Nie ma aktywnych akceleracji src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Nie było ostatnio akceleracji src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + wszystkie + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Pokaż więcej » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ bez akceleracji src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adres: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Zobacz transakcje w mempoolu, potwierdzone, saldo oraz inne dane dla adresu . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Historia salda src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - wszystkie - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent ostatnie src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction z transakcji src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ z transakcji src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Błąd podczas ładowania adresu. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Na tym adresie jest zbyt wiele transakcji, więcej niż może obsłużyć twój backend. Dowiedz się więcej o konfigurowaniu mocniejszego backendu. Zamiast tego rozważ przeglądanie tego adresu na oficjalnej stronie Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Potwierdzone saldo src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Potwierdzone UTXO src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXO w toku src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Typ src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Aktywo @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Przeglądaj wszystkie aktywa wyemitowane w sieci Liquid, takie jak L-BTC, L-CAD, USDT i inne. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Dopasowanie src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Dowolne src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Kolory src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Klasyczne src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Wiek src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ nie dostępne src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Twoja przeglądarka nie obsługuje tej funkcji. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Prognoza src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Wartość aktualna src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Prognozowany blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Rzeczywisty blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Wersja src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bity src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Korzeń Merkle'a src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Trudność src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Unikalna liczba (nonce) src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Nagłówek bloku w postaci szesnastkowej src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Audyt src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Szczegóły src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Błąd ładowania danych bloku. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Czemu ten blok jest pusty? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Opłata przyspieszenia wniesiona poza mempoolem src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Bloki src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Numer bloku src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Nagroda src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Opłaty src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ Transakcji src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Zobacz najnowsze bloki Liquid wraz z podstawowymi statystykami, takimi jak wysokość bloku, rozmiar bloku i inne. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Zobacz najnowsze bloki Bitcoin wraz z podstawowymi statystykami, takimi jak wysokość bloku, nagroda za blok, rozmiar bloku i inne. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Skopiowano! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ Historia X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Konsolidacje src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoiny src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Dane src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Kwota (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Poproś o monety Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Prędkość haszowania + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Prędkość haszowania src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Zobacz prędkość haszowania i trudność sieci Bitcoin zwizualizowaną w czasie. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Prędkość haszowania (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Pulpit - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Wykresy - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentacja - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Wygasłe nie będące pyłem @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ bloki src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg out w toku... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Liczba przypadków, gdy zasoby BTC Federacji spadają poniżej 95% całkowitej podaży L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC w obiegu + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Pulpit wydobycia - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Eksplorator Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Kranik - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Zobacz statystyki transakcji w mempoolu: zakres opłat, łączna wielkość i inne. Bloki Mempool są aktualizowane w czasie rzeczywistym, gdy sieć otrzymuje nowe transakcje. @@ -5774,15 +5881,15 @@ Zaloguj się src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Pulpit wydobycia + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Pozyskaj w czasie rzeczywistym statystyki wydobycia Bitcoina, takie jak prędkość haszowania, dostosowanie trudności, nagrody za blok, dominacja wśród puli i więcej. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Szczęście puli (1 tydzień) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Wszyscy wydobywcy src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks bloków - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Inne () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Zobacz statystyki wydobywcze dla : ostatnio wydobyte bloki, prędkość haszowania w czasie, łączna dotychczasowa nagroda za blok, znane adresy baz monet i nie tylko. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Tag Coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Błąd ładowania dany puli. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Jeszcze za mało danych src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Dominacja puli src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Lista surowych transakcji oddzielonych przecinkami + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maksymalny poziom opłat (sat/VB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Dozwolone? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Powód odrzucenia + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Rozgłoś transakcję src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Rozgłoś transakcję do sieci przy użyciu jej skrótu. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool wg vBytes (sat / vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Widok TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtr src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Odwróć src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ vBytes transkacji na sekundę (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Ogranicz wartości skrajne src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Wykresy + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Zobacz rozmiar mempoola (w MvB) oraz transakcje na sekundę (w vB/s) wizualizowane w czasie. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Zobacz bloki Bitcoina i zapełnienie mempoola w czasie rzeczywistym w uproszczonym formacie, idealnym dla telewizora. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testowe transakcje src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Surowa postać heksadecymalna src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Lista surowych transakcji oddzielonych przecinkami - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maksymalny poziom opłat (sat/VB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Dozwolone? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Powód odrzucenia - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Natychmiast - - src/app/components/time/time.component.ts - 107 - - - - Just now - Przed chwilą - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - temu - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Za ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - w ciągu ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Po - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - wcześniej - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Wysłana @@ -7090,11 +7141,11 @@ Szacowany czas src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Nie w najbliższym czasie src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Data potwierdzenia src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Wysokość bloku src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Twoja transakcja została przyspieszona src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Oczekiwanie na pojawienie się twojej transakcji w mempoolu src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Twoja transakcja znajduje się w mempool, ale jej potwierdzenie zajmie trochę czasu src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Twoja transakcja znajduje się blisko szczytu mempool i powinna zostać wkrótce potwierdzona. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Twoja transakcja powinna zostać potwierdzona w następnym bloku src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Twoja transakcja jest potwierdzona! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Twoja transakcja została zastąpiona nowszą wersją! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Błąd podczas ładowania danych transakcji. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Zobacz więcej szczegółów src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Potomek - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Przodek - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Cechy + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Ta transakcja miała być uwzględniona w bloku. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Spodziewana w bloku + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Ta transakcja była widoczna w mempoolu przed wydobyciem + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Widziana w Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Tej transakcji nie było w naszym mempoolu zanim została wydobyta + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Nie widziana w Mempoolu + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Ta transakcja mogła zostać dodana poza mempoolem + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Ta transakcja mogła mieć podniesiony priorytet poza mempoolem + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Ta transakcja kolidowała z inną wersją w naszej pamięci + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Przepływ + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Ukryj diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Pokaż więcej + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Wejścia i wyjścia + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Pokaż diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Skorygowany vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Czas blokady + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Ukryj akcelerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ Historia RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Historia Akceleracji src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Przepływ - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Ukryj diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Pokaż więcej - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Wejścia i wyjścia - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Pokaż diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Skorygowany vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Czas blokady - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transakcja nie odnaleziona. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Oczekiwanie aż pojawi się w mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Błąd podczas ładowania danych transakcji. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Cechy - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Ta transakcja miała być uwzględniona w bloku. - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Spodziewana w bloku - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Ta transakcja była widoczna w mempoolu przed wydobyciem - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Widziana w Mempoolu - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Tej transakcji nie było w naszym mempoolu zanim została wydobyta - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Nie widziana w Mempoolu - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Ta transakcja mogła zostać dodana poza mempoolem - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Ta transakcja mogła mieć podniesiony priorytet poza mempoolem - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Ta transakcja kolidowała z inną wersją w naszej pamięci - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nowo Wygenerowane Monety) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (Postać szestnastkowa) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Świadek src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ Skrypt realizacji P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ Skrypt świadka P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Poprzedni skrypt wyjściowy src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Poprzedni typ wyjścia src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Peg-out do src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (Postać szestnastkowa) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Pokaż więcej wejść by ujawnić dane o opłatach src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs inne wejścia @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Zasoby Federacji Liquid @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Zasoby L-BTC wobec BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Domyślny push: action: 'want', data: ['blocks', ...] aby wyrazić co chcesz wysłać. Dostępne: blocks, mempool-blocks, live-2h-chart i stats.Wysłanie transakcji związanych z adresem: 'track-address': '3PbJ...bF9B' aby otrzymać wszystkie nowe transakcje zawierające ten adres jako wejście lub wyjście. Zwraca tablicę transakcji. address-transactions dla nowych transakcji mempool, i block-transactions dla nowo potwierdzonych transakcji w bloku. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Przykład kodu @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Dokumentacja + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8782,7 @@ Przegląd kanału Lightning . Zobacz przepustowość kanału, zaangażowane węzły Lightning, powiązane transakcje w łańcuchu i nie tylko. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Eksplorator Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Uzyskaj statystyki dotyczące sieci Lightning (łączna pojemność, łączność itp.), węzłów Lightning (kanały, płynność finansowa itp.) oraz kanałów Lightning (status, opłaty itp.). @@ -9182,7 +9532,7 @@ Przegląd węzła sieci Lightning o nazwie . Zobacz kanały, pojemność, lokalizację, statystyki opłat i nie tylko. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Węzły lightning na ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Przeglądaj wszystkie węzły Bitcoin Lightning korzystające z ISP [AS] i zobacz zbiorcze statystyki, takie jak łączna liczba węzłów, łączna pojemność i więcej dla tego dostawcy. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Natychmiast + + src/app/services/time.service.ts + 71 + + + + Just now + Przed chwilą + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + temu + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Za ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + w ciągu ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Po + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + wcześniej + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee opłata @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation potwierdzenie @@ -9877,7 +10567,7 @@ Unconfirmed - Niepotwierdzone + Niepotwierdzona src/app/shared/components/confirmations/confirmations.component.html 18 @@ -9904,11 +10594,11 @@ Moje konto src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Eksploruj src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Transakcja testowa src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Połącz się do naszych węzłów src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ Dokumentacja API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Dowiedz się więcej src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Co to jest mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Co to jest eksplorator bloków? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Co to jest eksplorator mempoola? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ Czemu moja transakcja nie jest potwierdzona? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,16 +10689,16 @@ Więcej FAQ » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq Research - Badaj + Badania src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Sieci src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Eksplorator Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Eksplorator Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Eksplorator Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Eksplorator Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Eksplorator Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Eksplorator Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Narzędzia src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,16 +10779,16 @@ Zegar (wydobyty) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined Legal - Informacje prawen + Informacje prawne src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Warunki korzystania z usługi src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Polityka prywatności src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Polityka znaku towarowego src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Licencje stron trzecich src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Twoje saldo jest za niskie.Proszę doładować konto. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 nie jest jeszcze ukończony i może zostać zresetowany w dowolnym momencie. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Płatność zbiorcza (batch) src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Typy adresów src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Zachowanie src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Heurystyki src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Flagi sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig z src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.pt.xlf b/frontend/src/locale/messages.pt.xlf index 82fcaa2a3..1b3735857 100644 --- a/frontend/src/locale/messages.pt.xlf +++ b/frontend/src/locale/messages.pt.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Empresas Patrocinadoras 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Patrocinadores Baleia src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Patrocinadores Chad src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Patrocinadores OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integrações da Comunidade src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Alianças da Comunidade src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Tradutores do Projeto src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Contribuidores do Projeto src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Membros do Projeto src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Mantenedores do projeto src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Desculpe, algo deu errado! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Não conseguimos acelerar esta transação. Por favor, tente novamente mais tarde. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Fechar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Sua transação src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ E mais ancestral(ais) não confirmado(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Tamanho virtual src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Tamanho em vbytes desta transação (incluindo ancestrais não confirmados) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Taxas dentro da banda src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Taxas já pagas por esta transação (incluindo ancestrais não confirmados) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Quão mais rápido? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Isso reduzirá o tempo de espera estimado até a primeira confirmação para src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Resumo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Taxa de mercado do próximo bloco src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Taxa extra estimada necessária src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Taxa alvo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Taxa extra necessária src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Taxas do Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Taxa de serviço do acelerador src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Sobretaxa de tamanho de transação src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Custo estimado de aceleração src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Custo máximo de aceleração src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Custo de aceleração src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Saldo disponível src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Voltar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Acelerar sua transação de Bitcoin? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Esperar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Confirmação esperada src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ A confirmação não é esperada tão cedo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Por um adicional de src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Reduzindo o tempo de confirmação esperado para src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Pagamento a mempool.space pela aceleração com id .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Sua conta será debitada no máximo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Pagar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Falha ao carregar fatura src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Carregando fatura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - OU + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Confirme seu pagamento src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Custo adicional total src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ com src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Carregando forma de pagamento... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Confirmando seu pagamento src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Estamos processando seu pagamento... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Acelerando sua transação src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Confirmando sua aceleração com nossos parceiros de pool de mineração... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...desculpe, isso está demorando mais que o esperado... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Sua transação está sendo acelerada! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Sua transação foi aceita para aceleração por nossos parceiros de pool de mineração. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Calculando custo... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ customizar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Acelerar para ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Acelerar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Sua transação será priorizada por até % dos mineradores. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Próximo Bloco @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Taxas de Aceleração @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Nenhuma transação acelerada neste período src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ No bloco: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Por volta do bloco: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1803,7 +1870,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1812,7 +1879,7 @@ Não há acelerações ativas src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1821,7 +1888,7 @@ Não há acelerações recentes src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1883,6 +1950,19 @@ mining.all-time + + all + todos + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Ver mais » @@ -1890,6 +1970,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1924,10 +2008,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1953,7 +2033,7 @@ sem aceleração src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1992,7 +2072,7 @@ Saldo src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2000,15 +2080,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2100,7 +2184,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2121,7 +2205,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2134,7 +2218,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2156,19 +2244,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2178,6 +2266,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2198,7 +2290,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2222,7 +2314,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2239,11 +2331,11 @@ Endereço: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2251,50 +2343,69 @@ Veja transações no mempool, transações confirmadas, saldo, e mais para o endereço . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Histórico de saldo src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - todos - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent recente src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction de transação src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2303,7 +2414,7 @@ de transações src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2312,11 +2423,11 @@ Erro ao carregar os dados do endereço. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2325,7 +2436,7 @@ Há muitas transações neste endereço, mais do que seu back-end pode suportar. Veja mais sobre como configurar um back-end mais robusto. Considere visualizar este endereço no site oficial do Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2334,7 +2445,11 @@ Saldo confirmado src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2343,7 +2458,11 @@ UTXOs confirmados src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2352,7 +2471,7 @@ UTXOs pendentes src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2361,18 +2480,27 @@ Tipo src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Ativo @@ -2580,10 +2708,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2603,11 +2727,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2623,11 +2747,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2635,7 +2759,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2661,8 +2785,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Explore todos os ativos emitidos na rede Liquid, como L-BTC, L-CAD, USDT e muito mais. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2856,7 +2979,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2868,7 +2991,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2921,37 +3044,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Confere src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2964,7 +3062,7 @@ Qualquer src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2973,7 +3071,7 @@ Matiz src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2982,7 +3080,7 @@ Clássico src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2995,7 +3093,7 @@ Idade src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3061,15 +3159,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3077,7 +3175,7 @@ não disponível src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3086,7 +3184,7 @@ Seu navegador não oferece suporte a esse recurso. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3135,8 +3233,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3153,12 +3251,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3175,8 +3277,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3213,7 +3315,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3252,8 +3354,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3266,22 +3376,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflito src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3353,7 +3480,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3373,15 +3500,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3409,19 +3540,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3445,11 +3580,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3461,11 +3596,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3477,11 +3612,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3509,23 +3644,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3563,15 +3702,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3592,8 +3731,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3606,7 +3745,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3627,7 +3766,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3696,6 +3835,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3707,11 +3850,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3719,7 +3866,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3747,11 +3894,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3816,7 +3963,11 @@ Esperado src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3825,7 +3976,7 @@ Atual src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3834,7 +3985,7 @@ Bloco Esperado src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3843,7 +3994,7 @@ Bloco De Fato src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3852,11 +4003,15 @@ Versão src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3865,7 +4020,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3895,7 +4050,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3904,7 +4059,7 @@ Raiz Merkle src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3913,7 +4068,7 @@ Dificuldade src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3929,11 +4084,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3942,7 +4097,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3951,7 +4106,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3960,11 +4115,11 @@ Auditoria src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3974,23 +4129,31 @@ Detalhes src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4020,7 +4183,7 @@ Erro ao carregar dados do bloco. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4029,7 +4192,7 @@ Por que este bloco está vazio? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4038,7 +4201,11 @@ Taxas de aceleração pagas por fora src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4047,24 +4214,20 @@ Blocos src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4072,7 +4235,7 @@ Altura src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4084,11 +4247,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4101,11 +4268,11 @@ Recompensa src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4113,19 +4280,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4134,15 +4305,15 @@ Taxas src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4151,11 +4322,11 @@ Transações src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4167,11 +4338,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4188,7 +4359,7 @@ Veja os blocos Liquid mais recentes junto com estatísticas básicas, como altura e tamanho do bloco e muito mais. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4196,7 +4367,7 @@ Veja os blocos Bitcoin mais recentes junto com estatísticas básicas, como altura do bloco, recompensa do bloco, tamanho do bloco e muito mais. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4208,7 +4379,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4217,7 +4388,7 @@ Copiado! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4331,7 +4502,7 @@ Purging - Mínimo exigido + Descartando src/app/components/custom-dashboard/custom-dashboard.component.html 72 @@ -4450,7 +4621,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4474,6 +4645,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4483,6 +4662,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4490,7 +4673,7 @@ Linha do Tempo no 𝕏 src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4499,7 +4682,7 @@ Consolidação src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4507,7 +4690,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4515,7 +4698,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4523,7 +4706,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4531,7 +4714,7 @@ Dados src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4539,7 +4722,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4847,7 +5030,7 @@ Quantidade (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4856,7 +5039,7 @@ Solicitar moedas Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5022,7 +5205,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5137,24 +5320,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5166,11 +5353,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5179,7 +5366,7 @@ Veja o hashrate e a dificuldade da rede Bitcoin visualizados ao longo do tempo. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5187,11 +5374,11 @@ Hashrate (Média) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5235,11 +5422,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5252,11 +5439,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5269,53 +5456,6 @@ master-page.layer2-networks-header - - Dashboard - Painel de controle - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Gráficos - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentação - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Poeira Expirada @@ -5349,6 +5489,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5466,7 +5610,7 @@ blocos src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5496,11 +5640,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5548,7 +5700,7 @@ Peg out em andamento... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5597,9 +5749,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Número de vezes que as participações de BTC da Federação caem abaixo de 95% do fornecimento total de L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5650,9 +5801,8 @@ 163 - - L-BTC in circulation - L-BTC circulando + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5672,49 +5822,6 @@ shared.as-of-block - - Mining Dashboard - Painel de mineração - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Explorador Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Torneira - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Veja estatísticas de transações no mempool: faixa de taxas, tamanho agregado e muito mais. Os blocos no mempool são atualizados em tempo real à medida que a rede recebe novas transações. @@ -5772,15 +5879,15 @@ Entrar src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5811,6 +5918,18 @@ dashboard.adjustments + + Mining Dashboard + Painel de mineração + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Obtenha estatísticas de mineração de Bitcoin em tempo real, como hashrate, ajuste de dificuldade, recompensas de bloco, domínio de pool e muito mais. @@ -5819,6 +5938,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Sorte dos Pools (1 sem.) @@ -5837,7 +6008,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5868,7 +6039,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5894,7 +6065,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5941,11 +6112,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5984,7 +6155,7 @@ Todos os mineradores src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6007,17 +6178,17 @@ blocks blocos - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6029,15 +6200,19 @@ Outros () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6082,11 +6257,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6095,11 +6270,11 @@ Veja as estatísticas do pool de mineração : blocos minerados mais recentes, taxa de hash ao longo do tempo, recompensa total do bloco até o momento, endereços de coinbase conhecidos e muito mais. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6118,20 +6293,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6142,6 +6341,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6153,11 +6356,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6170,11 +6373,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6187,11 +6390,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6218,20 +6421,48 @@ Tag da coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Erro ao carregar dados do pool. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6240,7 +6471,7 @@ Ainda não há dados suficientes src/app/components/pool/pool.component.ts - 142 + 177 @@ -6248,11 +6479,11 @@ Domínio dos Pools src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6269,7 +6500,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6281,18 +6512,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Lista de transações cruas separadas por vírgulas + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Taxa máxima de tarifa (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Permitido? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Motivo da rejeição + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Transmitir Transação src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6300,7 +6608,7 @@ Transmita uma transação para a rede usando o hash da transação. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6340,17 +6648,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6363,7 +6695,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6457,11 +6789,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6577,6 +6909,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool em vBytes (sat/vByte) @@ -6595,29 +6995,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Visualização da TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtro src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6626,7 +7013,7 @@ Inverter src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6635,7 +7022,7 @@ Transação vBytes por segundo (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6644,10 +7031,18 @@ Remover valores discrepantes src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Gráficos + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Veja o tamanho do mempool (em MvB) e as transações por segundo (em vB/s) visualizadas ao longo do tempo. @@ -6656,24 +7051,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Veja blocos de Bitcoin e congestionamento da mempool em tempo real em um formato simplificado, perfeito para uma TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Transações de teste src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6687,370 +7098,10 @@ Hex cru src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Lista de transações cruas separadas por vírgulas - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Taxa máxima de tarifa (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Permitido? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Motivo da rejeição - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Imediatamente - - src/app/components/time/time.component.ts - 107 - - - - Just now - Agora mesmo - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - atrás - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Em ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - dentro de ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Depois de - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - antes - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Enviado @@ -7088,11 +7139,11 @@ Tempo estimado src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7102,11 +7153,11 @@ Não tão cedo src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7116,7 +7167,7 @@ Confirmada em src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7125,7 +7176,7 @@ Altura do bloco src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7134,7 +7185,7 @@ Sua transação foi acelerada src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7143,7 +7194,7 @@ Aguardando que sua transação apareça no mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7152,7 +7203,7 @@ Sua transação está no mempool, mas não será confirmada por algum tempo. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7161,7 +7212,7 @@ Sua transação está próxima do topo do mempool e espera-se que seja confirmada em breve. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7170,7 +7221,7 @@ Espera-se que sua transação seja confirmada no próximo bloco src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7179,7 +7230,7 @@ Sua transação foi confirmada! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7188,16 +7239,29 @@ Sua transação foi substituída por uma versão mais recente! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Erro ao carregar dados da transação. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Ver mais detalhes src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7210,11 +7274,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7226,44 +7290,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Conteúdo no bloco + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendente - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7272,18 +7324,398 @@ Ancestor Ancestral - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Características + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Conteúdo no bloco + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Esta transação foi projetada para ser incluída no bloco + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Esperada no bloco + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Esta transação foi vista na mempool antes da mineração + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Visto no Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Esta transação estava faltando em nossa mempool antes da mineração + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Não visto no Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Esta transação pode ter sido adicionada por fora + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Esta transação pode ter sido priorizada por fora + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Esta transação entrou em conflito com outra versão em nosso mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Fluxo + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Esconder diagrama + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Mostrar mais + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Entradas e Saídas + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Mostrar diagrama + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize ajustado + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Esconder acelerador src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7292,7 +7724,7 @@ Linha do tempo RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7302,109 +7734,17 @@ Linha do tempo da aceleração src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Fluxo - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Esconder diagrama - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Mostrar mais - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Entradas e Saídas - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Mostrar diagrama - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize ajustado - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transação não encontrada. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7413,127 +7753,24 @@ Aguardando que apareça no mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Erro ao carregar dados da transação. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Características - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Esta transação foi projetada para ser incluída no bloco - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Esperada no bloco - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Esta transação foi vista na mempool antes da mineração - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Visto no Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Esta transação estava faltando em nossa mempool antes da mineração - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Não visto no Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Esta transação pode ter sido adicionada por fora - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Esta transação pode ter sido priorizada por fora - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Esta transação entrou em conflito com outra versão em nosso mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Moedas Recém-Geradas) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7542,16 +7779,24 @@ Indexado em src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7561,7 +7806,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7571,7 +7816,7 @@ Testemunho src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7580,16 +7825,24 @@ P2SH script de resgate src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7598,7 +7851,7 @@ P2WSH script de testemunho src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7607,7 +7860,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7616,7 +7869,7 @@ Script de saída anterior src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7625,7 +7878,7 @@ Tipo de saída anterior src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7634,7 +7887,7 @@ Peg-out para src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7643,7 +7896,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7653,7 +7906,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7663,10 +7916,42 @@ Mostrar mais entradas para revelar dados de taxas src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs outras entradas @@ -7897,6 +8182,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Holdings da Liquid Federation @@ -7923,9 +8266,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Oferta de L-BTC contra holdings BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7978,10 +8320,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7993,22 +8331,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Push padrão: ação: 'want', data: ['blocks', ...] para expressar o que você deseja push. Disponível: blocks, mempool-blocks, live-2h-chart e stats.Push transações relacionadas ao endereço: 'track-address': '3PbJ ... bF9B' para receber todas as novas transações contendo aquele endereço como entrada ou saída. Retorna uma matriz de transações. address-transactions para novas transações de mempool e block-transactions para novas transações de bloco confirmadas. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Exemplo de código @@ -8048,6 +8377,15 @@ API Docs API response + + Documentation + Documentação + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ Perguntas frequentes @@ -8442,7 +8780,7 @@ Visão geral do canal Lightning . Veja a capacidade do canal, os nós do Lightning envolvidos, as transações relacionadas on-chain e muito mais. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9065,6 +9403,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Explorador Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Obtenha estatísticas sobre a rede Lightning (capacidade agregada, conectividade, etc.), nós Lightning (canais, liquidez, etc.) e canais Lightning (status, taxas, etc.). @@ -9180,7 +9530,7 @@ Visão geral do nó da rede Lightning denominado . Veja canais, capacidade, localização, estatísticas de taxas e muito mais. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9687,7 +10037,7 @@ Nós lightning no Provedor: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9699,7 +10049,7 @@ Navegue por todos os nós Bitcoin Lightning usando o provedor [AS] e veja estatísticas agregadas, como número total de nós, capacidade total, e muito mais para o provedor. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9807,6 +10157,338 @@ 71 + + Immediately + Imediatamente + + src/app/services/time.service.ts + 71 + + + + Just now + Agora mesmo + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + atrás + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Em ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + dentro de ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Depois de + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + antes + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee taxa @@ -9843,6 +10525,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation confirmação @@ -9902,11 +10592,11 @@ Minha conta src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9915,7 +10605,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9924,7 +10614,7 @@ Transação de teste src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9934,7 +10624,7 @@ Conecte-se aos nossos nós src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9943,7 +10633,7 @@ Documentação da API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9952,7 +10642,7 @@ Aprenda src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9961,7 +10651,7 @@ O que é mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9970,7 +10660,7 @@ O que é um explorador de blocos? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9979,7 +10669,7 @@ O que é um explorador de mempool? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9988,7 +10678,7 @@ Por que minha transação não está sendo confirmada? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9997,7 +10687,7 @@ Mais perguntas frequentes » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10006,7 +10696,7 @@ Pesquisa src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10015,7 +10705,7 @@ Redes src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10024,7 +10714,7 @@ Explorador Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10033,7 +10723,7 @@ Explorador Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10042,7 +10732,7 @@ Explorador Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10051,7 +10741,7 @@ Explorador Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10060,7 +10750,7 @@ Explorador Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10069,7 +10759,7 @@ Explorador Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10078,7 +10768,7 @@ Ferramentas src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10087,7 +10777,7 @@ Relógio (Minerado) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10096,7 +10786,7 @@ Jurídico src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10105,7 +10795,7 @@ Termos de Serviço src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10115,7 +10805,7 @@ Política de Privacidade src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10125,7 +10815,7 @@ Política de Marca Registrada src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10135,14 +10825,13 @@ Licenças de terceiros src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Seu saldo está muito baixo.Por favorrecarregue sua conta . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10167,21 +10856,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 ainda não está finalizada e pode ser reiniciada a qualquer momento. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Pagamento em lote src/app/shared/filters.utils.ts - 108 + 110 @@ -10189,7 +10869,7 @@ Tipos de endereço src/app/shared/filters.utils.ts - 119 + 121 @@ -10197,7 +10877,7 @@ Comportamento src/app/shared/filters.utils.ts - 120 + 122 @@ -10205,7 +10885,7 @@ Heurística src/app/shared/filters.utils.ts - 122 + 124 @@ -10213,7 +10893,7 @@ Flags Sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10341,7 +11021,7 @@ Multisig de src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ro.xlf b/frontend/src/locale/messages.ro.xlf index b9e8ed193..f4610a671 100644 --- a/frontend/src/locale/messages.ro.xlf +++ b/frontend/src/locale/messages.ro.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Sponsori Enterprise 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Sponsori Balenă src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Sponsori Chad src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Sponsori OG src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Integrări în comunitate src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Alianțe din Comunitate src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Traducători ai proiectului src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Contribuitori ai proiectului src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Membrii Proiectului src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Întreținători ai proiectului src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Scuze, ceva a mers greșit! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Nu am putut accelera această tranzacție. Te rugăm să încerci din nou mai târziu. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Închide src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Tranzacția dvs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Plus strămoși neconfirmați src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Dimensiune virtuală src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Dimensiunea în vbytes a acestei tranzacții (inclusiv strămoșii neconfirmați) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Comisioane in-band src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Comisioane deja plătite de această tranzacție (inclusiv strămoșii neconfirmați) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Cu cât mai repede? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Timpul estimat de așteptare până la prima confirmare va fi redus la src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Rezumat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Rata din piață pentru următorul bloc src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Necesar comision suplimentar estimat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Rata țintă src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Este necesar comision suplimentar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Comisioane Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Comision pentru serviciul Accelerator src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Suprataxă pentru dimensiunea tranzacției src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Costul de accelerare estimat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Costul maxim de accelerare src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Costul accelerării src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Sold disponibil src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Întoarce-te src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Accelerați tranzacția Bitcoin? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Așteaptă src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Se așteaptă confirmarea src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Confirmarea nu este așteptată în curând src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Pentru suplimentar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Se reduce timpul estimat pentru confirmare la src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Plata către mempool.space pentru accelerarea txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Contul dvs. va fi debitat nu mai mult de src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Plătiți src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Nu s-a încărcat factura src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Se încarcă factura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - SAU + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Confirmați plata src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Cost suplimentar total src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ cu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Se încarcă metoda de plată... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Confirmarea plății dvs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Vă procesăm plata... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Accelerarea tranzacției dvs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Vă confirmăm accelerarea cu partenerii noștri de minerit... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ... ne pare rău, durează mai mult decât se aștepta... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Tranzacția dvs. este accelerată! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Tranzacția dvs. a fost acceptată pentru accelerare de către partenerii noștri de minerit. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Se calculează costul... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ personalizați src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Accelerează la ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Accelerează src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Tranzacția dvs. va fi prioritizată de până la % de mineri . src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Blocul următor @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Comisoane de accelerare @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Nicio tranzacție accelerată pentru acest interval de timp src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ La bloc: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ În jurul blocului: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Eșuat src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Nu există accelerări active src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Nu există accelerări recente src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + toate + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Vezi mai multe » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ nu se accelerează src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Balanță src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adresă: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ Vedeți tranzacțiile din mempool, tranzacțiile confirmate, soldul și altele pentru adresa. src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Istoric sold src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - toate - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction tranzacția din src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ tranzacțiile din src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Eroare la încărcarea datelor adresei. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Sunt prea multe tranzacții la această adresă, mai mult decât poate suporta backend-ul dvs. Vedeți mai multe despre configurarea unui backend mai puternic. Luați în considerare să vizualizați această adresă pe site-ul oficial Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Sold confirmat src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ UTXO confirmate src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ UTXO în așteptare src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Tip src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Activ @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Explorați toate activele emise în rețeaua Liquid, cum ar fi L-BTC, L-CAD, USDT și altele. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Potrivire src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Oricare src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Tentă src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Clasic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Vârstă src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ indisponibil src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Browserul dvs. nu suportă această funcționalitate. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Așteptat src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Real src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Bloc așteptat src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Blocul real src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Versiune src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Biți src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Rădăcină Merkle src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Dificultate src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Număr arbitrar src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Valoarea Hex a antetului blocului src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Detalii src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Eroare la încărcarea datelor blocului. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ De ce acest bloc este gol? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Comisioane de accelerare plătite extern src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Blocuri src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Poziție src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Recompensă src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ Comisioane src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ Vedeți cele mai recente blocuri Liquid împreună cu statistici de bază, cum ar fi înălțimea blocului, dimensiunea blocului și altele. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ Vedeți cele mai recente blocuri Bitcoin împreună cu statistici de bază, cum ar fi înălțimea blocului, recompensa blocului, dimensiunea blocului și altele. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Copiat! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X Cronologie src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Consolidare src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Date src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Sumă (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Solicitați monede Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Rată hash + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Rată hash src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Vedeți rata hash și dificultatea rețelei Bitcoin vizualizate în timp. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Rată hash (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Panou - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafice - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Documentație - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Non-Praf Expirat @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ blocuri src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg out în curs... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - De câte ori deținerile Federației de BTC scad sub 95% din oferta totală de L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - L-BTC în circulație + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Panou Minerit - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Explorator Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Robinet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Vedeți statistici pentru tranzacții din mempool: interval de comisionare, mărime agregată și altele. Blocurile din Mempool sunt actualizate în timp real pe măsură ce rețeaua primește tranzacții noi. @@ -5774,15 +5881,15 @@ Conectare src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Panou Minerit + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Obțineți statistici în timp real despre minerit Bitcoin, cum ar fi hashrate, ajustarea dificultății, recompense de bloc, dominarea pool-ului și multe altele. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Noroc fonduri (1 săptămână) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Toți minerii src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks blocuri - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Altele () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Vedeți statisticile grupului de minerit pentru : cele mai recente blocuri minerite, hashrate în timp, recompensa totală de bloc până în prezent, adresele coinbase cunoscute și multe altele. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Etichetă Coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Eroare la încărcarea datelor grupului. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Date suficiente încă src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Dominanța fondurilor src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Lista de tranzacții brute, separate prin virgulă + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Rata maximă de comision (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Permis? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Motivul respingerii + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Difuzare Tranzacție src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ Difuzați o tranzacție în rețeaua folosind hash-ul tranzacției. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool prin vBytes (sat/vByte) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Mod TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtru src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Inversează src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Tranzacție vBytes pe secundă (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Valori limită aberante src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafice + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Vedeți mărimea mempool (în MvB) și tranzacții pe secundă (în vB/s) vizualizate în timp. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Vedeți blocurile Bitcoin și congestionarea din mempool în timp real într-un format simplificat perfect pentru televizor. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Tranzacții de test src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Hex brut src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Lista de tranzacții brute, separate prin virgulă - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Rata maximă de comision (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Permis? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Motivul respingerii - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Imediat - - src/app/components/time/time.component.ts - 107 - - - - Just now - Chiar acum - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - Acum - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - În ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - în ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - După - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - înainte - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Trimis @@ -7090,11 +7141,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Nu prea curând src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Confirmat la src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Înălțimea blocului src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ Tranzacția dvs. a fost accelerată src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ Se așteaptă ca tranzacția dvs. să apară în mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ Tranzacția dvs. se află în mempool, dar nu va fi confirmată curând. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ Tranzacția dvs. este aproape de partea de sus a mempoolului și este de așteptat să se confirme în curând. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ Tranzacția dvs. este de așteptat să fie confirmată în următorul bloc src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ Tranzacția dvs. este confirmată! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ Tranzacția dvs. a fost înlocuită cu o versiune mai nouă! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Eroare la încărcarea datelor tranzacției. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Vezi mai multe detalii src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendent - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Strămoş - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Caracteristici + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Această tranzacție a fost estimat să fie inclusă în bloc + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Bloc estimat + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Această tranzacție a fost văzută în mempool înainte de minerit + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Văzut în Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Această tranzacție lipsea din mempool-ul nostru înainte de minerit + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Nu a fost văzut în Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Probabil că această tranzacție a fost adăugată din extern + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Probabil că această tranzacție a fost prioritizată din extern + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Această tranzacție a intrat în conflict cu o altă versiune din mempool-ul nostru + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flux + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Ascunde diagrama + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Arată mai multe + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Intrări și Ieșiri + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Arată diagrama + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize ajustat + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Ascunde acceleratorul src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ Cronologie RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Cronologia accelerarării src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flux - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Ascunde diagrama - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Arată mai multe - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Intrări și Ieșiri - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Arată diagrama - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize ajustat - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Tranzacția nu a fost găsită. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Se așteaptă să apară în mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Eroare la încărcarea datelor tranzacției. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Caracteristici - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Această tranzacție a fost estimat să fie inclusă în bloc - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Bloc estimat - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Această tranzacție a fost văzută în mempool înainte de minerit - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Văzut în Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Această tranzacție lipsea din mempool-ul nostru înainte de minerit - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Nu a fost văzut în Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Probabil că această tranzacție a fost adăugată din extern - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Probabil că această tranzacție a fost prioritizată din extern - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Această tranzacție a intrat în conflict cu o altă versiune din mempool-ul nostru - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Monede Nou Generate) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Legat-în src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Martor src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ Script valorificare P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ Script martor P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Script de ieșire anterior src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Tip ieșire anterior src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ Legat-spre src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Arată mai multe intrări pentru a dezvălui datele despre comision src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs alte intrări @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Active Liquid Federation @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Cantitate L-BTC versus active BTC + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Trimitere implicită: acțiune: 'want', data: ['blocks', ...] pentru a exprima ce dorești să trimiți. Disponibil: blocks, mempool-blocks, live-2h-chart, și stats.Tranzacții de trimitere pentru adresa: 'track-address': '3PbJ...bF9B' pentru a primi toate tranzacțiile noi care conțin acea adresă ca intrare sau iesire. Returnează un șir de tranzacții. address-transactions pentru tranzacții noi din mempool, și block-transactions pentru tranzacții confirmate din blocuri noi. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Exemplu de cod @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Documentație + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ Întrebări frecvente @@ -8444,7 +8782,7 @@ Sumar pentru canalul Lightning . Vedeți capacitatea canalului, nodurile Lightning implicate, tranzacțiile în-lanț asociate și altele. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Explorator Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Obțineți statistici despre rețeaua Lightning (capacitate agregată, conectivitate etc.), nodurile Lightning (canale, lichiditate etc.) și canalele Lightning (stare, comisioane etc.). @@ -9182,7 +9532,7 @@ Sumar al nodului de rețea Lightning numit . Vedeți canalele, capacitatea, locația, statisticile comisioanelor și altele. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ Noduri Lightning pe ISP: [CA] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ Răsfoiți toate nodurile Bitcoin Lightning folosind [AS] ISP și vedeți statistici agregate, cum ar fi numărul total de noduri, capacitatea totală, și altele pentru ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Imediat + + src/app/services/time.service.ts + 71 + + + + Just now + Chiar acum + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + Acum + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + În ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + în ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + După + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + înainte + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee comision @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation confirmare @@ -9904,11 +10594,11 @@ Contul meu src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Explorați src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Tranzacție de test src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Conectați-vă la nodurile noastre src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ Documentația API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Învățați src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ Ce este un mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Ce este un explorator de blocuri? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ Ce este un explorator mempool? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ De ce nu se confirmă tranzacția mea? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Mai multe Întrebări frecvente » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Cercetare src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Rețele src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Explorator Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Explorator Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Explorator Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Explorator Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Explorator Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Explorator Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Instrumente src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Ceas (Minerit) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Termenii serviciului src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Politica de confidențialitate src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Politica privind mărcile comerciale src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ Licențe de la terți src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Soldul dvs. este prea mic.Vă rugăm încărcați contul . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 nu este încă finalizat și poate fi resetat oricând. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Lot plată src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Tipuri de adrese src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Comportament src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Euristică src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Multisig din src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.ru.xlf b/frontend/src/locale/messages.ru.xlf index e2a4c6af0..81de75bd8 100644 --- a/frontend/src/locale/messages.ru.xlf +++ b/frontend/src/locale/messages.ru.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Корпоративные спонсоры 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Киты src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Чады src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Гангстеры ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Интеграции c сообществом src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Обьединения Сообщества src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Переводы src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Участники проекта src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Участники проекта src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Разработчики проекта src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Извините, что-то пошло не так! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Нам не удалось ускорить эту транзакцию. Пожалуйста, повторите попытку позже. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Закрыть src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Ваша транзакция src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Плюс неподтвержденных предов src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Виртуальный размер src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Размер этой транзакции в виртуальных байтах (включая неподтвержденных предков) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Оплаченные сборы src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ сат src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Комиссии, уже оплаченные этой транзакцией (включая неподтвержденных предков) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Насколько быстрее? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ Это сократит время ожидания до первого подтверждения src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Сводка src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Рыночная ставка следующего блока src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Приблизительная оценка дополнительной платы src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Целевая ставка src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Необходимая дополнительная плата src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Комиссия Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Комиссия за услуги акселератора src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ Надбавка за размер транзакции src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Ориентировочная стоимость ускорения src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Максимальная стоимость ускорения src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Стоимость ускорения src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Доступные средства src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Назад src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Ускорить вашу биткоин-транзакцию? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Ждать src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Ожидается подтверждение src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Подтверждения в ближайшее время не ожидается src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ За дополнительные src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Сокращение ожидаемого времени подтверждения до src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Оплата на mempool.space за ускорение транзакции .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ С вашего счета будет списано не более src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Оплатить src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Не удалось загрузить инвойс src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Загрузка инвойса... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - ИЛИ + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Подтвердите свой платеж src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Итого дополнительные расходы src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ с src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Загрузка способа оплаты... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Подтверждение вашего платежа src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Мы обрабатываем ваш платеж... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ Ускорение вашей транзакции src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Подтверждаем ваше ускорение у наших партнеров-майнеров... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...извините, операция проводится дольше, чем ожидалось... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ Ваша транзакция ускоряется! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Ваша транзакция была принята для ускорения нашими партнерами-майнерами. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Расчет стоимости... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ изменить src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ Ускорить до ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Протолкнуть src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ Ваша транзакция будет приоритезирована вплоть до % майнеров . src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Следующий блок @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1415,12 +1462,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1449,8 +1496,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1469,6 +1516,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Комиссия за ускорение @@ -1478,7 +1537,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1491,7 +1550,7 @@ В этом временном отрезке нет ускоренной транзакции src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1499,7 +1558,7 @@ В блоке: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1519,7 +1578,7 @@ Около блока: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1592,6 +1651,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1686,12 +1749,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1761,11 +1828,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1782,7 +1849,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1802,7 +1869,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1811,7 +1878,7 @@ Активных ускорений нет src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1820,7 +1887,7 @@ В последнее время ускорений нет src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1882,6 +1949,19 @@ mining.all-time + + all + все + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Подробнее » @@ -1889,6 +1969,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1923,10 +2007,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1952,7 +2032,7 @@ нет ускорения src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1991,7 +2071,7 @@ Баланс src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1999,15 +2079,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2099,7 +2183,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2120,7 +2204,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2133,7 +2217,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2155,19 +2243,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2177,6 +2265,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2197,7 +2289,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2221,7 +2313,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2238,11 +2330,11 @@ Адрес: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2250,50 +2342,69 @@ Отображение транзакций мемпула, подтвержденных транзакций, балансов и многого другого для <x id="PH" equiv-text="this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'"/><x id="PH_1" equiv-text="seoDescriptionNetwork(this.stateService.network)"/> адреса <span class='notranslate'><x id="INTERPOLATION" equiv-text="this.addressString"/>. src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History История баланса src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - все - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent недавние src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction из транзакции src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2302,7 +2413,7 @@ из транзакций src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2311,11 +2422,11 @@ Ошибка загрузки данных адреса src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2324,7 +2435,7 @@ По этому адресу слишком много транзакций; больше, чем может обработать ваш сервер. Подробнее о настройке более мощного бэкэнда. Вместо этого рассмотрите возможность просмотра этого адреса на официальном сайте Mempool: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2333,7 +2444,11 @@ Подтвержденный баланс src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2342,7 +2457,11 @@ Подтвержденные UTXO src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2351,7 +2470,7 @@ Ожидаемые UTXO src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2360,18 +2479,27 @@ Тип src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Актив @@ -2579,10 +2707,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2602,11 +2726,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2622,11 +2746,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2634,7 +2758,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2660,8 +2784,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Изучите все активы, выпущенные в сети Liquid, такие как L-BTC, L-CAD, USDT и другие. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2855,7 +2978,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2867,7 +2990,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2920,37 +3043,12 @@ Mempool Goggles™ tooltip - - beta - бета - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Совпадение src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2963,7 +3061,7 @@ Любой src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2972,7 +3070,7 @@ Оттенок src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2981,7 +3079,7 @@ Классика src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2994,7 +3092,7 @@ Возраст src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3060,15 +3158,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3076,7 +3174,7 @@ Недоступно src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3085,7 +3183,7 @@ Ваш браузер не поддерживает эту функцию. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3134,8 +3232,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3152,12 +3250,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3174,8 +3276,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3212,7 +3314,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3251,8 +3353,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3265,22 +3375,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Конфликт src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3352,7 +3479,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3372,15 +3499,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3408,19 +3539,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3444,11 +3579,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3460,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3476,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3508,23 +3643,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3562,15 +3701,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3591,8 +3730,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3605,7 +3744,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3626,7 +3765,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3695,6 +3834,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3706,11 +3849,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3718,7 +3865,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3746,11 +3893,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3815,7 +3962,11 @@ Ожидаемый src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3824,7 +3975,7 @@ Фактический src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3833,7 +3984,7 @@ Ожидаемый блок src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3842,7 +3993,7 @@ Фактический блок src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3851,11 +4002,15 @@ Версия src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3864,7 +4019,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3894,7 +4049,7 @@ Биты src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3903,7 +4058,7 @@ Корень Меркла src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3912,7 +4067,7 @@ Сложность src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3928,11 +4083,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3941,7 +4096,7 @@ Нонс src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3950,7 +4105,7 @@ Заголовок блока в шестнадцатиричном формате src/app/components/block/block.component.html - 300 + 307 block.header @@ -3959,11 +4114,11 @@ Аудит src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3973,23 +4128,31 @@ Подробности src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4019,7 +4182,7 @@ Ошибка загрузки данных блока. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4028,7 +4191,7 @@ Почему этот блок пуст? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4037,7 +4200,11 @@ Плата за ускорение выплачивается вне диапазона src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4046,24 +4213,20 @@ Блоки src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4071,7 +4234,7 @@ Высота src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4083,11 +4246,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4100,11 +4267,11 @@ Вознагржадение src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4112,19 +4279,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4133,15 +4304,15 @@ Комиссии src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4150,11 +4321,11 @@ Транзакции src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4166,11 +4337,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4187,7 +4358,7 @@ Просмотреть самые последние блоки Liquid, а также базовую статистику, такую как высота блока, размер блока и т. д. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4195,7 +4366,7 @@ Просмотреть самые последние Биткоин-блоки , а также базовую статистику, такую как высота блока, вознаграждение за блок, размер блока и многое другое. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4207,7 +4378,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4216,7 +4387,7 @@ Скопировано! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4449,7 +4620,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4473,6 +4644,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4482,6 +4661,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4489,7 +4672,7 @@ Таймлайн X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4498,7 +4681,7 @@ Консолидация src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4506,7 +4689,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4514,7 +4697,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4522,7 +4705,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4530,7 +4713,7 @@ Данные src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4538,7 +4721,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4846,7 +5029,7 @@ Сумма (саты) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4855,7 +5038,7 @@ Запросить монеты Testnet4 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5021,7 +5204,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5136,24 +5319,28 @@ lightning.nodes-channels-world-map - - Hashrate - Хэшрейт + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Хэшрейт src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5165,11 +5352,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5178,7 +5365,7 @@ Посмотреть хэшрейт и сложность сети Биткоин с течением времени. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5186,11 +5373,11 @@ Хэшрейт (ср.) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5234,11 +5421,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5251,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5268,53 +5455,6 @@ master-page.layer2-networks-header - - Dashboard - Панель управления - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Графики - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Документация - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Истёкшие непылевые @@ -5348,6 +5488,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5465,7 +5609,7 @@ блоки src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5495,11 +5639,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5547,7 +5699,7 @@ Отзвязка в процессе... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5596,9 +5748,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Сколько раз запасы BTC Федерации падали ниже 95% от общего объема поставок L-BTC + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5649,9 +5800,8 @@ 163 - - L-BTC in circulation - L-BTC в обращении + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5671,49 +5821,6 @@ shared.as-of-block - - Mining Dashboard - Майнинг-дэшборд - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning-обозреватель - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Кран - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Посмотреть статистику для транзакциий в мемпуле: диапазон комиссий, совокупный размер и многое другое. Блоки мемпула обновляются в режиме реального времени по мере поступления в сеть новых транзакций. @@ -5771,15 +5878,15 @@ Войти src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5810,6 +5917,18 @@ dashboard.adjustments + + Mining Dashboard + Майнинг-дэшборд + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Получить в режиме реального времени статистику биткоин-майнинга, такую как хэшрейт, корректировка сложности, вознаграждения за блок, доминирование пулов и многое другое. @@ -5818,6 +5937,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Успешность пулов (неделя) @@ -5836,7 +6007,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5867,7 +6038,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5893,7 +6064,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5940,11 +6111,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5983,7 +6154,7 @@ Все майнеры src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6006,17 +6177,17 @@ blocks блоков - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6028,15 +6199,19 @@ Другое () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6081,11 +6256,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6094,11 +6269,11 @@ Просмотреть статистику пула : последние добытые блоки, хэшрейт с течением времени, общее вознаграждение за блок на сегодняшний день, известные коинбейс-адреса и многое другое. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6117,20 +6292,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6141,6 +6340,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6152,11 +6355,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6169,11 +6372,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6186,11 +6389,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6217,20 +6420,48 @@ Тег коинбейс src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Ошибка загрузки данных пула. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6239,7 +6470,7 @@ Недостаточно данных src/app/components/pool/pool.component.ts - 142 + 177 @@ -6247,11 +6478,11 @@ Доминирование пулов src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6268,7 +6499,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6280,18 +6511,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Список необработанных транзакций, разделенных запятыми + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Максимальная ставка комиссии (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Разрешено? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Причина отклонения + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Транслировать транзакцию src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6299,7 +6607,7 @@ Транслировать транзакцию в сеть , используя хэш транзакции. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6339,17 +6647,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6362,7 +6694,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6456,11 +6788,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6576,6 +6908,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Пул ожидания в vBytes (sat/vByte) @@ -6594,29 +6994,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Полноэкранный режим - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Фильтр src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6625,7 +7012,7 @@ Инвертировать src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6634,7 +7021,7 @@ Транзакционные vBytes в секунду (vB / s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6643,10 +7030,18 @@ Экстремальные скачки src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Графики + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Просмотреть размер мемпула (MvB) и количество транзакций в секунду (в vB/s), визуализированные с течением времени. @@ -6655,24 +7050,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Просмотреть биткоин-блоки и загрузку мемпула в режиме реального времени в упрощенном формате, идеально подходящем для телевизора. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Тестовые транзакции src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6686,370 +7097,10 @@ Сырой хекс src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Список необработанных транзакций, разделенных запятыми - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Максимальная ставка комиссии (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Разрешено? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Причина отклонения - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Немедленно - - src/app/components/time/time.component.ts - 107 - - - - Just now - Только что - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - назад - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Через ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - примерно через - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - После - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - перед - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Отправлено @@ -7087,11 +7138,11 @@ Расчетное время src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7101,11 +7152,11 @@ Не в ближайшее время src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7115,7 +7166,7 @@ Подтверждена в src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7124,7 +7175,7 @@ Высота блока src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7133,7 +7184,7 @@ Ваша транзакция была ускорена src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7142,7 +7193,7 @@ Ожидание появления вашей транзакции в мемпуле src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7151,7 +7202,7 @@ Ваша транзакция находится в мемпуле, но некоторое время не будет подтверждена. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7160,7 +7211,7 @@ Ваша транзакция находится на вершине мемпула и, как ожидается, скоро будет подтверждена. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7169,7 +7220,7 @@ Ожидается, что ваша транзакция будет подтверждена в следующем блоке. src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7178,7 +7229,7 @@ Ваша транзакция подтверждена! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7187,16 +7238,29 @@ Ваша транзакция заменена на более новую версию! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Ошибка загрузки данных транзакции. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Посмотреть подробности src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7209,11 +7273,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7225,44 +7289,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Потомок - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7271,18 +7323,398 @@ Ancestor Предок - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Функции + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + По оценкам, эта транзакция должна была попасть в блок + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Ожидается в блоке + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Эта транзакция была замечена в мемпуле до майнинга. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Замечена в Мемпуле + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Эта транзакция отсутствовала в нашем мемпуле до начала майнинга. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Не замечена в Мемпуле + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Эта транзакция, возможно, была добавлена вне канала + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Возможно, эта транзакция была приоритизирована вне канала. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Эта транзакция конфликтовала с другой версией в нашем мемпуле. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Поток + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Скрыть диаграмму + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Показать больше + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Вводы и выводы + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Показать схему + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Cкорректированный vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Время блокировки + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Скрыть акселератор src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7291,7 +7723,7 @@ Хронология RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7301,109 +7733,17 @@ Хронология ускорения src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Поток - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Скрыть диаграмму - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Показать больше - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Вводы и выводы - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Показать схему - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Cкорректированный vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Время блокировки - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Транзакция не найдена. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7412,127 +7752,24 @@ Ожидаем ее появления в пуле ожидания... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Ошибка загрузки данных транзакции. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Функции - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - По оценкам, эта транзакция должна была попасть в блок - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Ожидается в блоке - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Эта транзакция была замечена в мемпуле до майнинга. - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Замечена в Мемпуле - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Эта транзакция отсутствовала в нашем мемпуле до начала майнинга. - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Не замечена в Мемпуле - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Эта транзакция, возможно, была добавлена вне канала - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Возможно, эта транзакция была приоритизирована вне канала. - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Эта транзакция конфликтовала с другой версией в нашем мемпуле. - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Новые сгенерированные монеты) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7541,16 +7778,24 @@ Привязка src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7560,7 +7805,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7570,7 +7815,7 @@ Подпись src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7579,16 +7824,24 @@ Скрипт оплаты P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7597,7 +7850,7 @@ Скрипт свидетеля P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7606,7 +7859,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7615,7 +7868,7 @@ Скрипт предыдущего вывода src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7624,7 +7877,7 @@ Предыдущий тип выхода src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7633,7 +7886,7 @@ Peg-out в src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7642,7 +7895,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7652,7 +7905,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7662,10 +7915,42 @@ Показать больше входов, чтобы узнать данные о комиссиях src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs другие входы @@ -7896,6 +8181,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Активы Liquid Federation @@ -7922,9 +8265,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Предложение L-BTC против BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7977,10 +8319,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7992,22 +8330,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Стандартная отправка: действие: 'want', data: ['blocks', ...] , чтобы выразить, что вы хотите отправить. Доступно: blocks, mempool-blocks , live-2h-chart иstats Отправка-транзакций, связанных с адресом: 'track-address': '3PbJ ... bF9B' чтобы получить все новые транзакции, содержащие этот адрес в качестве входных или выходных данных.. Возвращает массив транзакций. транзакций данного адреса, для новых транзакций из пула ожидания и транзакции блока для транзакций, подтвержденных в новом блоке. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Пример кода @@ -8047,6 +8376,15 @@ API Docs API response + + Documentation + Документация + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ ЧаВО @@ -8441,7 +8779,7 @@ Обзор Лайтнинг-канала . Узнайте о пропускной способности канала, задействованных Лайтнинг-узлах, связанных ончейн-транзакциях и многом другом. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9064,6 +9402,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning-обозреватель + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Получить статистику по сети Лайтнинг (совокупная емкость, соединение и т. д.), Лайтнинг-узлам (каналы, ликвидность и т. д.) и Лайтнинг-каналам (статус, комиссии и т.д.). @@ -9179,7 +9529,7 @@ Обзор узла сети Лайтнинг под названием . Просматривайте каналы, пропускную способность, местоположение, статистику комиссий и многое другое. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9686,7 +10036,7 @@ Lightning-узлов у провайдера: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9698,7 +10048,7 @@ Просмотреть все Лайтнинг-узлы с помощью интернет-провайдера и совокупную статистику, такую как общее количество узлов, общая ёмкость, и многое другое для интернет-провайдера. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9806,6 +10156,338 @@ 71 + + Immediately + Немедленно + + src/app/services/time.service.ts + 71 + + + + Just now + Только что + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + назад + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Через ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + примерно через + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + После + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + перед + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee комиссия @@ -9842,6 +10524,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation подтверждение @@ -9901,11 +10591,11 @@ Мой аккаунт src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9914,7 +10604,7 @@ Подробности src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9923,7 +10613,7 @@ Тестовая транзакция src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9933,7 +10623,7 @@ Подключиться к нашим узлам src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9942,7 +10632,7 @@ API-документация src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9951,7 +10641,7 @@ Узнать больше src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9960,7 +10650,7 @@ Что такое мемпул? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9969,7 +10659,7 @@ Что такое обозреватель блоков? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9978,7 +10668,7 @@ Что такое обозреватель мемпула? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9987,7 +10677,7 @@ Почему моя транзакция не подтверждается? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9996,7 +10686,7 @@ Больше часто задаваемых вопросов » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10005,7 +10695,7 @@ Исследования src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10014,7 +10704,7 @@ Сети src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10023,7 +10713,7 @@ Обозреватель мейннета src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10032,7 +10722,7 @@ Обозреватель Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10041,7 +10731,7 @@ Обозреватель Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10050,7 +10740,7 @@ Обозреватель Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10059,7 +10749,7 @@ Обозреватель тестовой сети Liquid src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10068,7 +10758,7 @@ Обозреватель сети Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10077,7 +10767,7 @@ Инструменты src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10086,7 +10776,7 @@ Часы (Добыто) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10095,7 +10785,7 @@ Юридический раздел src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10104,7 +10794,7 @@ Условия использования src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10114,7 +10804,7 @@ Политика конфиденциальности src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10124,7 +10814,7 @@ Политика товарного знака src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10134,14 +10824,13 @@ Сторонние лицензии src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Ваш баланс слишком мал.Пожалуйста, пополните свой счет . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10166,21 +10855,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 еще не завершен и может быть перезапущен в любой момент. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Совмещенная оплата src/app/shared/filters.utils.ts - 108 + 110 @@ -10188,7 +10868,7 @@ Типы адресов src/app/shared/filters.utils.ts - 119 + 121 @@ -10196,7 +10876,7 @@ Поведение src/app/shared/filters.utils.ts - 120 + 122 @@ -10204,7 +10884,7 @@ Эвристика src/app/shared/filters.utils.ts - 122 + 124 @@ -10212,7 +10892,7 @@ Флаги Sighash src/app/shared/filters.utils.ts - 123 + 125 @@ -10340,7 +11020,7 @@ Мультиподпись из src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.sl.xlf b/frontend/src/locale/messages.sl.xlf index 28d490c9d..6ed915c03 100644 --- a/frontend/src/locale/messages.sl.xlf +++ b/frontend/src/locale/messages.sl.xlf @@ -297,12 +297,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Sponzorji - podjetja 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -310,7 +330,7 @@ Whale Sponsors src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -318,7 +338,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -326,7 +346,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -334,7 +354,7 @@ Community Integrations src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -343,7 +363,7 @@ Zavezništva skupnosti src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -352,7 +372,7 @@ Prevajalci src/app/components/about/about.component.html - 367 + 395 about.translators @@ -361,7 +381,7 @@ Sodelujoči src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -370,7 +390,7 @@ Člani projekta src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -379,7 +399,7 @@ Vzdrževalci src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -390,14 +410,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -410,7 +422,7 @@ Sorry, something went wrong! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -418,7 +430,7 @@ We were not able to accelerate this transaction. Please try again later. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -426,11 +438,11 @@ Close src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -438,7 +450,7 @@ Your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -446,7 +458,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -455,7 +467,7 @@ Navidezna velikost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -466,12 +478,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -480,7 +496,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -488,7 +504,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -496,55 +512,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -554,6 +602,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -612,7 +680,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -620,7 +688,7 @@ How much faster? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -628,7 +696,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -636,7 +704,7 @@ Summary src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -644,7 +712,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -653,11 +721,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -674,7 +742,7 @@ Estimated extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -682,7 +750,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -690,15 +758,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -706,7 +774,7 @@ Accelerator Service Fee src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -714,7 +782,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -722,7 +790,7 @@ Estimated acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -730,7 +798,7 @@ Maximum acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -738,7 +806,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -746,7 +814,7 @@ Available balance src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -754,15 +822,15 @@ Go back src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -770,7 +838,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -778,7 +846,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -786,11 +854,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -798,7 +866,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -806,7 +874,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -814,19 +882,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -834,7 +902,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -842,19 +910,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -863,7 +931,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -871,15 +939,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -887,7 +955,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -895,7 +963,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -903,7 +971,7 @@ with src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -911,7 +979,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -919,7 +987,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -927,7 +995,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -935,7 +1003,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -943,7 +1011,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -951,7 +1019,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -959,23 +1027,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -983,7 +1083,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -991,7 +1091,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -999,15 +1099,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1016,60 +1112,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Naslednji blok @@ -1089,6 +1135,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1146,7 +1196,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1169,12 +1219,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1211,27 +1261,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1244,11 +1294,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1264,11 +1314,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1308,12 +1358,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1350,12 +1400,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1383,8 +1433,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1402,6 +1452,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees @@ -1410,7 +1472,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1422,14 +1484,14 @@ No accelerated transaction for this timeframe src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 At block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1448,7 +1510,7 @@ Around block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1517,6 +1579,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1608,12 +1674,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1679,11 +1749,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1699,7 +1769,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1719,7 +1789,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1727,7 +1797,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1735,7 +1805,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1791,6 +1861,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Prikaži več » @@ -1798,6 +1880,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1830,10 +1916,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1856,7 +1938,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1892,7 +1974,7 @@ Stanje src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1900,15 +1982,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -1998,7 +2084,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2019,7 +2105,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2032,7 +2118,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2054,19 +2144,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2076,6 +2166,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2096,7 +2190,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2120,7 +2214,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2137,57 +2231,77 @@ Naslov: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2195,7 +2309,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2204,11 +2318,11 @@ Napaka pri nalaganju podatkov naslova. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2216,7 +2330,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2224,7 +2338,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2232,7 +2350,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2240,7 +2362,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2249,18 +2371,27 @@ Tip src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Sredstvo @@ -2466,10 +2597,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2489,11 +2616,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2509,11 +2636,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2521,7 +2648,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2547,7 +2674,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2733,7 +2860,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2745,7 +2872,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2793,35 +2920,11 @@ Mempool Goggles™ tooltip - - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2833,7 +2936,7 @@ Any src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2841,7 +2944,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2849,7 +2952,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2861,7 +2964,7 @@ Age src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -2923,22 +3026,22 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 not available src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -2946,7 +3049,7 @@ Your browser does not support this feature. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -2995,8 +3098,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3013,12 +3116,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3034,8 +3141,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3069,7 +3176,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3104,8 +3211,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3117,21 +3232,38 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3201,7 +3333,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3221,15 +3353,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3257,19 +3393,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3292,11 +3432,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3307,11 +3447,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3322,11 +3462,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3354,23 +3494,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3408,15 +3552,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3437,8 +3581,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3450,7 +3594,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3470,7 +3614,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3537,6 +3681,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3547,11 +3695,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3559,7 +3711,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3587,11 +3739,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3654,7 +3806,11 @@ Expected src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3662,7 +3818,7 @@ Actual src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3670,7 +3826,7 @@ Expected Block src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3678,7 +3834,7 @@ Actual Block src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3687,11 +3843,15 @@ Verzija src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3699,7 +3859,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3729,7 +3889,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3738,7 +3898,7 @@ Merkle koren src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3747,7 +3907,7 @@ Težavnost src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3763,11 +3923,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3776,7 +3936,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3785,7 +3945,7 @@ Glava bloka (Hex) src/app/components/block/block.component.html - 300 + 307 block.header @@ -3793,11 +3953,11 @@ Audit src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3807,23 +3967,31 @@ Podrobnosti src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3852,7 +4020,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3860,7 +4028,7 @@ Why is this block empty? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3868,7 +4036,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3877,24 +4049,20 @@ Bloki src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -3902,7 +4070,7 @@ Višina src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3914,11 +4082,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -3931,11 +4103,11 @@ Nagrada src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -3943,19 +4115,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -3964,15 +4140,15 @@ Omrežnine src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -3981,11 +4157,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -3997,11 +4173,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4017,14 +4193,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4035,7 +4211,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4044,7 +4220,7 @@ Kopirano! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4270,7 +4446,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4292,6 +4468,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4300,13 +4484,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4314,7 +4502,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4322,14 +4510,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4337,14 +4525,14 @@ src/app/shared/filters.utils.ts - 106 + 108 Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4352,7 +4540,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4640,7 +4828,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4648,7 +4836,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4813,7 +5001,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -4921,24 +5109,28 @@ lightning.nodes-channels-world-map - - Hashrate - Procesorska moč + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Procesorska moč src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -4950,11 +5142,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -4962,7 +5154,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -4970,11 +5162,11 @@ Procesorska moč (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5017,11 +5209,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5034,11 +5226,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5051,53 +5243,6 @@ master-page.layer2-networks-header - - Dashboard - Pregledna plošča - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafi - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentacija - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5128,6 +5273,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5234,7 +5383,7 @@ blocks src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5263,11 +5412,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5311,7 +5468,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5355,8 +5512,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5402,9 +5559,8 @@ 163 - - L-BTC in circulation - L-BTC v obtoku + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5423,46 +5579,6 @@ shared.as-of-block - - Mining Dashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5517,15 +5633,15 @@ Sign In src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5556,6 +5672,17 @@ dashboard.adjustments + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5563,6 +5690,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Sreča združenj (1 teden) @@ -5580,7 +5759,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5610,7 +5789,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5636,7 +5815,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5682,11 +5861,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5723,7 +5902,7 @@ Skupaj src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5744,17 +5923,17 @@ blocks - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5765,15 +5944,19 @@ Other () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -5817,11 +6000,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -5829,11 +6012,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -5852,20 +6035,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -5876,6 +6083,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -5887,11 +6098,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -5903,11 +6114,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -5920,11 +6131,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -5949,19 +6160,47 @@ Coinbase oznaka src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -5969,18 +6208,18 @@ Not enough data yet src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -5997,7 +6236,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6009,24 +6248,97 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6062,17 +6374,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6084,7 +6420,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6174,11 +6510,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6283,6 +6619,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool v vBajtih (sat/vBajt) @@ -6300,29 +6704,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV pogled - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6331,7 +6722,7 @@ Obrni src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6340,7 +6731,7 @@ Pretočnost, vBajtov na sekundo (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6348,10 +6739,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafi + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6359,22 +6758,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6387,362 +6803,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - - src/app/components/time/time.component.ts - 107 - - - - Just now - Pravkar - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - nazaj - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Po - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -6778,11 +6842,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -6791,11 +6855,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -6804,7 +6868,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -6812,7 +6876,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -6820,7 +6884,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -6828,7 +6892,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -6836,7 +6900,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -6844,7 +6908,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -6852,7 +6916,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -6860,7 +6924,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -6868,15 +6932,27 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -6889,11 +6965,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -6904,44 +6980,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Potomec - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -6950,72 +7014,283 @@ Ancestor Prednik - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator + + Features + Lastnosti - src/app/components/transaction/transaction.component.html + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html 133 - accelerator.hide + Not seen in mempool tooltip - - RBF Timeline + + Not seen in Mempool - src/app/components/transaction/transaction.component.html - 160 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 - RBF Timeline - transaction.rbf-history + Not seen in Mempool + tx-features.tag.not-seen - - Acceleration Timeline + + This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 169 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 - Acceleration Timeline - transaction.acceleration-timeline + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted Flow - src/app/components/transaction/transaction.component.html - 178 + src/app/components/transaction/transaction-raw.component.html + 101 src/app/components/transaction/transaction.component.html - 298 + 121 + + + src/app/components/transaction/transaction.component.html + 241 Transaction flow transaction.flow Hide diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + src/app/components/transaction/transaction.component.html - 181 + 124 hide-diagram Show more + + src/app/components/transaction/transaction-raw.component.html + 125 + src/app/components/transaction/transaction.component.html - 202 + 145 src/app/components/transactions-list/transactions-list.component.html - 191 + 289 src/app/components/transactions-list/transactions-list.component.html - 309 + 460 show-more @@ -7023,29 +7298,41 @@ Inputs & Outputs Vhodi & Izhodi - src/app/components/transaction/transaction.component.html - 220 + src/app/components/transaction/transaction-raw.component.html + 143 src/app/components/transaction/transaction.component.html - 329 + 163 + + + src/app/components/transaction/transaction.component.html + 272 Transaction inputs and outputs transaction.inputs-and-outputs Show diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + src/app/components/transaction/transaction.component.html - 224 + 167 show-diagram Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + src/app/components/transaction/transaction.component.html - 249 + 192 Transaction Adjusted VSize transaction.adjusted-vsize @@ -7053,27 +7340,83 @@ Locktime Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + src/app/components/transaction/transaction.component.html - 271 + 214 transaction.locktime Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + src/app/components/transaction/transaction.component.html - 275 + 218 Transaction Sigops transaction.sigops + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + Transaction not found. Transakcije ni mogoče najti. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7082,117 +7425,24 @@ Čakanje, da se prikaže v mempool-u... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Lastnosti - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Novo ustvarjeni kovanci) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7201,16 +7451,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7220,7 +7478,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7230,7 +7488,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7239,16 +7497,24 @@ P2SH redeem skripta src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7257,7 +7523,7 @@ P2WSH witness skripta src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7266,7 +7532,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7275,7 +7541,7 @@ Skripta prejšnjega izhoda src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7284,7 +7550,7 @@ Tip prejšnjega izhoda src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7293,7 +7559,7 @@ Peg-out v src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7302,7 +7568,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7312,7 +7578,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7321,10 +7587,42 @@ Show more inputs to reveal fee data src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs @@ -7538,6 +7836,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7562,8 +7918,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7614,10 +7970,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7629,22 +7981,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Začetni potisk: action: 'want', data: ['blocks', ...] za izbiro potisnih podatkov. Razpoložljivo: blocks, mempool-blocks, live-2h-chart in stats.Potisk transakcij povezanih z naslovom: 'track-address': '3PbJ...bF9B' za prejem vseh novih transakcij, ki vsebujejo ta naslov v vhodu ali izhodu. Vrne polje transakcij. address-transactions za nove transakcije v mempool-u in block-transactions za potrjene transakcije v novem bloku. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Primer @@ -7684,6 +8027,15 @@ API Docs API response + + Documentation + Dokumentacija + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ @@ -8048,7 +8400,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8632,6 +8984,17 @@ lightning.connectivity-ranking + + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -8737,7 +9100,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9194,7 +9557,7 @@ Lightning nodes on ISP: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9205,7 +9568,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9301,6 +9664,334 @@ 71 + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + Pravkar + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + nazaj + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Po + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee @@ -9333,6 +10024,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation @@ -9387,11 +10086,11 @@ My Account src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9399,7 +10098,7 @@ Explore src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9407,7 +10106,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9416,7 +10115,7 @@ Connect to our Nodes src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9424,7 +10123,7 @@ API Documentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9432,7 +10131,7 @@ Learn src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9440,7 +10139,7 @@ What is a mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9448,7 +10147,7 @@ What is a block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9456,7 +10155,7 @@ What is a mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9464,7 +10163,7 @@ Why isn't my transaction confirming? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9472,7 +10171,7 @@ More FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9480,7 +10179,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9488,7 +10187,7 @@ Networks src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9496,7 +10195,7 @@ Mainnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9504,7 +10203,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9512,7 +10211,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9520,7 +10219,7 @@ Signet Explorer src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9528,7 +10227,7 @@ Liquid Testnet Explorer src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9536,7 +10235,7 @@ Liquid Explorer src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9544,7 +10243,7 @@ Tools src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9552,7 +10251,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9560,7 +10259,7 @@ Legal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9569,7 +10268,7 @@ Pogoji storitve src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9579,7 +10278,7 @@ Politika zasebnosti src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -9588,7 +10287,7 @@ Trademark Policy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -9597,13 +10296,13 @@ Third-party Licenses src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9626,47 +10325,39 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 Address Types src/app/shared/filters.utils.ts - 119 + 121 Behavior src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -9793,7 +10484,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.sr.xlf b/frontend/src/locale/messages.sr.xlf new file mode 100644 index 000000000..7cc11b318 --- /dev/null +++ b/frontend/src/locale/messages.sr.xlf @@ -0,0 +1,10393 @@ + + + + + Close + Zatvori + + node_modules/src/ngb-config.ts + 13 + + + + HH + HH + + node_modules/src/ngb-config.ts + 13 + + + + Close + Zatvori + + node_modules/src/ngb-config.ts + 13 + + + + Select month + Izaberite mesec + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + «« + «« + + node_modules/src/ngb-config.ts + 13 + + + + Previous month + Prethodni mesec + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + + + node_modules/src/ngb-config.ts + 13 + + + + Slide of + + node_modules/src/ngb-config.ts + 13 + + Currently selected slide number read by screen reader + + + Hours + Sati + + node_modules/src/ngb-config.ts + 13 + + + + « + « + + node_modules/src/ngb-config.ts + 13 + + + + Previous + Prethodna + + node_modules/src/ngb-config.ts + 13 + + + + MM + MM + + node_modules/src/ngb-config.ts + 13 + + + + » + » + + node_modules/src/ngb-config.ts + 13 + + + + Select year + Izaberite godinu + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + Next month + Sledećeg meseca + + node_modules/src/ngb-config.ts + 13 + + + node_modules/src/ngb-config.ts + 13 + + + + Next + Sledeće + + node_modules/src/ngb-config.ts + 13 + + + + Minutes + Minuta + + node_modules/src/ngb-config.ts + 13 + + + + »» + »» + + node_modules/src/ngb-config.ts + 13 + + + + First + Prvi + + node_modules/src/ngb-config.ts + 13 + + + + Increment hours + + node_modules/src/ngb-config.ts + 13 + + + + Previous + Prethodni + + node_modules/src/ngb-config.ts + 13 + + + + Decrement hours + + node_modules/src/ngb-config.ts + 13 + + + + Next + Sledeći + + node_modules/src/ngb-config.ts + 13 + + + + Increment minutes + + node_modules/src/ngb-config.ts + 13 + + + + Last + Zadnji + + node_modules/src/ngb-config.ts + 13 + + + + Decrement minutes + + node_modules/src/ngb-config.ts + 13 + + + + SS + SS + + node_modules/src/ngb-config.ts + 13 + + + + Seconds + Sekundi + + node_modules/src/ngb-config.ts + 13 + + + + Increment seconds + + node_modules/src/ngb-config.ts + 13 + + + + Decrement seconds + + node_modules/src/ngb-config.ts + 13 + + + + + + + node_modules/src/ngb-config.ts + 13 + + + + Become a Community Sponsor + + src/app/components/about/about-sponsors.component.html + 4 + + about.community-sponsor-button + + + Become an Enterprise Sponsor + + src/app/components/about/about-sponsors.component.html + 11 + + about.enterprise-sponsor-button + + + The Mempool Open Source Project + Mempool Open Source Projekat + + src/app/components/about/about.component.html + 13 + + about.about-the-project + + + Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties. + Naš mempul i blockčejn istraživač je za Bitcoin zajednicu, fokusirajući se na tržište naknada za transakcije i višeslojni ekosistem, potpuno samostalno hostovan bez ikakvih poverljivih trećih strana. + + src/app/components/about/about.component.html + 14 + + + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + + + Enterprise Sponsors 🚀 + + src/app/components/about/about.component.html + 41 + + about.sponsors.enterprise.withRocket + + + Whale Sponsors + + src/app/components/about/about.component.html + 228 + + about.sponsors.withHeart + + + Chad Sponsors + + src/app/components/about/about.component.html + 241 + + about.sponsors.withHeart + + + OG Sponsors ❤️ + + src/app/components/about/about.component.html + 254 + + about.sponsors.withHeart + + + Community Integrations + + src/app/components/about/about.component.html + 265 + + about.community-integrations + + + Community Alliances + + src/app/components/about/about.component.html + 379 + + about.alliances + + + Project Translators + + src/app/components/about/about.component.html + 395 + + about.translators + + + Project Contributors + + src/app/components/about/about.component.html + 409 + + about.contributors + + + Project Members + + src/app/components/about/about.component.html + 421 + + about.project_members + + + Project Maintainers + + src/app/components/about/about.component.html + 434 + + about.maintainers + + + About + + src/app/components/about/about.component.ts + 49 + + + + Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. + + src/app/components/about/about.component.ts + 50 + + + + Sorry, something went wrong! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 12 + + accelerator.sorry-error-title + + + We were not able to accelerate this transaction. Please try again later. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 19 + + accelerator.error-failed-to-accelerate + + + Close + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 26 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 602 + + close + + + Your transaction + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 45 + + accelerator.your-transaction + + + Plus unconfirmed ancestor(s) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 49 + + accelerator.plus-unconfirmed-ancestors + + + Virtual size + Virtuelna veličina + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 54 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 59 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 25 + + + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 + + + src/app/components/transaction/transaction.component.html + 188 + + Transaction Virtual Size + transaction.vsize + + + Size in vbytes of this transaction (including unconfirmed ancestors) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 59 + + accelerator.transaction-vbytes-size-description + + + In-band fees + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 63 + + accelerator.in-band-fees + + + sats + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 65 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 98 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 131 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 153 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 171 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 183 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 201 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 223 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 239 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 353 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 375 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 386 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 + + + src/app/components/calculator/calculator.component.html + 29 + + + src/app/components/calculator/calculator.component.html + 44 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + + + src/app/lightning/channels-list/channels-list.component.html + 63 + + + src/app/lightning/channels-list/channels-list.component.html + 87 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 17 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 63 + + + src/app/lightning/group/group-preview.component.html + 34 + + + src/app/lightning/group/group.component.html + 32 + + + src/app/lightning/group/group.component.html + 83 + + + src/app/lightning/justice-list/justice-list.component.html + 28 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 50 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 22 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 82 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 23 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 79 + + shared.sats + + + Fees already paid by this transaction (including unconfirmed ancestors) + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 70 + + accelerator.fees-already-paid-description + + + How much faster? + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 79 + + accelerator.how-much-faster + + + This will reduce your expected waiting time until the first confirmation to + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 84,85 + + accelerator.time-estimate-description + + + Summary + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 108 + + accelerator.summary-title + + + Next block market rate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 117 + + accelerator.next-block-rate + + + sat/vB + sat/vB + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 121 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 143 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 3 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 7 + + sat/vB + shared.sat-vbyte + + + Estimated extra fee required + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 125 + + accelerator.estimated-extra-fee-required + + + Target rate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 139 + + accelerator.target-rate + + + Extra fee required + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 147 + + accelerator.extra-fee-required + + + Mempool Accelerator® fees + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 161 + + accelerator.mempool-accelerator-fees + + + Accelerator Service Fee + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 165 + + accelerator.service-fee + + + Transaction Size Surcharge + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 177 + + accelerator.tx-size-surcharge + + + Estimated acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 193 + + accelerator.estimated-cost + + + Maximum acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 212 + + accelerator.maximum-cost + + + Acceleration cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 214 + + accelerator.cost + + + Available balance + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 234 + + accelerator.available-balance + + + Go back + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 266 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 457 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 529 + + go-back + + + Accelerate your Bitcoin transaction? + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 281 + + accelerator.accelerate-your-transaction + + + Wait + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 293 + + accelerator.wait + + + Confirmation expected + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 295 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 610 + + accelerator.confirmation-expected + + + Confirmation not expected any time soon + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 298 + + accelerator.confirmation-not-expected-soon + + + For an additional + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 353 + + accelerator.for-an-additional-cost + + + Reducing expected confirmation time to + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 359,360 + + accelerator.reducing-expected-confirmation-time + + + Payment to mempool.space for acceleration of txid .. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 370,371 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 471 + + accelerator.payment-to-mempool-space + + + Your account will be debited no more than + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 375 + + accelerator.your-account-will-be-debited + + + Pay + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 386 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 411 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 482 + + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 641 + + Pay button label + transaction.pay + + + Failed to load invoice + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 391 + + accelerator.failed-to-load-invoice + + + Loading invoice... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 397 + + accelerator.loading-invoice + + + OR + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 405 + + or + + + Confirm your payment + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 464 + + accelerator.confirm-your-payment + + + Total additional cost + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 480 + + accelerator.total-additional-cost + + + with + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 484 + + accelerator.pay-with + + + Loading payment method... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 513 + + accelerator.loading-payment-method + + + Confirming your payment + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 536 + + accelerator.confirming-your-payment + + + We are processing your payment... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 546 + + accelerator.payment-processing + + + Accelerating your transaction + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 556 + + accelerator.accelerating-your-transaction + + + Confirming your acceleration with our mining pool partners... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 563 + + accelerator.confirming-acceleration-with-miners + + + ...sorry, this is taking longer than expected... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 565 + + accelerator.confirming-acceleration-with-miners + + + Your transaction is being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 576 + + accelerator.success-message + + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + + + Your transaction has been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 587 + + accelerator.confirmed-acceleration-with-miners + + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + + + Calculating cost... + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 614 + + accelerator.calculating-cost + + + customize + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 620 + + accelerator.customize + + + Accelerate to ~ sat/vB + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 623 + + accelerator.accelerate-to-x + + + Accelerate + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 629 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 + + Accelerate button label + transaction.accelerate + + + Your transaction will be prioritized by up to % of miners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 651 + + accelerator.hashrate-percentage-description + + + Next Block + Sledeći blok + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 81 + + + src/app/components/block/block.component.html + 12 + + + src/app/components/difficulty/difficulty-tooltip.component.html + 28 + + + src/app/components/mempool-block/mempool-block.component.ts + 87 + + + src/app/components/pool/pool.component.html + 178 + + + src/app/components/tracker/tracker-bar.component.html + 8 + + + + maximum + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 91 + + + + accelerated + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts + 91 + + + + Status + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 11 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 20 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 109 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 33 + + + src/app/dashboard/dashboard.component.html + 74 + + + src/app/lightning/channels-list/channels-list.component.html + 40 + + Transaction Status + transaction.status + + + First seen + Prvi put primećeno + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 14 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 66 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 20 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 24 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 28 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 17 + + + src/app/components/tracker/tracker.component.html + 59 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 + + + src/app/lightning/node/node.component.html + 74 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 61 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 58 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 11 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 15 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 15 + + Transaction first seen + transaction.first-seen + + + Accelerated + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 16 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 92 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 96 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 89 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 97 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 + + + src/app/shared/filters.utils.ts + 100 + + transaction.audit.accelerated + + + Mined + Minirano + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 18 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 34 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 125 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 66 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 121 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 154 + + + src/app/components/pool/pool.component.html + 305 + + + src/app/components/pool/pool.component.html + 367 + + + src/app/components/rbf-list/rbf-list.component.html + 23 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 38 + + + src/app/dashboard/dashboard.component.html + 86 + + + src/app/dashboard/dashboard.component.html + 106 + + transaction.rbf.mined + + + Fee + Nadoknada + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 23 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 42 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 196 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 21 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 44 + + + src/app/dashboard/dashboard.component.html + 137 + + Transaction fee + transaction.fee + + + Out-of-band fees + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 27 + + transaction.out-of-band-fees + + + Fee rate + Stopa Naknade + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 12 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 46 + + + src/app/components/transaction/cpfp-info.component.html + 13 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 + + + src/app/lightning/channel/channel-box/channel-box.component.html + 18 + + + src/app/lightning/channel/channel-preview.component.html + 31 + + + src/app/lightning/channels-list/channels-list.component.html + 41 + + Transaction fee rate + transaction.fee-rate + + + Accelerated fee rate + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 39 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 53 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 + + Accelerated transaction fee rate + transaction.accelerated-fee-rate + + + Accelerated by + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 48 + + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 30 + + Accelerated to hashrate + transaction.accelerated-by-hashrate + + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + + + Acceleration Fees + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.html + 6 + + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 79 + + + src/app/components/graphs/graphs.component.html + 52 + + accelerator.acceleration-fees + + + No accelerated transaction for this timeframe + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 135 + + + + At block: + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 179 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 255 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 143 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 168 + + + + Around block: + + src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts + 181 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 257 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 145 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 170 + + + + Requests + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 4 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 32 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 4 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 32 + + accelerator.requests + + + accelerated + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 7 + + accelerator.total-accelerated-plural + + + Total Bid Boost + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 11 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 39 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 82 + + accelerator.total-boost + + + BTC + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 13 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 13 + + + src/app/components/amount-selector/amount-selector.component.html + 3 + + + src/app/components/balance-widget/balance-widget.component.html + 7 + + + src/app/components/balance-widget/balance-widget.component.html + 16 + + + src/app/components/balance-widget/balance-widget.component.html + 25 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 18 + + BTC + shared.btc + + + Total vSize + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 20 + + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 46 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 20 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 46 + + accelerator.total-vsize + + + of blocks + + src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html + 23 + + accelerator.percent-of-blocks + + + Accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 2 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.ts + 62 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 67 + + + src/app/components/graphs/graphs.component.html + 49 + + accelerator.accelerations + + + TXID + TXID + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 10 + + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 3 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 106 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 193 + + + src/app/components/push-transaction/push-transaction.component.html + 40 + + + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 + + + src/app/dashboard/dashboard.component.html + 71 + + + src/app/dashboard/dashboard.component.html + 134 + + dashboard.latest-transactions.txid + + + Bid + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 13 + + accelerator.bid + + + Requested + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 14 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 21 + + accelerator.requested + + + Bid Boost + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 17 + + Bid Boost + transaction.bid-boost + + + Block + Blok + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 18 + + + src/app/components/block/block-preview.component.html + 3 + + + src/app/components/block/block.component.html + 9 + + shared.block-title + + + Pool + Pool + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 19 + + + src/app/components/blocks-list/blocks-list.component.html + 17 + + + src/app/components/blocks-list/blocks-list.component.html + 17 + + + src/app/components/pool-ranking/pool-ranking.component.html + 92 + + mining.pool-name + + + Pending + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 64 + + + src/app/components/address/address.component.html + 280 + + + src/app/components/tracker/tracker-bar.component.html + 4 + + accelerator.pending + + + Completed + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 65 + + accelerator.completed + + + Failed + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 68 + + accelerator.canceled + + + There are no active accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 134 + + accelerations.no-accelerations + + + There are no recent accelerations + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 135 + + accelerations.no-accelerations + + + Active Accelerations + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 10 + + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 101 + + accelerator.pending-accelerations + + + Acceleration stats + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 24 + + accelerator.acceleration-stats + + + (1 day) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 27 + + mining.1-day + + + (1 week) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 30 + + mining.1-week + + + (1 month) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 33 + + mining.1-month + + + (all time) + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 36 + + mining.all-time + + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + + + View more » + Pogledaj dalje + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 91 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 34 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 46 + + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 42 + + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 56 + + dashboard.view-more + + + Recent Accelerations + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 113 + + dashboard.recent-accelerations + + + Accelerator Dashboard + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts + 57 + + + + Accelerated to + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 7 + + Accelerated to feerate + transaction.accelerated-to-feerate + + + of hashrate + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html + 32 + + accelerator.x-of-hash-rate + + + not accelerating + + src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts + 99 + + + + pending + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 7 + + accelerator.total-pending + + + Avg Max Bid + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 11 + + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 39 + + accelerator.average-max-bid + + + of block + + src/app/components/acceleration/pending-stats/pending-stats.component.html + 23 + + accelerator.percent-of-block + + + Balance + Balans + + src/app/components/address-graph/address-graph.component.ts + 61 + + + src/app/components/address-graph/address-graph.component.ts + 202 + + + src/app/components/address-graph/address-graph.component.ts + 229 + + + src/app/components/address-graph/address-graph.component.ts + 310 + + + src/app/components/address-graph/address-graph.component.ts + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 + + + src/app/components/address/address-preview.component.html + 31 + + + src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html + 9 + + + + Balances + + src/app/components/address-group/address-group.component.html + 4 + + addresses.balance + + + Total + + src/app/components/address-group/address-group.component.html + 9 + + addresses.total + + + Amount + Količina + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 38 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 194 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 10 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 14 + + + src/app/dashboard/dashboard.component.html + 135 + + dashboard.latest-transactions.amount + + + Date + Datum + + src/app/components/address-transactions-widget/address-transactions-widget.component.html + 6 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 13 + + + src/app/components/search-form/search-results/search-results.component.html + 9 + + shared.date + + + Address + Adresa + + src/app/components/address/address-preview.component.html + 3 + + + src/app/components/address/address.component.html + 3 + + + src/app/components/faucet/faucet.component.html + 80 + + + src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html + 8 + + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 9 + + shared.address + + + Unconfidential + Nepoverljivo + + src/app/components/address/address-preview.component.html + 15 + + + src/app/components/address/address.component.html + 311 + + address.unconfidential + + + Total received + Ukupno Primljeno + + src/app/components/address/address-preview.component.html + 22 + + + src/app/components/address/address.component.html + 295 + + + src/app/components/wallet/wallet.component.html + 48 + + address.total-received + + + Total sent + Ukupno Poslato + + src/app/components/address/address-preview.component.html + 26 + + address.total-sent + + + Transactions + Transakcije + + src/app/components/address/address-preview.component.html + 35 + + + src/app/components/block/block.component.html + 406 + + + src/app/components/block/block.component.html + 438 + + + src/app/components/block/block.component.html + 462 + + + src/app/components/blocks-list/blocks-list.component.html + 27 + + + src/app/components/clock/clock.component.html + 59 + + + src/app/components/mempool-block/mempool-block.component.html + 32 + + + src/app/components/wallet/wallet.component.html + 80 + + address.transactions + + + Unspent TXOs + + src/app/components/address/address-preview.component.html + 39 + + address.unspent_txos + + + Confidential + Poverljivo + + src/app/components/address/address-preview.component.html + 55 + + + src/app/components/address/address.component.html + 256 + + + src/app/components/amount/amount.component.html + 21 + + + src/app/components/asset-circulation/asset-circulation.component.html + 2 + + + src/app/components/asset/asset.component.html + 158 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 205 + + + src/app/components/transaction/transaction-preview.component.html + 18 + + + src/app/components/transactions-list/transactions-list.component.html + 484 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 98 + + + src/app/dashboard/dashboard.component.html + 146 + + shared.confidential + + + Address: + Adresa: + + src/app/components/address/address-preview.component.ts + 73 + + + src/app/components/address/address.component.ts + 173 + + + + See mempool transactions, confirmed transactions, balance, and more for address . + + src/app/components/address/address-preview.component.ts + 74 + + + src/app/components/address/address.component.ts + 174 + + + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + + + Balance History + + src/app/components/address/address.component.html + 93 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 237 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 + + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history + + + recent + + src/app/components/address/address.component.html + 101 + + recent + + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + + + of transaction + + src/app/components/address/address.component.html + 129 + + X of X Address Transaction + + + of transactions + + src/app/components/address/address.component.html + 130 + + X of X Address Transactions (Plural) + + + Error loading address data. + Greška pri učitavanju podatake o adresi + + src/app/components/address/address.component.html + 229 + + + src/app/components/address/address.component.html + 246 + + address.error.loading-address-data + + + There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + + src/app/components/address/address.component.html + 232,235 + + Electrum server limit exceeded error + + + Confirmed balance + + src/app/components/address/address.component.html + 275 + + + src/app/components/wallet/wallet.component.html + 40 + + address.confirmed-balance + + + Confirmed UTXOs + + src/app/components/address/address.component.html + 285 + + + src/app/components/wallet/wallet.component.html + 44 + + address.confirmed-utxos + + + Pending UTXOs + + src/app/components/address/address.component.html + 290 + + address.pending-utxos + + + Type + Vrsta + + src/app/components/address/address.component.html + 300 + + + src/app/components/transaction/cpfp-info.component.html + 9 + + + src/app/components/transactions-list/transactions-list.component.html + 447 + + address.type + + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + + + Asset + Asset + + src/app/components/asset/asset.component.html + 3 + + Liquid Asset page title + asset + + + Name + Ime + + src/app/components/asset/asset.component.html + 21 + + + src/app/components/assets/assets.component.html + 4 + + + src/app/components/assets/assets.component.html + 31 + + + src/app/lightning/node/node.component.html + 138 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 28 + + Asset name header + + + Precision + Preciznost + + src/app/components/asset/asset.component.html + 25 + + Liquid Asset precision + asset.precision + + + Issuer + Izdavaoca + + src/app/components/asset/asset.component.html + 29 + + Liquid Asset issuer + asset.issuer + + + Issuance TX + Izdavanja TX + + src/app/components/asset/asset.component.html + 33 + + Liquid Asset issuance TX + asset.issuance-tx + + + Pegged in + + src/app/components/asset/asset.component.html + 37 + + Liquid Asset pegged-in amount + asset.pegged-in + + + Pegged out + + src/app/components/asset/asset.component.html + 41 + + Liquid Asset pegged-out amount + asset.pegged-out + + + Issued amount + Izdati iznos + + src/app/components/asset/asset.component.html + 45 + + Liquid Asset issued amount + asset.issued-amount + + + Burned amount + + src/app/components/asset/asset.component.html + 49 + + Liquid Asset burned amount + asset.burned-amount + + + Circulating amount + + src/app/components/asset/asset.component.html + 53 + + + src/app/components/asset/asset.component.html + 57 + + Liquid Asset circulating amount + asset.circulating-amount + + + of   + od   + + src/app/components/asset/asset.component.html + 78 + + asset.M_of_N + + + Peg In/Out and Burn Transactions + + src/app/components/asset/asset.component.html + 79 + + Liquid native asset transactions title + + + Issuance and Burn Transactions + + src/app/components/asset/asset.component.html + 80 + + Default asset transactions title + + + Error loading asset data. + + src/app/components/asset/asset.component.html + 150 + + asset.error.loading-asset-data + + + Asset: + + src/app/components/asset/asset.component.ts + 75 + + + + Browse an overview of the Liquid asset (): see issued amount, burned amount, circulating amount, related transactions, and more. + + src/app/components/asset/asset.component.ts + 108 + + + + Group of assets + + src/app/components/assets/asset-group/asset-group.component.html + 8 + + + src/app/components/assets/assets-featured/assets-featured.component.html + 11 + + + + No featured assets + + src/app/components/assets/assets-featured/assets-featured.component.html + 3 + + liquid.no-featured.assets + + + Assets + + src/app/components/assets/assets-nav/assets-nav.component.html + 3 + + + src/app/components/assets/assets-nav/assets-nav.component.ts + 42 + + + src/app/components/assets/assets.component.ts + 44 + + Assets page header + + + Featured + Uobličen + + src/app/components/assets/assets-nav/assets-nav.component.html + 9 + + + + All + Sve + + src/app/components/assets/assets-nav/assets-nav.component.html + 13 + + + src/app/components/block-filters/block-filters.component.html + 21 + + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 73 + + + src/app/components/pool-ranking/pool-ranking.component.html + 72 + + + src/app/components/pool/pool.component.html + 122 + + + src/app/components/pool/pool.component.html + 145 + + + src/app/components/pool/pool.component.html + 530 + + + src/app/components/pool/pool.component.html + 555 + + + src/app/components/rbf-list/rbf-list.component.html + 9 + + + src/app/components/statistics/statistics.component.html + 57 + + + src/app/dashboard/dashboard.component.ts + 78 + + + + Search asset + + src/app/components/assets/assets-nav/assets-nav.component.html + 19 + + Search Assets Placeholder Text + + + Clear + + src/app/components/assets/assets-nav/assets-nav.component.html + 21 + + Search Clear Button + + + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. + + src/app/components/assets/assets-nav/assets-nav.component.ts + 43 + + + + Ticker + Indeks + + src/app/components/assets/assets.component.html + 5 + + + src/app/components/assets/assets.component.html + 32 + + Asset ticker header + + + Issuer domain + + src/app/components/assets/assets.component.html + 6 + + + src/app/components/assets/assets.component.html + 33 + + Asset Issuer Domain header + + + Asset ID + + src/app/components/assets/assets.component.html + 7 + + + src/app/components/assets/assets.component.html + 34 + + Asset ID header + + + Error loading assets data. + + src/app/components/assets/assets.component.html + 50 + + Asset data load error + + + BTC Holdings + + src/app/components/balance-widget/balance-widget.component.html + 5 + + + src/app/components/balance-widget/balance-widget.component.html + 38 + + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 12 + + dashboard.btc-holdings + + + Change (7d) + + src/app/components/balance-widget/balance-widget.component.html + 14 + + + src/app/components/balance-widget/balance-widget.component.html + 45 + + dashboard.7d-change + + + Change (30d) + + src/app/components/balance-widget/balance-widget.component.html + 23 + + + src/app/components/balance-widget/balance-widget.component.html + 52 + + dashboard.30d-change + + + Block Fee Rates + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 6 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 72 + + + src/app/components/graphs/graphs.component.html + 16 + + mining.block-fee-rates + + + Avg Block Fee (24h) + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 51 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 76 + + mining.avg-block-fee-24h + + + Avg Block Fee (1m) + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 57 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 84 + + mining.avg-block-fee-1m + + + See Bitcoin feerates visualized over time, including minimum and maximum feerates per block along with feerates at various percentiles. + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 73 + + + + Block Fees + + src/app/components/block-fees-graph/block-fees-graph.component.html + 6 + + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 69 + + + src/app/components/graphs/graphs.component.html + 18 + + mining.block-fees + + + See the average mining fees earned per Bitcoin block visualized in BTC and USD over time. + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 70 + + + + Indexing blocks + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 119 + + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 137 + + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 116 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 119 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 204 + + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 202 + + + src/app/components/indexing-progress/indexing-progress.component.html + 1 + + + src/app/components/pool/pool-preview.component.ts + 122 + + + + Block Fees Vs Subsidy + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html + 6 + + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 78 + + + src/app/components/graphs/graphs.component.html + 20 + + mining.block-fees-subsidy-subsidy + + + See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time. + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 79 + + + + At block + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 185 + + + + Around block + + src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts + 187 + + + + select filter categories to highlight matching transactions + + src/app/components/block-filters/block-filters.component.html + 2 + + Mempool Goggles™ tooltip + + + Match + Meč + + src/app/components/block-filters/block-filters.component.html + 18 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 70 + + mempool-goggles.match + + + Any + + src/app/components/block-filters/block-filters.component.html + 24 + + mempool-goggles.any + + + Tint + + src/app/components/block-filters/block-filters.component.html + 29 + + mempool-goggles.tint + + + Classic + + src/app/components/block-filters/block-filters.component.html + 32 + + + src/app/components/theme-selector/theme-selector.component.html + 3 + + mempool-goggles.classic + + + Age + + src/app/components/block-filters/block-filters.component.html + 35 + + mempool-goggles.age + + + Block Health + + src/app/components/block-health-graph/block-health-graph.component.html + 6 + + + src/app/components/block-health-graph/block-health-graph.component.ts + 63 + + + src/app/components/graphs/graphs.component.html + 26 + + mining.blocks-health + + + See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool's re-implementation of Bitcoin Core's transaction selection algorithm. + + src/app/components/block-health-graph/block-health-graph.component.ts + 64 + + + + No data to display yet. Try again later. + + src/app/components/block-health-graph/block-health-graph.component.ts + 109 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 120 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 86 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 233 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 146 + + + + Health + Zdravlje + + src/app/components/block-health-graph/block-health-graph.component.ts + 190 + + + src/app/components/block/block.component.html + 62 + + + src/app/components/blocks-list/blocks-list.component.html + 20 + + + src/app/components/blocks-list/blocks-list.component.html + 20 + + + src/app/components/pool/pool.component.html + 307 + + + + not available + Nije dostupno + + src/app/components/block-overview-graph/block-overview-graph.component.html + 8 + + block.not-available + + + Your browser does not support this feature. + + src/app/components/block-overview-graph/block-overview-graph.component.html + 23 + + webgl-disabled + + + Transaction + Transakcija + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 12 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 12 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 11 + + + src/app/components/tracker/tracker.component.html + 34 + + + src/app/components/transaction/transaction-preview.component.html + 3 + + + src/app/components/transaction/transaction.component.html + 10 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 72 + + shared.transaction + + + Confirmed + Potvrđeno + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 32 + + + src/app/components/tracker/tracker-bar.component.html + 10 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 + + + src/app/shared/components/confirmations/confirmations.component.html + 9 + + Transaction confirmed state + transaction.confirmed + + + Effective fee rate + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 52 + + + src/app/components/push-transaction/push-transaction.component.html + 41 + + + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 + + Effective transaction fee rate + transaction.effective-fee-rate + + + Weight + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 63 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 29 + + + src/app/components/transaction/cpfp-info.component.html + 12 + + Transaction Weight + transaction.weight + + + Audit status + Veličina revizije + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 67 + + transaction.audit-status + + + Removed + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 71 + + + src/app/shared/components/confirmations/confirmations.component.html + 15 + + Transaction removed state + transaction.audit.removed + + + Marginal fee rate + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 72 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 87 + + transaction.audit.marginal + + + High sigop count + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 73 + + transaction.audit.sigop + + + Recently broadcasted + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 74 + + transaction.audit.recently-broadcasted + + + Recently CPFP'd + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 75 + + transaction.audit.recently-cpfped + + + Added + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 76 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added + tx-features.tag.added + + + Prioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 77 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized + tx-features.tag.prioritized + + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + + + Conflict + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 88 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict + tx-features.tag.conflict + + + Block Rewards + + src/app/components/block-rewards-graph/block-rewards-graph.component.html + 7 + + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 67 + + + src/app/components/graphs/graphs.component.html + 22 + + mining.block-rewards + + + See Bitcoin block rewards in BTC and USD visualized over time. Block rewards are the total funds miners earn from the block subsidy and fees. + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 68 + + + + Block Sizes and Weights + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.html + 5 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 64 + + + src/app/components/graphs/graphs.component.html + 24 + + mining.block-sizes-weights + + + See Bitcoin block sizes (MB) and block weights (weight units) visualized over time. + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 65 + + + + Size + Veličina + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 187 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 242 + + + src/app/components/block/block.component.html + 54 + + + src/app/components/blocks-list/blocks-list.component.html + 28 + + + src/app/components/clock/clock.component.html + 54 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 156 + + + src/app/components/mempool-block/mempool-block.component.html + 36 + + + src/app/components/mempool-graph/mempool-graph.component.ts + 331 + + + src/app/components/pool/pool.component.html + 311 + + + src/app/components/pool/pool.component.html + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 + + + src/app/components/transaction/transaction.component.html + 184 + + + src/app/dashboard/dashboard.component.html + 108 + + + + Weight + Težina + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 195 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 273 + + + src/app/components/block/block-preview.component.html + 32 + + + src/app/components/block/block.component.html + 58 + + + src/app/components/block/block.component.html + 402 + + + src/app/components/block/block.component.html + 429 + + + src/app/components/block/block.component.html + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 + + + src/app/components/transaction/transaction.component.html + 200 + + + + Size per weight + Veličina po težini + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 203 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 285 + + + + Block : + Blok : + + src/app/components/block-view/block-view.component.ts + 110 + + + src/app/components/block/block-preview.component.ts + 104 + + + src/app/components/block/block.component.ts + 262 + + + + See size, weight, fee range, included transactions, and more for Liquid block (). + + src/app/components/block-view/block-view.component.ts + 112 + + + src/app/components/block/block-preview.component.ts + 106 + + + src/app/components/block/block.component.ts + 264 + + + + See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + + src/app/components/block-view/block-view.component.ts + 114 + + + src/app/components/block/block-preview.component.ts + 108 + + + src/app/components/block/block.component.ts + 266 + + + + Genesis + Geneza + + src/app/components/block/block-preview.component.html + 10 + + + src/app/components/block/block.component.html + 10 + + + + Timestamp + Vremenska Oznaka + + src/app/components/block/block-preview.component.html + 26 + + + src/app/components/block/block.component.html + 48 + + + src/app/components/blocks-list/blocks-list.component.html + 18 + + + src/app/components/pool/pool.component.html + 192 + + + src/app/components/pool/pool.component.html + 304 + + + src/app/components/pool/pool.component.html + 366 + + + src/app/components/search-form/search-results/search-results.component.html + 15 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 + + block.timestamp + + + Median fee + + src/app/components/block/block-preview.component.html + 36 + + + src/app/components/block/block.component.html + 136 + + + src/app/components/mempool-block/mempool-block.component.html + 16 + + block.median-fee + + + Total fees + + src/app/components/block/block-preview.component.html + 41 + + + src/app/components/block/block.component.html + 147 + + + src/app/components/block/block.component.html + 173 + + + src/app/components/block/block.component.html + 396 + + + src/app/components/block/block.component.html + 417 + + + src/app/components/block/block.component.html + 454 + + + src/app/components/mempool-block/mempool-block.component.html + 28 + + Total fees in a block + block.total-fees + + + Miner + Rudar + + src/app/components/block/block-preview.component.html + 53 + + + src/app/components/block/block.component.html + 182 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 + + block.miner + + + transaction + + src/app/components/block/block-transactions.component.html + 4 + + + src/app/components/block/block.component.html + 342 + + + src/app/components/blockchain-blocks/blockchain-blocks.component.html + 55 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 31 + + shared.transaction-count.singular + + + transactions + + src/app/components/block/block-transactions.component.html + 5 + + + src/app/components/block/block.component.html + 343 + + + src/app/components/blockchain-blocks/blockchain-blocks.component.html + 56 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 32 + + shared.transaction-count.plural + + + Error loading data. + + src/app/components/block/block-transactions.component.html + 16 + + + src/app/lightning/channel/channel-preview.component.html + 70 + + + src/app/lightning/node/node-preview.component.html + 66 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 61 + + error.general-loading-data + + + This block does not belong to the main chain, it has been replaced by: + + src/app/components/block/block.component.html + 5 + + Block reorg + block.reorged + + + Previous Block + Prethodni blok + + src/app/components/block/block.component.html + 19 + + Previous Block + + + Stale + + src/app/components/block/block.component.html + 30 + + Stale block state + block.stale + + + Hash + Heš + + src/app/components/block/block.component.html + 44 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + + block.hash + + + Unknown + Nepoznat + + src/app/components/block/block.component.html + 73 + + + src/app/components/blocks-list/blocks-list.component.html + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 + + + src/app/components/pool-ranking/pool-ranking.component.html + 123 + + + src/app/components/pool/pool.component.html + 106 + + + src/app/components/pool/pool.component.html + 340 + + + src/app/lightning/channel/closing-type/closing-type.component.ts + 32 + + + src/app/lightning/node/node-preview.component.html + 52 + + + src/app/lightning/node/node.component.html + 56 + + + src/app/lightning/node/node.component.html + 103 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 154 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 323 + + + src/app/services/api.service.ts + 275 + + + src/app/services/api.service.ts + 288 + + unknown + + + Fee span + + src/app/components/block/block.component.html + 132 + + + src/app/components/mempool-block/mempool-block.component.html + 20 + + mempool-block.fee-span + + + Based on average native segwit transaction of 140 vBytes + + src/app/components/block/block.component.html + 140 + + + src/app/components/fees-box/fees-box.component.html + 16 + + + src/app/components/fees-box/fees-box.component.html + 22 + + + src/app/components/fees-box/fees-box.component.html + 27 + + + src/app/components/fees-box/fees-box.component.html + 32 + + + src/app/components/mempool-block/mempool-block.component.html + 17 + + Transaction fee tooltip + + + Subsidy + fees + + src/app/components/block/block.component.html + 162 + + + src/app/components/block/block.component.html + 177 + + Total subsidy and fees in a block + block.subsidy-and-fees + + + Expected + Očekivano + + src/app/components/block/block.component.html + 232 + + + src/app/components/pool/pool.component.html + 190 + + block.expected + + + Actual + Aktuelan + + src/app/components/block/block.component.html + 234 + + block.actual + + + Expected Block + Očekivan blok + + src/app/components/block/block.component.html + 238 + + block.expected-block + + + Actual Block + Aktuelan blok + + src/app/components/block/block.component.html + 253 + + block.actual-block + + + Version + Verzija + + src/app/components/block/block.component.html + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 + + + src/app/components/transaction/transaction.component.html + 210 + + transaction.version + + + Taproot + + src/app/components/block/block.component.html + 281 + + + src/app/components/tx-features/tx-features.component.html + 12 + + + src/app/components/tx-features/tx-features.component.html + 14 + + + src/app/components/tx-features/tx-features.component.html + 16 + + + src/app/components/tx-features/tx-features.component.html + 18 + + + src/app/components/tx-features/tx-features.component.html + 21 + + Taproot + tx-features.tag.taproot + + + Bits + Bits + + src/app/components/block/block.component.html + 284 + + block.bits + + + Merkle root + Merkle koren + + src/app/components/block/block.component.html + 288 + + block.merkle-root + + + Difficulty + Teškoća + + src/app/components/block/block.component.html + 299 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 7 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 14 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 75 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 302 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 403 + + block.difficulty + + + Nonce + Nonce + + src/app/components/block/block.component.html + 303 + + block.nonce + + + Block Header Hex + + src/app/components/block/block.component.html + 307 + + block.header + + + Audit + Obračun + + src/app/components/block/block.component.html + 325 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 + + Toggle Audit + block.toggle-audit + + + Details + Detalj + + src/app/components/block/block.component.html + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 + + + src/app/components/transaction/transaction.component.html + 79 + + + src/app/components/transaction/transaction.component.html + 168 + + + src/app/components/transaction/transaction.component.html + 176 + + + src/app/components/transaction/transaction.component.html + 301 + + + src/app/lightning/channel/channel.component.html + 93 + + + src/app/lightning/channel/channel.component.html + 103 + + + src/app/lightning/justice-list/justice-list.component.html + 42 + + + src/app/lightning/node/node.component.html + 123 + + + src/app/lightning/node/node.component.html + 264 + + Transaction Details + transaction.details + + + Error loading block data. + + src/app/components/block/block.component.html + 374 + + block.error.loading-block-data + + + Why is this block empty? + + src/app/components/block/block.component.html + 388 + + block.empty-block-explanation + + + Acceleration fees paid out-of-band + + src/app/components/block/block.component.html + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + Acceleration Fees + + + Blocks + Blokovi + + src/app/components/blocks-list/blocks-list.component.html + 5 + + + src/app/components/blocks-list/blocks-list.component.ts + 70 + + + src/app/components/pool-ranking/pool-ranking.component.html + 94 + + + src/app/components/pool/pool.component.html + 298 + + master-page.blocks + + + Height + Visina + + src/app/components/blocks-list/blocks-list.component.html + 15 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 153 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 5 + + + src/app/components/pool/pool.component.html + 189 + + + src/app/components/pool/pool.component.html + 303 + + + src/app/components/pool/pool.component.html + 365 + + + src/app/dashboard/dashboard.component.html + 105 + + latest-blocks.height + + + Reward + Nagrada + + src/app/components/blocks-list/blocks-list.component.html + 22 + + + src/app/components/blocks-list/blocks-list.component.html + 22 + + + src/app/components/pool/pool.component.html + 94 + + + src/app/components/pool/pool.component.html + 191 + + + src/app/components/pool/pool.component.html + 308 + + + src/app/components/pool/pool.component.html + 369 + + + src/app/components/pool/pool.component.html + 477 + + + src/app/components/pool/pool.component.html + 502 + + latest-blocks.reward + + + Fees + Naknade + + src/app/components/blocks-list/blocks-list.component.html + 23 + + + src/app/components/pool/pool.component.html + 309 + + + src/app/components/pool/pool.component.html + 370 + + latest-blocks.fees + + + TXs + TXs + + src/app/components/blocks-list/blocks-list.component.html + 26 + + + src/app/components/blocks-list/blocks-list.component.html + 26 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 80 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 155 + + + src/app/components/pool/pool.component.html + 310 + + + src/app/components/pool/pool.component.html + 371 + + + src/app/dashboard/dashboard.component.html + 107 + + + src/app/dashboard/dashboard.component.html + 284 + + dashboard.txs + + + See the most recent Liquid blocks along with basic stats such as block height, block size, and more. + + src/app/components/blocks-list/blocks-list.component.ts + 73 + + + + See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. + + src/app/components/blocks-list/blocks-list.component.ts + 75 + + + + Calculator + + src/app/components/calculator/calculator.component.html + 3 + + + src/app/shared/components/global-footer/global-footer.component.html + 108 + + shared.calculator + + + Copied! + Kopirano + + src/app/components/clipboard/clipboard.component.ts + 15 + + + + Price + Cena + + src/app/components/clock/clock.component.html + 41 + + + + High Priority + Visok prioritet + + src/app/components/clock/clock.component.html + 47 + + + src/app/components/fees-box/fees-box.component.html + 10 + + + src/app/components/fees-box/fees-box.component.html + 47 + + fees-box.high-priority + + + Memory Usage + + src/app/components/clock/clock.component.html + 65 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 84 + + + src/app/dashboard/dashboard.component.html + 288 + + Memory usage + dashboard.memory-usage + + + Unconfirmed + Nepotvrđeno + + src/app/components/clock/clock.component.html + 69 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 78 + + + src/app/components/footer/footer.component.html + 20 + + + src/app/dashboard/dashboard.component.html + 282 + + Unconfirmed count + dashboard.unconfirmed + + + Transaction Fees + + src/app/components/custom-dashboard/custom-dashboard.component.html + 8 + + + src/app/dashboard/dashboard.component.html + 6 + + fees-box.transaction-fees + + + Incoming Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 55 + + + src/app/components/footer/footer.component.html + 5 + + + src/app/dashboard/dashboard.component.html + 48 + + dashboard.incoming-transactions + + + Minimum fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 71 + + + src/app/dashboard/dashboard.component.html + 275 + + Minimum mempool fee + dashboard.minimum-fee + + + Purging + + src/app/components/custom-dashboard/custom-dashboard.component.html + 72 + + + src/app/dashboard/dashboard.component.html + 276 + + Purgin below fee + dashboard.purging + + + Recent Replacements + + src/app/components/custom-dashboard/custom-dashboard.component.html + 100 + + + src/app/dashboard/dashboard.component.html + 65 + + dashboard.recent-rbf-replacements + + + Previous fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 107 + + + src/app/dashboard/dashboard.component.html + 72 + + dashboard.previous-transaction-fee + + + New fee + + src/app/components/custom-dashboard/custom-dashboard.component.html + 108 + + + src/app/dashboard/dashboard.component.html + 73 + + dashboard.new-transaction-fee + + + Full RBF + + src/app/components/custom-dashboard/custom-dashboard.component.html + 122 + + + src/app/components/rbf-list/rbf-list.component.html + 24 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 35 + + + src/app/dashboard/dashboard.component.html + 87 + + transaction.full-rbf + + + RBF + + src/app/components/custom-dashboard/custom-dashboard.component.html + 123 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 36 + + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 37 + + + src/app/components/tx-features/tx-features.component.html + 28 + + + src/app/components/tx-features/tx-features.component.html + 29 + + + src/app/dashboard/dashboard.component.html + 88 + + RBF + tx-features.tag.rbf + + + Recent Blocks + + src/app/components/custom-dashboard/custom-dashboard.component.html + 147 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 56 + + + src/app/dashboard/dashboard.component.html + 99 + + + src/app/shared/components/global-footer/global-footer.component.html + 76 + + dashboard.recent-blocks + + + Recent Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 190 + + + src/app/dashboard/dashboard.component.html + 131 + + dashboard.recent-transactions + + + Treasury + + src/app/components/custom-dashboard/custom-dashboard.component.html + 228 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + + dashboard.treasury + + + Treasury Transactions + + src/app/components/custom-dashboard/custom-dashboard.component.html + 251 + + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + + dashboard.treasury-transactions + + + X Timeline + + src/app/components/custom-dashboard/custom-dashboard.component.html + 299 + + dashboard.x-timeline + + + Consolidation + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 74 + + + src/app/dashboard/dashboard.component.ts + 79 + + + src/app/shared/filters.utils.ts + 109 + + + + Coinjoin + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 75 + + + src/app/dashboard/dashboard.component.ts + 80 + + + src/app/shared/filters.utils.ts + 108 + + + + Data + + src/app/components/custom-dashboard/custom-dashboard.component.ts + 76 + + + src/app/dashboard/dashboard.component.ts + 81 + + + src/app/shared/filters.utils.ts + 123 + + + + Adjusted + Prilagođeno + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 6 + + mining.adjusted + + + Change + Promena + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 8 + + mining.change + + + Difficulty Adjustment + Prilagođavanje Poteškoća + + src/app/components/difficulty-mining/difficulty-mining.component.html + 1 + + + src/app/components/difficulty/difficulty.component.html + 1 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 23 + + dashboard.difficulty-adjustment + + + Remaining + Preostalih + + src/app/components/difficulty-mining/difficulty-mining.component.html + 7 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 74 + + difficulty-box.remaining + + + blocks + + src/app/components/difficulty-mining/difficulty-mining.component.html + 10,11 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 67,68 + + + src/app/components/footer/footer.component.html + 26,27 + + + src/app/components/mempool-blocks/mempool-blocks.component.html + 45,46 + + + src/app/lightning/channel/channel-box/channel-box.component.html + 78 + + shared.blocks + + + block + blok + + src/app/components/difficulty-mining/difficulty-mining.component.html + 11,12 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 68,69 + + + src/app/components/footer/footer.component.html + 27,28 + + shared.block + + + Estimate + Proračun + + src/app/components/difficulty-mining/difficulty-mining.component.html + 16 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 81 + + difficulty-box.estimate + + + Previous + Prethodni + + src/app/components/difficulty-mining/difficulty-mining.component.html + 28 + + + src/app/components/difficulty/difficulty.component.html + 64 + + difficulty-box.previous + + + Current Period + + src/app/components/difficulty-mining/difficulty-mining.component.html + 40 + + difficulty-box.current-period + + + Next Halving + + src/app/components/difficulty-mining/difficulty-mining.component.html + 47 + + + src/app/components/difficulty-mining/difficulty-mining.component.html + 88 + + difficulty-box.next-halving + + + blocks expected + Očekivani blokovi + + src/app/components/difficulty/difficulty-tooltip.component.html + 50 + + difficulty-box.expected-blocks + + + block expected + Očekivani blok + + src/app/components/difficulty/difficulty-tooltip.component.html + 51 + + difficulty-box.expected-block + + + blocks mined + Rudareni blokovi + + src/app/components/difficulty/difficulty-tooltip.component.html + 52 + + difficulty-box.mined-blocks + + + block mined + Rudareni blok + + src/app/components/difficulty/difficulty-tooltip.component.html + 53 + + difficulty-box.mined-block + + + blocks remaining + Preostali blokovi + + src/app/components/difficulty/difficulty-tooltip.component.html + 54 + + difficulty-box.remaining-blocks + + + block remaining + Preostali blok + + src/app/components/difficulty/difficulty-tooltip.component.html + 55 + + difficulty-box.remaining-block + + + blocks ahead + Blokova unapred + + src/app/components/difficulty/difficulty-tooltip.component.html + 56 + + difficulty-box.blocks-ahead + + + block ahead + Blok ispred + + src/app/components/difficulty/difficulty-tooltip.component.html + 57 + + difficulty-box.block-ahead + + + blocks behind + Blokovi iza + + src/app/components/difficulty/difficulty-tooltip.component.html + 58 + + difficulty-box.blocks-behind + + + block behind + Blok iza + + src/app/components/difficulty/difficulty-tooltip.component.html + 59 + + difficulty-box.block-behind + + + Halving Countdown + + src/app/components/difficulty/difficulty.component.html + 2 + + dashboard.halving-countdown + + + difficulty + + src/app/components/difficulty/difficulty.component.html + 7 + + statistics.average-small + + + halving + + src/app/components/difficulty/difficulty.component.html + 10 + + statistics.median-small + + + Average block time + Prosečno vreme bloka + + src/app/components/difficulty/difficulty.component.html + 50 + + difficulty-box.average-block-time + + + New subsidy + + src/app/components/difficulty/difficulty.component.html + 103 + + difficulty-box.new-subsidy + + + Blocks remaining + + src/app/components/difficulty/difficulty.component.html + 111 + + shared.blocks-remaining + + + Block remaining + + src/app/components/difficulty/difficulty.component.html + 112 + + shared.block-remaining + + + Testnet4 Faucet + + src/app/components/faucet/faucet.component.html + 4 + + testnet4.faucet + + + Amount (sats) + + src/app/components/faucet/faucet.component.html + 64 + + amount-sats + + + Request Testnet4 Coins + + src/app/components/faucet/faucet.component.html + 83 + + testnet4.request-coins + + + Either 2x the minimum, or the Low Priority rate (whichever is lower) + + src/app/components/fees-box/fees-box.component.html + 4 + + Transaction feerate tooltip (economy) + + + No Priority + Nema prioriteta + + src/app/components/fees-box/fees-box.component.html + 4 + + + src/app/components/fees-box/fees-box.component.html + 41 + + fees-box.no-priority + + + Usually places your transaction in between the second and third mempool blocks + + src/app/components/fees-box/fees-box.component.html + 8 + + Transaction feerate tooltip (low priority) + + + Low Priority + Nizak prioritet + + src/app/components/fees-box/fees-box.component.html + 8 + + + src/app/components/fees-box/fees-box.component.html + 45 + + fees-box.low-priority + + + Usually places your transaction in between the first and second mempool blocks + + src/app/components/fees-box/fees-box.component.html + 9 + + Transaction feerate tooltip (medium priority) + + + Medium Priority + Srednji prioritet + + src/app/components/fees-box/fees-box.component.html + 9 + + + src/app/components/fees-box/fees-box.component.html + 46 + + fees-box.medium-priority + + + Places your transaction in the first mempool block + + src/app/components/fees-box/fees-box.component.html + 10 + + Transaction feerate tooltip (high priority) + + + Backend is synchronizing + Pozadina se sinhronizuje + + src/app/components/footer/footer.component.html + 8 + + dashboard.backend-is-synchronizing + + + vB/s + vB/s + + src/app/components/footer/footer.component.html + 13 + + vB/s + shared.vbytes-per-second + + + WU/s + + src/app/components/footer/footer.component.html + 14 + + WU/s + shared.weight-per-second + + + Mempool size + Veličina mempula + + src/app/components/footer/footer.component.html + 24 + + Mempool size + dashboard.mempool-size + + + Mining + Rudarstvo + + src/app/components/graphs/graphs.component.html + 7 + + mining + + + Pools Ranking + Poredak pool-ova + + src/app/components/graphs/graphs.component.html + 10 + + + src/app/components/pool-ranking/pool-ranking.component.html + 36 + + mining.pools + + + Pools Dominance + Premoć bazena + + src/app/components/graphs/graphs.component.html + 12 + + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html + 7 + + mining.pools-dominance + + + Hashrate & Difficulty + Hashrate i težina + + src/app/components/graphs/graphs.component.html + 14 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 27 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 77 + + mining.hashrate-difficulty + + + Lightning + Lightning + + src/app/components/graphs/graphs.component.html + 31 + + lightning + + + Lightning Nodes Per Network + + src/app/components/graphs/graphs.component.html + 34 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.html + 5 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 73 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 143 + + lightning.nodes-networks + + + Lightning Network Capacity + + src/app/components/graphs/graphs.component.html + 36 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.html + 5 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 70 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 133 + + lightning.network-capacity + + + Lightning Nodes Per ISP + + src/app/components/graphs/graphs.component.html + 38 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 53 + + lightning.nodes-per-isp + + + Lightning Nodes Per Country + + src/app/components/graphs/graphs.component.html + 40 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 5 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 46 + + lightning.nodes-per-country + + + Lightning Nodes World Map + + src/app/components/graphs/graphs.component.html + 42 + + + src/app/lightning/nodes-map/nodes-map.component.html + 5 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 51 + + lightning.lightning.nodes-heatmap + + + Lightning Nodes Channels World Map + + src/app/components/graphs/graphs.component.html + 44 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.html + 20 + + lightning.nodes-channels-world-map + + + Hashrate (1w) + + src/app/components/hashrate-chart/hashrate-chart.component.html + 8 + + mining.hashrate + + + Hashrate + Hashrate + + src/app/components/hashrate-chart/hashrate-chart.component.html + 69 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 291 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 391 + + + src/app/components/pool-ranking/pool-ranking.component.html + 93 + + + src/app/components/pool/pool-preview.component.html + 22 + + + src/app/components/pool/pool.component.ts + 244 + + + src/app/components/pool/pool.component.ts + 296 + + mining.hashrate + + + See hashrate and difficulty for the Bitcoin network visualized over time. + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 78 + + + + Hashrate (MA) + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 310 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 414 + + + + Pools Historical Dominance + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 74 + + + + See Bitcoin mining pool dominance visualized over time: see how top mining pools' share of total hashrate has fluctuated over time. + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 75 + + + + Indexing network hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 2 + + + + Indexing pools hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 3 + + + + Offline + + src/app/components/liquid-master-page/liquid-master-page.component.html + 41 + + + src/app/components/master-page/master-page.component.html + 33 + + + src/app/components/master-page/master-page.component.html + 57 + + master-page.offline + + + Reconnecting... + + src/app/components/liquid-master-page/liquid-master-page.component.html + 42 + + + src/app/components/master-page/master-page.component.html + 34 + + + src/app/components/master-page/master-page.component.html + 58 + + master-page.reconnecting + + + Layer 2 Networks + + src/app/components/liquid-master-page/liquid-master-page.component.html + 56 + + master-page.layer2-networks-header + + + Non-Dust Expired + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 3 + + liquid.non-dust-expired + + + Total amount of BTC held in non-dust Federation UTXOs that have expired timelocks + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 5 + + liquid.expired-utxos-non-dust + + + UTXOs + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 6 + + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 16 + + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 9 + + + src/app/components/wallet/wallet-preview.component.html + 13 + + shared.utxos + + + Total Expired + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 12 + + liquid.total-expired + + + Total amount of BTC held in Federation UTXOs that have expired timelocks + + src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html + 15 + + liquid.expired-utxos + + + Liquid Federation Wallet + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 5 + + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 19 + + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 3 + + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts + 14 + + liquid.federation-wallet + + + addresses + + src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html + 8 + + shared.addresses + + + Output + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 8 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 43 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 76 + + transaction.output + + + Related Peg-In + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 11 + + liquid.related-peg-in + + + Expires in + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 13 + + liquid.expires-in + + + Expired since + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 14 + + liquid.expired-since + + + Dust + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 15 + + liquid.dust + + + Change output + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 55 + + liquid.change-output + + + blocks + + src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html + 62 + + shared.blocks + + + Timelock-Expired UTXOs + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 12 + + liquid.timelock-expired-utxos + + + Addresses + Adrese + + src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html + 15 + + + src/app/components/pool/pool.component.html + 39 + + + src/app/components/pool/pool.component.html + 63 + + + src/app/components/pool/pool.component.html + 443 + + + src/app/components/pool/pool.component.html + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 + + mining.addresses + + + Recent Peg-In / Out's + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 4 + + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts + 66 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 5 + + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 29 + + liquid.recent-pegs + + + Fund / Redemption Tx + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 15 + + liquid.fund-redemption-tx + + + BTC Address + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 16 + + liquid.bitcoin-address + + + Peg out in progress... + + src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html + 69 + + liquid.redemption-in-progress + + + 24h Peg-In Volume + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 12 + + liquid.peg-ins-volume-day + + + Peg-Ins + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 13 + + liquid.peg-ins + + + 24h Peg-Out Volume + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 18 + + liquid.peg-out-volume-day + + + Peg-Outs + + src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html + 19 + + liquid.peg-outs + + + Unpeg + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 3 + + liquid.unpeg + + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 6 + + liquid.unpeg-info + + + Unpeg Event + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 7 + + liquid.unpeg-event + + + Avg Peg Ratio + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 14 + + liquid.avg-peg-ratio + + + Emergency Keys + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 28 + + liquid.emergency-keys + + + usage + + src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html + 31 + + shared.usage + + + Assets vs Liabilities + + src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts + 163 + + + + LBTC in circulation + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 3 + + dashboard.lbtc-pegs-in-circulation + + + As of block + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 7 + + + src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html + 16 + + shared.as-of-block + + + See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. + + src/app/components/mempool-block/mempool-block.component.ts + 62 + + + + Stack of mempool blocks + + src/app/components/mempool-block/mempool-block.component.ts + 89 + + + + Mempool block + + src/app/components/mempool-block/mempool-block.component.ts + 91 + + + + Count + + src/app/components/mempool-graph/mempool-graph.component.ts + 329 + + + src/app/components/statistics/statistics.component.ts + 49 + + + + Range + + src/app/components/mempool-graph/mempool-graph.component.ts + 330 + + + + Sum + Iznos + + src/app/components/mempool-graph/mempool-graph.component.ts + 332 + + + + Sign In + + src/app/components/menu/menu.component.html + 27 + + + src/app/shared/components/global-footer/global-footer.component.html + 45 + + + src/app/shared/components/global-footer/global-footer.component.html + 57 + + shared.sign-in + + + Reward stats + Nagrada Sats + + src/app/components/mining-dashboard/mining-dashboard.component.html + 9 + + mining.reward-stats + + + (144 blocks) + (144 blokovi) + + src/app/components/mining-dashboard/mining-dashboard.component.html + 10 + + mining.144-blocks + + + Adjustments + Podesavanje + + src/app/components/mining-dashboard/mining-dashboard.component.html + 70 + + dashboard.adjustments + + + Mining Dashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 30 + + + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + + + Pools luck (1 week) + + src/app/components/pool-ranking/pool-ranking.component.html + 9 + + mining.miners-luck-1w + + + Pools Luck + + src/app/components/pool-ranking/pool-ranking.component.html + 9 + + + src/app/components/pool-ranking/pool-ranking.component.html + 158 + + mining.miners-luck + + + The overall luck of all mining pools over the past week. A luck bigger than 100% means the average block time for the current epoch is less than 10 minutes. + + src/app/components/pool-ranking/pool-ranking.component.html + 11 + + mining.pools-luck-desc + + + Pools count (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 17 + + mining.miners-count-1w + + + Pools Count + + src/app/components/pool-ranking/pool-ranking.component.html + 17 + + + src/app/components/pool-ranking/pool-ranking.component.html + 164 + + mining.miners-count + + + How many unique pools found at least one block over the past week. + + src/app/components/pool-ranking/pool-ranking.component.html + 19 + + mining.pools-count-desc + + + Blocks (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 25 + + + src/app/components/pool-ranking/pool-ranking.component.html + 25 + + + src/app/components/pool-ranking/pool-ranking.component.html + 170 + + master-page.blocks + + + The number of blocks found over the past week. + + src/app/components/pool-ranking/pool-ranking.component.html + 27 + + mining.blocks-count-desc + + + Rank + + src/app/components/pool-ranking/pool-ranking.component.html + 90 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 27 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 53 + + mining.rank + + + Avg Health + + src/app/components/pool-ranking/pool-ranking.component.html + 96 + + + src/app/components/pool-ranking/pool-ranking.component.html + 96 + + + src/app/components/pool/pool.component.html + 96 + + + src/app/components/pool/pool.component.html + 479 + + + src/app/components/pool/pool.component.html + 504 + + latest-blocks.avg_health + + + Avg Block Fees + + src/app/components/pool-ranking/pool-ranking.component.html + 97 + + + src/app/components/reward-stats/reward-stats.component.html + 17 + + + src/app/components/reward-stats/reward-stats.component.html + 17 + + + src/app/components/reward-stats/reward-stats.component.html + 53 + + mining.fees-per-block + + + Empty Blocks + + src/app/components/pool-ranking/pool-ranking.component.html + 98 + + mining.empty-blocks + + + All miners + + src/app/components/pool-ranking/pool-ranking.component.html + 139 + + mining.all-miners + + + Mining Pools + + src/app/components/pool-ranking/pool-ranking.component.ts + 59 + + + + See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe. + + src/app/components/pool-ranking/pool-ranking.component.ts + 60 + + + + blocks + + src/app/components/pool-ranking/pool-ranking.component.ts + 170 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 209 + + + + Other () + + src/app/components/pool-ranking/pool-ranking.component.ts + 189 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 119 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 136 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 178 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 195 + + + + mining pool + + src/app/components/pool/pool-preview.component.html + 3 + + mining.pools + + + Tags + + src/app/components/pool/pool-preview.component.html + 18 + + + src/app/components/pool/pool.component.html + 22 + + + src/app/components/pool/pool.component.html + 30 + + + src/app/components/pool/pool.component.html + 426 + + + src/app/components/pool/pool.component.html + 434 + + mining.tags + + + See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. + + src/app/components/pool/pool-preview.component.ts + 88 + + + src/app/components/pool/pool.component.ts + 93 + + + + Show all + + src/app/components/pool/pool.component.html + 53 + + + src/app/components/pool/pool.component.html + 68 + + + src/app/components/rbf-timeline/rbf-timeline.component.html + 57 + + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 + + + src/app/components/transactions-list/transactions-list.component.html + 221 + + + src/app/components/transactions-list/transactions-list.component.html + 243 + + + src/app/components/transactions-list/transactions-list.component.html + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 + + show-all + + + Hide + + src/app/components/pool/pool.component.html + 55 + + + src/app/components/wallet/wallet.component.html + 33 + + hide + + + Hashrate (24h) + + src/app/components/pool/pool.component.html + 95 + + + src/app/components/pool/pool.component.html + 478 + + + src/app/components/pool/pool.component.html + 503 + + mining.hashrate + + + Blocks (24h) + + src/app/components/pool/pool.component.html + 120 + + + src/app/components/pool/pool.component.html + 528 + + + src/app/components/pool/pool.component.html + 553 + + 24h + + + 1w + + src/app/components/pool/pool.component.html + 121 + + + src/app/components/pool/pool.component.html + 529 + + + src/app/components/pool/pool.component.html + 554 + + 1w + + + Out-of-band Fees (1w) + + src/app/components/pool/pool.component.html + 143 + + 1w + + + 1m + + src/app/components/pool/pool.component.html + 144 + + 1m + + + Coinbase tag + + src/app/components/pool/pool.component.html + 223 + + + src/app/components/pool/pool.component.html + 306 + + + src/app/components/pool/pool.component.html + 368 + + latest-blocks.coinbasetag + + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + + + Error loading pool data. + + src/app/components/pool/pool.component.html + 589 + + pool.error.loading-pool-data + + + Not enough data yet + + src/app/components/pool/pool.component.ts + 177 + + + + Pool Dominance + + src/app/components/pool/pool.component.ts + 255 + + + src/app/components/pool/pool.component.ts + 307 + + mining.pool-dominance + + + Broadcast Transaction + Emitovanje Transakcije + + src/app/components/push-transaction/push-transaction.component.html + 2 + + + src/app/components/push-transaction/push-transaction.component.html + 8 + + + src/app/shared/components/global-footer/global-footer.component.html + 77 + + Broadcast Transaction + shared.broadcast-transaction + + + Transaction hex + + src/app/components/push-transaction/push-transaction.component.html + 6 + + + src/app/components/transaction/transaction-raw.component.html + 215 + + + src/app/components/transaction/transaction.component.html + 226 + + transaction.hex + + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + + + Broadcast Transaction + + src/app/components/push-transaction/push-transaction.component.ts + 57 + + + + Broadcast a transaction to the network using the transaction's hash. + + src/app/components/push-transaction/push-transaction.component.ts + 58 + + + + RBF Replacements + + src/app/components/rbf-list/rbf-list.component.html + 2 + + + src/app/components/rbf-list/rbf-list.component.ts + 61 + + page.rbf-replacements + + + There are no replacements in the mempool yet! + + src/app/components/rbf-list/rbf-list.component.html + 34 + + rbf.no-replacements-yet + + + See the most recent RBF replacements on the Bitcoin network, updated in real-time. + + src/app/components/rbf-list/rbf-list.component.ts + 62 + + + + Show less + Prikaži manje + + src/app/components/rbf-timeline/rbf-timeline.component.html + 61 + + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + + + src/app/components/transaction/transaction.component.html + 147 + + + src/app/components/transactions-list/transactions-list.component.html + 223 + + + src/app/components/transactions-list/transactions-list.component.html + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 + + show-less + + + remaining + + src/app/components/rbf-timeline/rbf-timeline.component.html + 86 + + + src/app/components/transactions-list/transactions-list.component.html + 514 + + x-remaining + + + Miners Reward + + src/app/components/reward-stats/reward-stats.component.html + 5 + + + src/app/components/reward-stats/reward-stats.component.html + 5 + + + src/app/components/reward-stats/reward-stats.component.html + 46 + + mining.rewards + + + Amount being paid to miners in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 6 + + mining.rewards-desc + + + Average fees per block in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 18 + + mining.fees-per-block-desc + + + BTC/block + + src/app/components/reward-stats/reward-stats.component.html + 21 + + BTC/block + shared.btc-block + + + Avg Tx Fee + + src/app/components/reward-stats/reward-stats.component.html + 30 + + + src/app/components/reward-stats/reward-stats.component.html + 30 + + + src/app/components/reward-stats/reward-stats.component.html + 60 + + mining.average-fee + + + Fee paid on average for each transaction in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 31 + + mining.average-fee + + + sats/tx + + src/app/components/reward-stats/reward-stats.component.html + 33 + + sat/vB + shared.sat-vbyte + + + Explore the full Bitcoin ecosystem + + src/app/components/search-form/search-form.component.html + 4 + + + src/app/shared/components/global-footer/global-footer.component.html + 17 + + + src/app/shared/components/global-footer/global-footer.component.html + 61 + + search-form.searchbar-placeholder + + + Search + + src/app/components/search-form/search-form.component.html + 9 + + search-form.search-title + + + Block Height + + src/app/components/search-form/search-results/search-results.component.html + 3 + + search.bitcoin-block-height + + + Transaction + + src/app/components/search-form/search-results/search-results.component.html + 21 + + search.bitcoin-transaction + + + Address + + src/app/components/search-form/search-results/search-results.component.html + 27 + + + src/app/components/search-form/search-results/search-results.component.html + 80 + + search.bitcoin-address + + + Block + + src/app/components/search-form/search-results/search-results.component.html + 33 + + search.bitcoin-block + + + Addresses + + src/app/components/search-form/search-results/search-results.component.html + 39 + + search.bitcoin-addresses + + + Mining Pools + + src/app/components/search-form/search-results/search-results.component.html + 47 + + search.mining-pools + + + Lightning Nodes + + src/app/components/search-form/search-results/search-results.component.html + 56 + + search.lightning-nodes + + + Lightning Channels + + src/app/components/search-form/search-results/search-results.component.html + 64 + + search.lightning-channels + + + Other Network Address + + src/app/components/search-form/search-results/search-results.component.html + 72 + + search.other-networks + + + Liquid Asset + + src/app/components/search-form/search-results/search-results.component.html + 86 + + search.liquid-asset + + + Go to "" + + src/app/components/search-form/search-results/search-results.component.html + 93 + + search.go-to + + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + + + Mempool by vBytes (sat/vByte) + + src/app/components/statistics/statistics.component.html + 7 + + statistics.memory-by-vBytes + + + Clock (Mempool) + + src/app/components/statistics/statistics.component.html + 17 + + + src/app/shared/components/global-footer/global-footer.component.html + 106 + + footer.clock-mempool + + + Filter + + src/app/components/statistics/statistics.component.html + 65 + + statistics.component-filter.title + + + Invert + inverzija + + src/app/components/statistics/statistics.component.html + 90 + + statistics.component-invert.title + + + Transaction vBytes per second (vB/s) + + src/app/components/statistics/statistics.component.html + 110 + + statistics.transaction-vbytes-per-second + + + Cap outliers + + src/app/components/statistics/statistics.component.html + 118 + + statistics.cap-outliers + + + Graphs + + src/app/components/statistics/statistics.component.ts + 65 + + + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. + + src/app/components/statistics/statistics.component.ts + 66 + + + + Stratum Jobs + + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining + + + Test Transactions + + src/app/components/test-transactions/test-transactions.component.html + 3 + + + src/app/components/test-transactions/test-transactions.component.html + 16 + + + src/app/components/test-transactions/test-transactions.component.ts + 35 + + Test Transactions + shared.test-transactions + + + Raw hex + + src/app/components/test-transactions/test-transactions.component.html + 8 + + test.tx.raw-hex + + + Sent + + src/app/components/tracker/tracker-bar.component.html + 2 + + accelerator.sent-state + + + Soon + + src/app/components/tracker/tracker-bar.component.html + 6 + + accelerator.soon + + + This transaction has been replaced by: + Ova transakcija je zamenjena sa: + + src/app/components/tracker/tracker.component.html + 48 + + + src/app/components/transaction/transaction.component.html + 5 + + RBF replacement + transaction.rbf.replacement + + + ETA + Procenjeno vreme dolaska + + src/app/components/tracker/tracker.component.html + 70 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 + + Transaction ETA + transaction.eta + + + Not any time soon + + src/app/components/tracker/tracker.component.html + 75 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 + + Transaction ETA mot any time soon + transaction.eta.not-any-time-soon + + + Confirmed at + + src/app/components/tracker/tracker.component.html + 89 + + transaction.confirmed-at + + + Block height + + src/app/components/tracker/tracker.component.html + 98 + + transaction.block-height + + + Your transaction has been accelerated + + src/app/components/tracker/tracker.component.html + 144 + + tracker.explain.accelerated + + + Waiting for your transaction to appear in the mempool + + src/app/components/tracker/tracker.component.html + 154 + + tracker.explain.waiting + + + Your transaction is in the mempool, but it will not be confirmed for some time. + + src/app/components/tracker/tracker.component.html + 160 + + tracker.explain.pending + + + Your transaction is near the top of the mempool, and is expected to confirm soon. + + src/app/components/tracker/tracker.component.html + 166 + + tracker.explain.soon + + + Your transaction is expected to confirm in the next block + + src/app/components/tracker/tracker.component.html + 172 + + tracker.explain.next-block + + + Your transaction is confirmed! + + src/app/components/tracker/tracker.component.html + 178 + + tracker.explain.confirmed + + + Your transaction has been replaced by a newer version! + + src/app/components/tracker/tracker.component.html + 187 + + tracker.explain.replaced + + + Error loading transaction data. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + + + See more details + + src/app/components/tracker/tracker.component.html + 206 + + accelerator.show-more-details + + + Transaction: + Transakcija: + + src/app/components/tracker/tracker.component.ts + 409 + + + src/app/components/transaction/transaction-preview.component.ts + 91 + + + src/app/components/transaction/transaction.component.ts + 580 + + + + Get real-time status, addresses, fees, script info, and more for transaction with txid . + + src/app/components/tracker/tracker.component.ts + 413 + + + src/app/components/transaction/transaction-preview.component.ts + 95 + + + src/app/components/transaction/transaction.component.ts + 584 + + + + Related Transactions + + src/app/components/transaction/cpfp-info.component.html + 3 + + CPFP List + transaction.related-transactions + + + Descendant + Nastavljač + + src/app/components/transaction/cpfp-info.component.html + 20 + + + src/app/components/transaction/cpfp-info.component.html + 32 + + Descendant + transaction.descendant + + + Ancestor + Preci + + src/app/components/transaction/cpfp-info.component.html + 44 + + Transaction Ancestor + transaction.ancestor + + + Features + Karakteristike + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Protok + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Sakrij dijagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Prikaži više + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Uloga & Proizvodnja + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Prikaži dijagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Vreme zaklučavanja + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + + + Transaction not found. + Transakcija nije pronoađena + + src/app/components/transaction/transaction.component.html + 350 + + transaction.error.transaction-not-found + + + Waiting for it to appear in the mempool... + + src/app/components/transaction/transaction.component.html + 351 + + transaction.error.waiting-for-it-to-appear + + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. + + src/app/components/transactions-list/transactions-list.component.html + 21 + + transaction.poison.warning + + + (Newly Generated Coins) + + src/app/components/transactions-list/transactions-list.component.html + 90 + + transactions-list.newly-generated-coins + + + Peg-in + + src/app/components/transactions-list/transactions-list.component.html + 92 + + transactions-list.peg-in + + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + + + ScriptSig (ASM) + + src/app/components/transactions-list/transactions-list.component.html + 157 + + ScriptSig (ASM) + transactions-list.scriptsig.asm + + + ScriptSig (HEX) + + src/app/components/transactions-list/transactions-list.component.html + 168 + + ScriptSig (HEX) + transactions-list.scriptsig.hex + + + Witness + + src/app/components/transactions-list/transactions-list.component.html + 173 + + transactions-list.witness + + + P2SH redeem script + + src/app/components/transactions-list/transactions-list.component.html + 232 + + transactions-list.p2sh-redeem-script + + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + + + P2TR tapscript + + src/app/components/transactions-list/transactions-list.component.html + 249 + + transactions-list.p2tr-tapscript + + + P2WSH witness script + + src/app/components/transactions-list/transactions-list.component.html + 251 + + transactions-list.p2wsh-witness-script + + + nSequence + + src/app/components/transactions-list/transactions-list.component.html + 266 + + transactions-list.nsequence + + + Previous output script + + src/app/components/transactions-list/transactions-list.component.html + 271 + + transactions-list.previous-output-script + + + Previous output type + + src/app/components/transactions-list/transactions-list.component.html + 275 + + transactions-list.previous-output-type + + + Peg-out to + + src/app/components/transactions-list/transactions-list.component.html + 326,327 + + transactions-list.peg-out-to + + + ScriptPubKey (ASM) + + src/app/components/transactions-list/transactions-list.component.html + 400 + + ScriptPubKey (ASM) + transactions-list.scriptpubkey.asm + + + ScriptPubKey (HEX) + + src/app/components/transactions-list/transactions-list.component.html + 413 + + ScriptPubKey (HEX) + transactions-list.scriptpubkey.hex + + + Show more inputs to reveal fee data + + src/app/components/transactions-list/transactions-list.component.html + 477 + + transactions-list.load-to-reveal-fee-info + + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + + + other inputs + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 12 + + transaction.other-inputs + + + other outputs + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 13 + + transaction.other-outputs + + + Input + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 42 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 86 + + transaction.input + + + 1 block earlier + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 123 + + shared.one-block-earlier + + + 1 block later + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 127 + + shared.one-block-later + + + in the same block + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 131 + + shared.in-the-same-block + + + blocks earlier + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 137 + + shared.n-blocks-earlier + + + spent + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 148 + + shared.spent + + + blocks later + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 150 + + shared.n-blocks-later + + + This transaction saved % on fees by using native SegWit + + src/app/components/tx-features/tx-features.component.html + 2 + + ngbTooltip about segwit gains + + + SegWit + + src/app/components/tx-features/tx-features.component.html + 2 + + + src/app/components/tx-features/tx-features.component.html + 4 + + + src/app/components/tx-features/tx-features.component.html + 6 + + SegWit + tx-features.tag.segwit + + + This transaction saved % on fees by using SegWit and could save % more by fully upgrading to native SegWit + + src/app/components/tx-features/tx-features.component.html + 4 + + ngbTooltip about double segwit gains + + + This transaction could save % on fees by upgrading to native SegWit or % by upgrading to SegWit-P2SH + + src/app/components/tx-features/tx-features.component.html + 6 + + ngbTooltip about missed out gains + + + This transaction uses Taproot and thereby saved at least % on fees + + src/app/components/tx-features/tx-features.component.html + 12 + + Tooltip about fees saved with taproot + + + This transaction uses Taproot and already saved at least % on fees, but could save an additional % by fully using Taproot + + src/app/components/tx-features/tx-features.component.html + 14 + + Tooltip about fees that saved and could be saved with taproot + + + This transaction could save % on fees by using Taproot + + src/app/components/tx-features/tx-features.component.html + 16 + + Tooltip about fees that could be saved with taproot + + + This transaction does not use Taproot + + src/app/components/tx-features/tx-features.component.html + 18 + + Tooltip about using taproot + + + This transaction uses Taproot + + src/app/components/tx-features/tx-features.component.html + 21 + + Tooltip about taproot + + + This transaction supports Replace-By-Fee (RBF) allowing fee bumping + + src/app/components/tx-features/tx-features.component.html + 28 + + RBF tooltip + + + This transaction does NOT support Replace-By-Fee (RBF) and cannot be fee bumped using this method + + src/app/components/tx-features/tx-features.component.html + 29 + + RBF disabled tooltip + + + Optimal + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 1 + + TX Fee Rating is Optimal + tx-fee-rating.optimal + + + Only ~ sat/vB was needed to get into this block + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 2 + + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 3 + + tx-fee-rating.warning-tooltip + + + Overpaid x + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 2 + + + src/app/components/tx-fee-rating/tx-fee-rating.component.html + 3 + + TX Fee Rating is Warning + tx-fee-rating.overpaid.warning + + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + + + Liquid Federation Holdings + + src/app/dashboard/dashboard.component.html + 165 + + + src/app/dashboard/dashboard.component.html + 305 + + liquid.federation-holdings + + + Federation Timelock-Expired UTXOs + + src/app/dashboard/dashboard.component.html + 174 + + + src/app/dashboard/dashboard.component.html + 314 + + liquid.federation-expired-utxos + + + LBTC Supply Against BTC Holdings + + src/app/dashboard/dashboard.component.html + 184 + + + src/app/dashboard/dashboard.component.html + 324 + + dashboard.lbtc-supply-against-btc-holdings + + + Indexing in progress + + src/app/dashboard/dashboard.component.html + 364 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 102 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.html + 52 + + lightning.indexing-in-progress + + + mempool.space merely provides data about the Bitcoin network. It cannot help you with retrieving funds, wallet issues, etc.For any such requests, you need to get in touch with the entity that helped make the transaction (wallet software, exchange company, etc). + + src/app/docs/api-docs/api-docs.component.html + 15,16 + + faq.big-disclaimer + + + REST API service + + src/app/docs/api-docs/api-docs.component.html + 50 + + api-docs.title + + + Endpoint + + src/app/docs/api-docs/api-docs.component.html + 60 + + Api docs endpoint + + + Description + + src/app/docs/api-docs/api-docs.component.html + 79 + + + src/app/docs/api-docs/api-docs.component.html + 137 + + + src/app/lightning/group/group.component.html + 17 + + + + Code Example + + src/app/docs/code-template/code-template.component.html + 6 + + + src/app/docs/code-template/code-template.component.html + 13 + + + src/app/docs/code-template/code-template.component.html + 29 + + + src/app/docs/code-template/code-template.component.html + 36 + + API Docs code example + + + Install Package + + src/app/docs/code-template/code-template.component.html + 23 + + API Docs install lib + + + Response + + src/app/docs/code-template/code-template.component.html + 43 + + API Docs API response + + + Documentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + + + FAQ + + src/app/docs/docs/docs.component.ts + 46 + + + + Get answers to common questions like: What is a mempool? Why isn't my transaction confirming? How can I run my own instance of The Mempool Open Source Project? And more. + + src/app/docs/docs/docs.component.ts + 47 + + + + REST API + + src/app/docs/docs/docs.component.ts + 51 + + + + Documentation for the liquid.network REST API service: get info on addresses, transactions, assets, blocks, and more. + + src/app/docs/docs/docs.component.ts + 53 + + + + Documentation for the mempool.space REST API service: get info on addresses, transactions, blocks, fees, mining, the Lightning network, and more. + + src/app/docs/docs/docs.component.ts + 55 + + + + WebSocket API + + src/app/docs/docs/docs.component.ts + 59 + + + + Documentation for the liquid.network WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + + src/app/docs/docs/docs.component.ts + 61 + + + + Documentation for the mempool.space WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + + src/app/docs/docs/docs.component.ts + 63 + + + + Electrum RPC + + src/app/docs/docs/docs.component.ts + 67 + + + + Documentation for our Electrum RPC interface: get instant, convenient, and reliable access to an Esplora instance. + + src/app/docs/docs/docs.component.ts + 68 + + + + Base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 29 + + + src/app/lightning/channel/channel-preview.component.html + 41 + + lightning.base-fee + + + mSats + + src/app/lightning/channel/channel-box/channel-box.component.html + 35 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 47 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 93 + + + src/app/lightning/node/node.component.html + 226 + + shared.m-sats + + + This channel supports zero base fee routing + + src/app/lightning/channel/channel-box/channel-box.component.html + 44 + + lightning.zero-base-fee-tooltip + + + Zero base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 45 + + lightning.zero-base-fee + + + This channel does not support zero base fee routing + + src/app/lightning/channel/channel-box/channel-box.component.html + 50 + + lightning.non-zero-base-fee-tooltip + + + Non-zero base fee + + src/app/lightning/channel/channel-box/channel-box.component.html + 51 + + lightning.non-zero-base-fee + + + Min HTLC + + src/app/lightning/channel/channel-box/channel-box.component.html + 57 + + lightning.min-htlc + + + Max HTLC + + src/app/lightning/channel/channel-box/channel-box.component.html + 63 + + lightning.max-htlc + + + Timelock delta + + src/app/lightning/channel/channel-box/channel-box.component.html + 69 + + lightning.timelock-delta + + + channels + + src/app/lightning/channel/channel-box/channel-box.component.html + 79 + + + src/app/lightning/channels-list/channels-list.component.html + 123 + + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 313 + + + src/app/lightning/nodes-map/nodes-map.component.ts + 213 + + lightning.x-channels + + + Starting balance + + src/app/lightning/channel/channel-close-box/channel-close-box.component.html + 3 + + Channel starting balance + lightning.starting-balance + + + Closing balance + + src/app/lightning/channel/channel-close-box/channel-close-box.component.html + 26 + + Channel closing balance + lightning.closing-balance + + + lightning channel + + src/app/lightning/channel/channel-preview.component.html + 3 + + lightning.channel + + + Inactive + + src/app/lightning/channel/channel-preview.component.html + 10 + + + src/app/lightning/channel/channel.component.html + 13 + + + src/app/lightning/channels-list/channels-list.component.html + 68 + + status.inactive + + + Active + + src/app/lightning/channel/channel-preview.component.html + 11 + + + src/app/lightning/channel/channel.component.html + 14 + + + src/app/lightning/channels-list/channels-list.component.html + 69 + + status.active + + + Closed + + src/app/lightning/channel/channel-preview.component.html + 12 + + + src/app/lightning/channel/channel.component.html + 15 + + + src/app/lightning/channels-list/channels-list.component.html + 8 + + + src/app/lightning/channels-list/channels-list.component.html + 71 + + + src/app/lightning/justice-list/justice-list.component.html + 11 + + status.closed + + + Created + + src/app/lightning/channel/channel-preview.component.html + 23 + + + src/app/lightning/channel/channel.component.html + 36 + + lightning.created + + + Capacity + + src/app/lightning/channel/channel-preview.component.html + 27 + + + src/app/lightning/channel/channel.component.html + 55 + + + src/app/lightning/channels-list/channels-list.component.html + 43 + + + src/app/lightning/justice-list/justice-list.component.html + 12 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 159 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 229 + + + src/app/lightning/node-statistics/node-statistics.component.html + 4 + + + src/app/lightning/node-statistics/node-statistics.component.html + 46 + + + src/app/lightning/nodes-list/nodes-list.component.html + 6 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 31 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 63 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 57 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 60 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 13 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 213 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 293 + + lightning.capacity + + + ppm + + src/app/lightning/channel/channel-preview.component.html + 34 + + + src/app/lightning/channel/channel-preview.component.html + 36 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 32 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 78 + + lightning.ppm + + + Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. + + src/app/lightning/channel/channel-preview.component.ts + 39 + + + src/app/lightning/channel/channel.component.ts + 38 + + + + Lightning channel + + src/app/lightning/channel/channel.component.html + 4 + + + src/app/lightning/channel/channel.component.html + 116 + + lightning.channel + + + Last update + + src/app/lightning/channel/channel.component.html + 40 + + + src/app/lightning/node/node.component.html + 80 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 62 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 59 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 14 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 16 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 16 + + lightning.last-update + + + Closing date + + src/app/lightning/channel/channel.component.html + 44 + + + src/app/lightning/channels-list/channels-list.component.html + 42 + + lightning.closing_date + + + Closed by + + src/app/lightning/channel/channel.component.html + 59 + + lightning.closed_by + + + Opening transaction + + src/app/lightning/channel/channel.component.html + 91 + + + src/app/lightning/justice-list/justice-list.component.html + 62 + + lightning.opening-transaction + + + Closing transaction + + src/app/lightning/channel/channel.component.html + 100 + + + src/app/lightning/justice-list/justice-list.component.html + 69 + + lightning.closing-transaction + + + Channel: + + src/app/lightning/channel/channel.component.ts + 37 + + + + Mutually closed + + src/app/lightning/channel/closing-type/closing-type.component.ts + 20 + + + + Force closed + + src/app/lightning/channel/closing-type/closing-type.component.ts + 24 + + + + Force closed with penalty + + src/app/lightning/channel/closing-type/closing-type.component.ts + 28 + + + + Open + + src/app/lightning/channels-list/channels-list.component.html + 5 + + open + + + No channels to display + + src/app/lightning/channels-list/channels-list.component.html + 29 + + lightning.empty-channels-list + + + Alias + + src/app/lightning/channels-list/channels-list.component.html + 38 + + + src/app/lightning/group/group.component.html + 72 + + + src/app/lightning/nodes-list/nodes-list.component.html + 5 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 60 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 57 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 10 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 11 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 11 + + lightning.alias + + + Channel ID + + src/app/lightning/channels-list/channels-list.component.html + 44 + + + src/app/lightning/justice-list/justice-list.component.html + 15 + + channels.id + + + avg + + src/app/lightning/channels-statistics/channels-statistics.component.html + 3 + + statistics.average-small + + + med + + src/app/lightning/channels-statistics/channels-statistics.component.html + 6 + + statistics.median-small + + + Avg Capacity + + src/app/lightning/channels-statistics/channels-statistics.component.html + 13 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 107 + + ln.average-capacity + + + Avg Fee Rate + + src/app/lightning/channels-statistics/channels-statistics.component.html + 26 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 114 + + ln.average-feerate + + + The average fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 28 + + ln.average-feerate-desc + + + Avg Base Fee + + src/app/lightning/channels-statistics/channels-statistics.component.html + 41 + + + src/app/lightning/channels-statistics/channels-statistics.component.html + 121 + + ln.average-basefee + + + The average base fee charged by routing nodes, ignoring base fees > 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 43 + + ln.average-basefee-desc + + + Med Capacity + + src/app/lightning/channels-statistics/channels-statistics.component.html + 59 + + ln.median-capacity + + + Med Fee Rate + + src/app/lightning/channels-statistics/channels-statistics.component.html + 72 + + ln.average-feerate + + + The median fee rate charged by routing nodes, ignoring fee rates > 0.5% or 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 74 + + ln.median-feerate-desc + + + Med Base Fee + + src/app/lightning/channels-statistics/channels-statistics.component.html + 87 + + ln.median-basefee + + + The median base fee charged by routing nodes, ignoring base fees > 5000ppm + + src/app/lightning/channels-statistics/channels-statistics.component.html + 89 + + ln.median-basefee-desc + + + Lightning node group + + src/app/lightning/group/group-preview.component.html + 3 + + + src/app/lightning/group/group.component.html + 2 + + lightning.node-group + + + Nodes + + src/app/lightning/group/group-preview.component.html + 25 + + + src/app/lightning/group/group.component.html + 23 + + + src/app/lightning/justice-list/justice-list.component.html + 14 + + + src/app/lightning/node-statistics/node-statistics.component.html + 16 + + + src/app/lightning/node-statistics/node-statistics.component.html + 53 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 30 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 13 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 56 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 22 + + lightning.node-count + + + Liquidity + + src/app/lightning/group/group-preview.component.html + 29 + + + src/app/lightning/group/group.component.html + 27 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 17 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 26 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 18 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 12 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 12 + + lightning.liquidity + + + Channels + + src/app/lightning/group/group-preview.component.html + 40 + + + src/app/lightning/group/group.component.html + 40 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 151 + + + src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts + 206 + + + src/app/lightning/node-statistics/node-statistics.component.html + 28 + + + src/app/lightning/node-statistics/node-statistics.component.html + 60 + + + src/app/lightning/nodes-list/nodes-list.component.html + 7 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 30 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 64 + + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 35 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 31 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 61 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 13 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 14 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 12 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 205 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 270 + + lightning.channels + + + Average size + + src/app/lightning/group/group-preview.component.html + 44 + + + src/app/lightning/node/node-preview.component.html + 32 + + lightning.active-channels-avg + + + Connect + + src/app/lightning/group/group.component.html + 73 + + Connect + lightning.connect-to-node + + + Location + + src/app/lightning/group/group.component.html + 74 + + + src/app/lightning/node/node-preview.component.html + 38 + + + src/app/lightning/node/node-preview.component.html + 50 + + + src/app/lightning/node/node.component.html + 51 + + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 65 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 62 + + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 15 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 17 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 17 + + lightning.location + + + Penalties + + src/app/lightning/justice-list/justice-list.component.html + 4 + + lightning.liquidity-ranking + + + Network Statistics + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 10 + + lightning.network-statistics-title + + + Channels Statistics + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 24 + + lightning.channel-statistics-title + + + Lightning Network History + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 52 + + lightning.network-history + + + Liquidity Ranking + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 66 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.html + 4 + + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts + 34 + + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 8 + + lightning.liquidity-ranking + + + Connectivity Ranking + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.html + 80 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.html + 4 + + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts + 38 + + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 22 + + lightning.connectivity-ranking + + + Lightning Explorer + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 34 + + + + Fee distribution + + src/app/lightning/node-fee-chart/node-fee-chart.component.html + 2 + + lightning.node-fee-distribution + + + Outgoing Fees + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 179 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 217 + + + + Incoming Fees + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 187 + + + src/app/lightning/node-fee-chart/node-fee-chart.component.ts + 231 + + + + Percentage change past week + + src/app/lightning/node-statistics/node-statistics.component.html + 5 + + + src/app/lightning/node-statistics/node-statistics.component.html + 17 + + + src/app/lightning/node-statistics/node-statistics.component.html + 29 + + mining.percentage-change-last-week + + + Lightning node + + src/app/lightning/node/node-preview.component.html + 3 + + + src/app/lightning/node/node.component.html + 4 + + + src/app/lightning/node/node.component.html + 306 + + lightning.node + + + Active capacity + + src/app/lightning/node/node-preview.component.html + 20 + + + src/app/lightning/node/node.component.html + 31 + + lightning.active-capacity + + + Active channels + + src/app/lightning/node/node-preview.component.html + 26 + + + src/app/lightning/node/node.component.html + 38 + + lightning.active-channels + + + Country + + src/app/lightning/node/node-preview.component.html + 44 + + country + + + Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. + + src/app/lightning/node/node-preview.component.ts + 54 + + + src/app/lightning/node/node.component.ts + 64 + + + + Average channel size + + src/app/lightning/node/node.component.html + 44 + + lightning.active-channels-avg + + + Avg channel distance + + src/app/lightning/node/node.component.html + 60 + + lightning.avg-distance + + + Color + + src/app/lightning/node/node.component.html + 86 + + lightning.color + + + ISP + + src/app/lightning/node/node.component.html + 92 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 54 + + isp + + + Exclusively on Tor + + src/app/lightning/node/node.component.html + 100 + + tor + + + Decoded + + src/app/lightning/node/node.component.html + 134 + + Decoded + lightning.decoded + + + Liquidity ad + + src/app/lightning/node/node.component.html + 184 + + node.liquidity-ad + + + Lease fee rate + + src/app/lightning/node/node.component.html + 190 + + Liquidity ad lease fee rate + liquidity-ad.lease-fee-rate + + + Lease base fee + + src/app/lightning/node/node.component.html + 198 + + liquidity-ad.lease-base-fee + + + Funding weight + + src/app/lightning/node/node.component.html + 204 + + liquidity-ad.funding-weight + + + Channel fee rate + + src/app/lightning/node/node.component.html + 214 + + Liquidity ad channel fee rate + liquidity-ad.channel-fee-rate + + + Channel base fee + + src/app/lightning/node/node.component.html + 222 + + liquidity-ad.channel-base-fee + + + Compact lease + + src/app/lightning/node/node.component.html + 234 + + liquidity-ad.compact-lease + + + TLV extension records + + src/app/lightning/node/node.component.html + 245 + + node.tlv.records + + + Open channels + + src/app/lightning/node/node.component.html + 286 + + lightning.open-channels + + + Closed channels + + src/app/lightning/node/node.component.html + 290 + + lightning.open-channels + + + Node: + + src/app/lightning/node/node.component.ts + 63 + + + + (Tor nodes excluded) + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.html + 22 + + + src/app/lightning/nodes-map/nodes-map.component.html + 7 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 10 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 37 + + lightning.tor-nodes-excluded + + + Lightning Nodes Channels World Map + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 73 + + + + See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 74 + + + + No geolocation data available + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 245 + + + + Active channels map + + src/app/lightning/nodes-channels/node-channels.component.html + 3 + + lightning.active-channels-map + + + See the locations of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + + src/app/lightning/nodes-map/nodes-map.component.ts + 52 + + + + See the number of Lightning network nodes visualized over time by network: clearnet only (IPv4, IPv6), darknet (Tor, I2p, cjdns), and both. + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 74 + + + + Indexing in progress + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 133 + + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 123 + + + + Clearnet and Darknet + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 176 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 315 + + + + Clearnet Only (IPv4, IPv6) + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 197 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 307 + + + + Darknet Only (Tor, I2P, cjdns) + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 218 + + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 299 + + + + Share + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html + 29 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 55 + + lightning.share + + + See a geographical breakdown of the Lightning network: how many Lightning nodes are hosted in countries around the world, aggregate BTC capacity for each country, and more. + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 47 + + + + nodes + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 104 + + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 137 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 163 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 196 + + + + BTC capacity + + src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts + 105 + + + + Lightning nodes in + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 3,4 + + lightning.nodes-in-country + + + ISP Count + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 34 + + lightning.isp-count + + + Top ISP + + src/app/lightning/nodes-per-country/nodes-per-country.component.html + 38 + + lightning.top-isp + + + Lightning nodes in + + src/app/lightning/nodes-per-country/nodes-per-country.component.ts + 43 + + + + Explore all the Lightning nodes hosted in and see an overview of each node's capacity, number of open channels, and more. + + src/app/lightning/nodes-per-country/nodes-per-country.component.ts + 44 + + + + Clearnet Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 6 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 81 + + lightning.clearnet-capacity + + + How much liquidity is running on nodes advertising at least one clearnet IP address + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 8 + + lightning.clearnet-capacity-desc + + + Unknown Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 13 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 87 + + lightning.unknown-capacity + + + How much liquidity is running on nodes which ISP was not identifiable + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 15 + + lightning.unknown-capacity-desc + + + Tor Capacity + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 20 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 93 + + lightning.tor-capacity + + + How much liquidity is running on nodes advertising only Tor addresses + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 22 + + lightning.tor-capacity-desc + + + Top 100 ISPs hosting LN nodes + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html + 31 + + lightning.top-100-isp-ln + + + Browse the top 100 ISPs hosting Lightning nodes along with stats like total number of nodes per ISP, aggregate BTC capacity per ISP, and more + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 54 + + + + BTC + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 164 + + + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts + 197 + + + + Lightning ISP + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 3 + + lightning.node-isp + + + Top country + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 39 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 35 + + lightning.top-country + + + Top node + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.html + 45 + + lightning.top-node + + + Lightning nodes on ISP: [AS] + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts + 46 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts + 46 + + + + Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. + + src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts + 47 + + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts + 47 + + + + Lightning nodes on ISP: + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 2,4 + + lightning.nodes-for-isp + + + ASN + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 10 + + lightning.asn + + + Active nodes + + src/app/lightning/nodes-per-isp/nodes-per-isp.component.html + 14 + + lightning.active-node-count + + + Top 100 oldest lightning nodes + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.html + 3 + + lightning.top-100-oldest-nodes + + + Oldest lightning nodes + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts + 27 + + + + See the oldest nodes on the Lightning network along with their capacity, number of channels, location, etc. + + src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts + 28 + + + + See Lightning nodes with the most BTC liquidity deployed along with high-level stats like number of open channels, location, node age, and more. + + src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts + 35 + + + + See Lightning nodes with the most channels open along with high-level stats like total node capacity, node age, and more. + + src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts + 39 + + + + Oldest nodes + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.html + 36 + + lightning.top-channels-age + + + Top lightning nodes + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts + 22 + + + + See the top Lightning network nodes ranked by liquidity, connectivity, and age. + + src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts + 23 + + + + See the capacity of the Lightning network visualized over time in terms of the number of open channels and total bitcoin capacity. + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 71 + + + + Immediately + + src/app/services/time.service.ts + 71 + + + + Just now + Upravo sada + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + davno + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + U ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Posle + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + + + fee + + src/app/shared/components/address-type/address-type.component.html + 3 + + address.fee + + + empty + + src/app/shared/components/address-type/address-type.component.html + 6 + + address.empty + + + provably unspendable + + src/app/shared/components/address-type/address-type.component.html + 18 + + address.provably-unspendable + + + bare multisig + + src/app/shared/components/address-type/address-type.component.html + 21 + + address.bare-multisig + + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + + + confirmation + + src/app/shared/components/confirmations/confirmations.component.html + 4 + + Transaction singular confirmation count + shared.confirmation-count.singular + + + confirmations + + src/app/shared/components/confirmations/confirmations.component.html + 5 + + Transaction plural confirmation count + shared.confirmation-count.plural + + + Replaced + + src/app/shared/components/confirmations/confirmations.component.html + 12 + + Transaction replaced state + transaction.replaced + + + Unconfirmed + Neprovereno + + src/app/shared/components/confirmations/confirmations.component.html + 18 + + Transaction unconfirmed state + transaction.unconfirmed + + + sat/WU + + src/app/shared/components/fee-rate/fee-rate.component.html + 4 + + + src/app/shared/components/fee-rate/fee-rate.component.html + 8 + + sat/WU + shared.sat-weight-units + + + My Account + + src/app/shared/components/global-footer/global-footer.component.html + 44 + + + src/app/shared/components/global-footer/global-footer.component.html + 56 + + shared.my-account + + + Explore + + src/app/shared/components/global-footer/global-footer.component.html + 73 + + footer.explore + + + Test Transaction + + src/app/shared/components/global-footer/global-footer.component.html + 78 + + Test Transaction + shared.test-transaction + + + Connect to our Nodes + + src/app/shared/components/global-footer/global-footer.component.html + 80 + + footer.connect-to-our-nodes + + + API Documentation + + src/app/shared/components/global-footer/global-footer.component.html + 81 + + footer.api-documentation + + + Learn + + src/app/shared/components/global-footer/global-footer.component.html + 84 + + footer.learn + + + What is a mempool? + + src/app/shared/components/global-footer/global-footer.component.html + 85 + + faq.what-is-a-mempool + + + What is a block explorer? + + src/app/shared/components/global-footer/global-footer.component.html + 86 + + faq.what-is-a-block-exlorer + + + What is a mempool explorer? + + src/app/shared/components/global-footer/global-footer.component.html + 87 + + faq.what-is-a-mempool-exlorer + + + Why isn't my transaction confirming? + + src/app/shared/components/global-footer/global-footer.component.html + 88 + + faq.why-isnt-my-transaction-confirming + + + More FAQs » + + src/app/shared/components/global-footer/global-footer.component.html + 90 + + faq.more-faq + + + Research + + src/app/shared/components/global-footer/global-footer.component.html + 91 + + mempool-research + + + Networks + + src/app/shared/components/global-footer/global-footer.component.html + 95 + + footer.networks + + + Mainnet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 96 + + footer.mainnet-explorer + + + Testnet3 Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 97 + + footer.testnet3-explorer + + + Testnet4 Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 98 + + footer.testnet4-explorer + + + Signet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 99 + + footer.signet-explorer + + + Liquid Testnet Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 100 + + footer.liquid-testnet-explorer + + + Liquid Explorer + + src/app/shared/components/global-footer/global-footer.component.html + 101 + + footer.liquid-explorer + + + Tools + + src/app/shared/components/global-footer/global-footer.component.html + 105 + + footer.tools + + + Clock (Mined) + + src/app/shared/components/global-footer/global-footer.component.html + 107 + + footer.clock-mined + + + Legal + + src/app/shared/components/global-footer/global-footer.component.html + 112 + + footer.legal + + + Terms of Service + Uslovi Korišćenja + + src/app/shared/components/global-footer/global-footer.component.html + 113 + + Terms of Service + shared.terms-of-service + + + Privacy Policy + Pravila o Privatnosti + + src/app/shared/components/global-footer/global-footer.component.html + 114 + + Privacy Policy + shared.privacy-policy + + + Trademark Policy + + src/app/shared/components/global-footer/global-footer.component.html + 115 + + Trademark Policy + shared.trademark-policy + + + Third-party Licenses + + src/app/shared/components/global-footer/global-footer.component.html + 116 + + Third-party Licenses + shared.trademark-policy + + + Your balance is too low.Please top up your account. + + src/app/shared/components/mempool-error/mempool-error.component.html + 9 + + accelerator.low-balance + + + This is a test network. Coins have no value. + + src/app/shared/components/testnet-alert/testnet-alert.component.html + 4 + + warning-testnet + + + Testnet3 is deprecated, and will soon be replaced by Testnet4 + + src/app/shared/components/testnet-alert/testnet-alert.component.html + 6 + + testnet3-deprecated + + + Batch payment + + src/app/shared/filters.utils.ts + 110 + + + + Address Types + + src/app/shared/filters.utils.ts + 121 + + + + Behavior + + src/app/shared/filters.utils.ts + 122 + + + + Heuristics + + src/app/shared/filters.utils.ts + 124 + + + + Sighash Flags + + src/app/shared/filters.utils.ts + 125 + + + + year + + src/app/shared/i18n/dates.ts + 3 + + + + years + + src/app/shared/i18n/dates.ts + 4 + + + + month + + src/app/shared/i18n/dates.ts + 5 + + + + months + + src/app/shared/i18n/dates.ts + 6 + + + + week + + src/app/shared/i18n/dates.ts + 7 + + + + weeks + + src/app/shared/i18n/dates.ts + 8 + + + + day + + src/app/shared/i18n/dates.ts + 9 + + + + days + + src/app/shared/i18n/dates.ts + 10 + + + + hour + + src/app/shared/i18n/dates.ts + 11 + + + + hours + + src/app/shared/i18n/dates.ts + 12 + + + + minute + + src/app/shared/i18n/dates.ts + 13 + + + + minutes + + src/app/shared/i18n/dates.ts + 14 + + + + second + + src/app/shared/i18n/dates.ts + 15 + + + + seconds + + src/app/shared/i18n/dates.ts + 16 + + + + Transaction fee + + src/app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe.ts + 11 + + + + Multisig of + + src/app/shared/script.utils.ts + 172 + + + + + \ No newline at end of file diff --git a/frontend/src/locale/messages.sv.xlf b/frontend/src/locale/messages.sv.xlf index cc2d68b1a..48f36863d 100644 --- a/frontend/src/locale/messages.sv.xlf +++ b/frontend/src/locale/messages.sv.xlf @@ -301,12 +301,33 @@ 14 + + Be your own explorer + Bli din egna utforskare + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Företagssponsorer 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +336,7 @@ Whale-sponsorer src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +345,7 @@ Chad-sponsorer src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +354,7 @@ OG-sponsorer ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +363,7 @@ Communityintegrationer src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +372,7 @@ Communityallianser src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +381,7 @@ Projektöversättare src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +390,7 @@ Projektbidragare src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +399,7 @@ Projektmedlemmar src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +408,7 @@ Projektunderhållare src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +419,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +433,7 @@ Ursäkta, något gick fel! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +442,7 @@ Vi kunde inte accelerera denna transaktion. Vänligen försök igen senare. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +451,11 @@ Stäng src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +464,7 @@ Din transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +473,7 @@ Plus obekräftade förfäder src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +482,7 @@ Virtuell storlek src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +493,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +512,7 @@ Storlek i vbyte för denna transaktion (inklusive obekräftade förfäder) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +521,7 @@ In-band avgifter src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +530,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +620,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +699,7 @@ Avgifter som redan betalats av denna transaktion (inklusive obekräftade förfäder) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +708,7 @@ Hur mycket snabbare? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +717,7 @@ Detta kommer att minska din förväntade väntetid tills den första bekräftelsen till src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +726,7 @@ Sammanfattning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +735,7 @@ Marknadspriset för nästa block src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +744,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +766,7 @@ Uppskattad extra avgift som krävs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +775,7 @@ Riktnivå src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +784,16 @@ Extra avgift som krävs src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ avgifter + + Mempool Accelerator® fees + Mempool Accelerator®-avgifter src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +802,7 @@ Acceleratorserviceavgift src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +811,7 @@ Transaktionsstorlekstillägg src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +820,7 @@ Beräknad accelereringskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +829,7 @@ Maximal accelereringskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +838,7 @@ Accelereringskostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +847,7 @@ Tillgängligt saldo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +856,15 @@ Gå tillbaka src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +873,7 @@ Accelerera din Bitcoin-transaktion? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +882,7 @@ Vänta src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +891,11 @@ Bekräftelse förväntas src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +904,7 @@ Bekräftelse förväntas inte inom den närmaste tiden src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +913,7 @@ För en extra src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +922,20 @@ Minska förväntad bekräftelsetid till src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Betalning till mempool.space för accelerering av txid .. + Payment to mempool.space for acceleration of txid .. + Betalning till mempool.space för accelerering av .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +944,7 @@ Ditt konto kommer att debiteras högst src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +953,19 @@ Betala src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +975,7 @@ Det gick inte att läsa in fakturan src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +984,16 @@ Laddar faktura... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR ELLER src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +1002,7 @@ Bekräfta din betalning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1011,7 @@ Total extra kostnad src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1020,7 @@ med src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1029,7 @@ Laddar betalningsmetod... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1038,7 @@ Bekräftar din betalning src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1047,7 @@ Vi behandlar din betalning... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1056,7 @@ Accelererar din transaktion src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1065,7 @@ Bekräftar din accelerering med våra mining poolpartners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1074,7 @@ ...ursäkta, det här tar längre tid än väntat... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1083,60 @@ Din transaktion accelereras! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + Transaktionen är redan accelererad! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Din transaktion har godkänts för accelerering av våra miningpartners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + Transaktionen har redan accepterats för accelerering av våra miningpool-partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + Få ett kvitto. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Beräknar kostnad... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1145,7 @@ anpassa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1154,7 @@ Accelerera till ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1163,11 @@ Accelerera src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1177,10 @@ Din transaktion kommer att prioriteras av upp till % av miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Nästa block @@ -1150,6 +1200,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1264,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1287,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1330,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1363,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1383,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1427,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1470,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1504,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1524,19 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + Avbruten + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Accelereringsavgifter @@ -1479,7 +1546,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1559,7 @@ Ingen accelererad transaktion för denna tidsram src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1567,7 @@ Vid block: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1587,7 @@ Runt blocket: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1660,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1758,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1837,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1858,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1880,7 @@ Misslyckad src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1889,7 @@ Det finns inga aktiva accelereringar src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1898,7 @@ Det finns inga nya accelereringar src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1960,19 @@ mining.all-time + + all + alla + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Visa mer » @@ -1892,6 +1980,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2018,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2043,7 @@ accelererar inte src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2082,7 @@ Balans src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2090,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2194,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2215,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2228,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2254,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2276,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2300,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2324,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2341,11 @@ Adress: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2353,71 @@ Se mempooltransaktioner, bekräftade transaktioner, saldo och mer för adress . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + Taproot-träd + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Balanshistorik src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - alla - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent senaste src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + Ospenderade Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction av transaktion src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2426,7 @@ av transaktioner src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2435,11 @@ Kunde inte ladda addressdata. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2448,7 @@ Det är för många transaktioner på den address än vad din backend kan klara av. Läs mer om attsätta upp en starkare backend. Överväg att visa addressen på den officiella Mempool-webplatsen istället: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2457,11 @@ Bekräftad balans src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2470,11 @@ Bekräftade UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2483,7 @@ Väntande UTXO src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2492,28 @@ Typ src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Asset @@ -2582,10 +2721,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2740,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2760,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2772,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2798,8 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Utforska alla tillgångar som ges ut på Liquid-nätverket som L-BTC, L-CAD, USDT och mer. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. + Utforska alla assets utgivna på Liquidnätverket så som LBTC, L-CAD, USDT, mfl. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2993,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +3005,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3058,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Match src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3076,7 @@ Någon src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3085,7 @@ Färgton src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3094,7 @@ Klassisk src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3107,7 @@ Ålder src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3173,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3189,7 @@ Inte tillgängligt src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3198,7 @@ Din webbläsare stöder inte denna funktion. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3247,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3265,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3291,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3329,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3230,7 +3344,7 @@ Recently broadcasted - Nyligen utskickad + Nyligen publicerad src/app/components/block-overview-tooltip/block-overview-tooltip.component.html 74 @@ -3254,8 +3368,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3390,40 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + Nerprioriterad + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Konflikt src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3495,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3515,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3555,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3595,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3611,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3627,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3659,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3717,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3746,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3760,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3781,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3850,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3865,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3881,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3909,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3978,11 @@ Förväntat src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3991,7 @@ Faktiskt src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +4000,7 @@ Förväntat block src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +4009,7 @@ Faktiskt block src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4018,15 @@ Version src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4035,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4065,7 @@ Bitar src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4074,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4083,7 @@ Svårighet src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4099,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4112,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4121,7 @@ Block Header Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4130,11 @@ Granskning src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4144,31 @@ Detaljer src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4198,7 @@ Det gick inte att ladda blockdata. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4207,7 @@ Varför är blocket tomt? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4216,11 @@ Accelereringsavgifter betalade vid sidan av src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4229,20 @@ Block src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4250,7 @@ Höjd src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4262,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4283,11 @@ Belöning src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4295,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4320,15 @@ Avgifter src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4337,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4353,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4374,7 @@ Se de senaste Liquid-blocken tillsammans med grundläggande statistik som blockhöjd, blockstorlek och mer. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4382,7 @@ Se de senaste Bitcoin-blocken tillsammans med grundläggande statistik som blockhöjd, blockbelöning, blockstorlek och mer. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4394,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4403,7 @@ Kopierad! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4636,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4660,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4677,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4688,7 @@ X tidslinje src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4697,7 @@ Konsolidering src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4705,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4713,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4721,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4729,7 @@ Data src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4737,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5045,7 @@ Belopp (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5054,7 @@ Begär Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5220,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5335,29 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) + Hashrate (1v) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5369,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5382,7 @@ Se hashrate och svårighetsgrad för Bitcoin-nätverket visualiserat över tid. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5390,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5438,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5455,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5472,6 @@ master-page.layer2-networks-header - - Dashboard - Instrumentbräde - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafer - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dokumentation - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Utgått icke-dust @@ -5351,6 +5505,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5626,7 @@ block src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5656,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5716,7 @@ Peg-out pågår... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5765,9 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Antal gånger som Federationens BTC-innehav fallit under 95% av det totala L-BTC-tillgångarna + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply + Antalet gånger Federationens BTC-innehav har fallit under 95% av det totala L-BTC-utbudet. src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5818,9 @@ 163 - - L-BTC in circulation - L-BTC i cirkulation + + LBTC in circulation + LBTC i cirkulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5840,6 @@ shared.as-of-block - - Mining Dashboard - Miningdashboard - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightningutforskare - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Kran - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Se statistik för transaktioner i mempoolen: avgiftsintervall, sammanlagd storlek och mer. Mempool-block uppdateras i realtid när nätverket tar emot nya transaktioner. @@ -5774,15 +5897,15 @@ Logga in src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5936,18 @@ dashboard.adjustments + + Mining Dashboard + Miningdashboard + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Få Bitcoin-miningstatistik i realtid som hashrate, svårighetsjustering, blockbelöningar, pooldominans och mer. @@ -5821,6 +5956,64 @@ 30 + + Mint + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + Premine (% av total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + Etching av + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + Överföring + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + Käll-inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + Kunde inte avkoda data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Pooltursamhet (1 vecka) @@ -5839,7 +6032,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6063,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6089,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6136,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6179,7 @@ Alla miners src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6202,17 @@ blocks block - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6224,19 @@ Annat () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6281,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6294,11 @@ Se mining pool-statistik för : de senaste minerade blocken, hashrate över tid, total blockbelöning hittills, kända coinbaseadresser och mer. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6317,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6365,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6380,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6397,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6414,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6445,51 @@ Coinbasetagg src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + Job Mottaget + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Det gick inte att läsa in pooldata. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6498,7 @@ Inte tillräckligt med data ännu src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6506,11 @@ Pooldominans src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6527,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,26 +6539,105 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + Skicka paket + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Kommaseparerad lista över råtransaktioner + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Högsta avgiftssats (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + Max burn mängd (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + Tillåten? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Orsak till avslag + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction - Utsänd transaktion + Publicerad transaktion src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. - Sänd ut en transaktion till -nätverket med hjälp av transaktionens hash. + Publicera en transaktion till -nätverket med hjälp av transaktionens hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6677,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6724,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6818,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6938,81 @@ search.go-to + + Search by student name or ID... + Sök på studentnamn eller ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + Studentnamn + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + Bevis + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + Verifiera + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + Filnamn + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + Verifierad + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool i vBytes (sat/vByte) @@ -6597,29 +7031,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV-vy - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filter src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7049,7 @@ Invertera src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7058,7 @@ Transaktioner i vBytes per sekund (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7067,18 @@ Begränsa utstickare src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafer + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Se mempoolstorlek (i MvB) och transaktioner per sekund (i vB/s) visualiserade över tid. @@ -6658,24 +7087,43 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Se Bitcoin-block och mempoolstockningar i realtid i ett förenklat format perfekt för en TV. + + Stratum Jobs + Stratumjobb - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + nivåer kvar + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + 1 nivå kvar + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Testtransaktioner src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7137,10 @@ Rå hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Kommaseparerad lista över råtransaktioner - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Högsta avgiftssats (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - Tillåten? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Orsak till avslag - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Omedelbart - - src/app/components/time/time.component.ts - 107 - - - - Just now - Just nu - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - sedan - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Om ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - inom ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Efter - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - innan - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Skickad @@ -7090,11 +7178,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7192,11 @@ Inte inom den närmaste tiden src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7206,7 @@ Bekräftad vid src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7215,7 @@ Blockhöjd src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7224,7 @@ Din transaktion har blivit accelererad src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7233,7 @@ Väntar på att din transaktion ska dyka upp i mempoolen src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7242,7 @@ Din transaktion finns i mempoolen, men den kommer inte att bekräftas på ett tag. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7251,7 @@ Din transaktion är nära toppen av mempoolen och förväntas bekräftas snart. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7260,7 @@ Din transaktion förväntas bekräftas i nästa block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7269,7 @@ Din transaktion är bekräftad! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7278,29 @@ Din transaktion har ersatts av en nyare version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Det gick inte att läsa in transaktionsdata. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Se mer information src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7313,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7329,33 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions + Relaterade transaktioner - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Ättling - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7364,414 @@ Ancestor Förfader - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Funktioner + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Denna transaktion förväntades inkluderas i blocket + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Förväntades i block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Denna transaktion sågs i mempoolen före mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + Sedd i mempoolen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Denna transaktion saknades i vår mempool före mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + Inte sedd i mempoolen + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Denna transaktion kan ha lagts till vid sidan av + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Denna transaktion kan ha prioriterats vid sidan av + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Denna transaktion kom i konflikt med en annan version i vår mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + Denna transaktion kan inte bli accelererad + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + Förhandsvisa transaktion + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + Transaktion hex eller base64 enkodad PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + Förhandsvisa + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + Hämta saknade prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + Kunde inte avkoda transaktion, anledning: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + Förhandsvisa Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + Denna transaktionen är lagrad lokalt i din webbläsare. +Publicera för att lägga till den i mempoolen. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + Omdirigerar till transaktionssidan... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + Transaktionen kunde inte publiceras eftersom den saknar signatur(er) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + Publicera + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + Publicerad + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flöde + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Dölj diagram + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Visa mer + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Inputs & Outputs + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Visa diagram + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Justerad vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Locktime + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + Laddar + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + Förhandsvisa transaktion + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + Förhandsvisa en transaktion till Bitcoin -nätverket genom transaktionens rå hex-data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Dölj accelerator src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7780,7 @@ RBF tidslinje src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7790,17 @@ Tidslinje för accelereringar src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flöde - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Dölj diagram - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Visa mer - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Inputs & Outputs - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Visa diagram - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Justerad vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Locktime - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. Transaktionen hittades inte src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7809,25 @@ Väntar på den att dyka upp i mempoolen... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - Det gick inte att läsa in transaktionsdata. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. + Varning! Denna transaktion involverar adresser som är bedrägligt lika varandra. Det kan röra sig om en adressförgiftningsattack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Funktioner - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Denna transaktion förväntades inkluderas i blocket - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Förväntades i block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Denna transaktion sågs i mempoolen före mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - Sedd i mempoolen - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Denna transaktion saknades i vår mempool före mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - Inte sedd i mempoolen - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Denna transaktion kan ha lagts till vid sidan av - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Denna transaktion kan ha prioriterats vid sidan av - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Denna transaktion kom i konflikt med en annan version i vår mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Nyskapade mynt) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7836,25 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + Inskription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7864,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7874,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7883,25 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7910,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7919,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7928,7 @@ Föregående outputscript src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7937,7 @@ Föregående output-typ src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7946,7 @@ Peg-out till src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7955,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7965,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7975,46 @@ Visa mer indata för att se feedata src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + Treasury-topplista + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + BTC-balans + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + USD-värde + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + Treasuryfördelning + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs andra inputs @@ -7899,6 +8245,70 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + Plånbok + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + Balans (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + Balans (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + Plånbok: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + Se mempooltransaktioner, bekräftade transaktioner, balanser och mer för plånbok . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + Kunde inte ladda plånboksdatan. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquidfederationsinnehav @@ -7925,9 +8335,9 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC-tillgångar mot BTC-tillgångar + + LBTC Supply Against BTC Holdings + LBTC-utbudet i förhållande till BTC-innehav src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8390,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8401,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Standard push: action: 'want', data: ['blocks', ...] för att uttrycka vad du vill ha pushat. Tillgängligt: blocks, mempool-blocks, live-2h-chart, och stats.Pusha transaktioner relaterat till address: 'track-address': '3PbJ...bF9B' för att ta emot alla nya transaktioner innehållandes den addressen som input eller output. Returnerar en lista av transaktioner. address-transactions för nya mempooltransaktioner, och block-transactions för nya blockbekräftade transaktioner. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Kodexempel @@ -8050,6 +8447,15 @@ API Docs API response + + Documentation + Dokumentation + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8444,7 +8850,7 @@ Översikt för Lightning-kanalen . Se kanalkapacitet, de inblandade Lightning-noderna, relaterade transaktioner i kedjan och mer. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9473,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightningutforskare + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Få statistik om Lightning-nätverket (total kapacitet, anslutning, etc), Lightning-noder (kanaler, likviditet, etc) och Lightning-kanaler (status, avgifter, etc). @@ -9182,7 +9600,7 @@ Översikt för Lightning-nätverksnoden . Se kanaler, kapacitet, plats, avgiftsstatistik och mer. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10107,7 @@ Lightning-noder på ISP: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10119,7 @@ Bläddra bland alla Bitcoin Lightning-noder med [AS] ISP och se aggregerad statistik som totalt antal noder, total kapacitet, och mer för ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10227,339 @@ 71 + + Immediately + Omedelbart + + src/app/services/time.service.ts + 71 + + + + Just now + Just nu + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + sedan + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Om ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + inom ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Efter + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + innan + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + Denna adress liknar på ett vilseledande sätt en annan utdata. Den kan vara en del av en adressförgiftningsattack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee avgift @@ -9845,6 +10596,15 @@ address.bare-multisig + + unknown + okänd + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation bekräftelse @@ -9904,11 +10664,11 @@ Mitt konto src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10677,7 @@ Utforska src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10686,7 @@ Testa transaktion src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10696,7 @@ Anslut till våra noder src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10705,7 @@ API-dokumentation src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10714,7 @@ Lär dig src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10723,7 @@ Vad är en mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10732,7 @@ Vad är en block explorer? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10741,7 @@ Vad är en mempool explorer? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10750,7 @@ Varför bekräftas inte min transaktion? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10759,7 @@ Mer FAQs » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10768,7 @@ Forskning src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10777,7 @@ Nätverk src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10786,7 @@ Mainnet-utforskare src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10795,7 @@ Testnet3-utforskare src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10804,7 @@ Testnet4-utforskare src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10813,7 @@ Signet-utforskare src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10822,7 @@ Liquid Testnet-utforskare src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10831,7 @@ Liquid-utforskare src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10840,7 @@ Verktyg src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10849,7 @@ Klocka (block) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10858,7 @@ Rättsligt src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10867,7 @@ Användarvillkor src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10877,7 @@ Integritetspolicy src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10887,7 @@ Varumärkespolicy src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10897,14 @@ Tredjepartslicenser src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Ditt saldo är för lågt.Vänligen fyll på ditt konto . + Your balance is too low.Please top up your account. + Din balans är för låg.Var god fyll på ditt konto. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10929,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 är ännu inte slutfört och kan återställas när som helst. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Batchbetalning src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10942,7 @@ Adresstyper src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10950,7 @@ Beteende src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10958,7 @@ Heuristik src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10966,7 @@ Sighash-flaggor src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11094,7 @@ Multisig av src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.th.xlf b/frontend/src/locale/messages.th.xlf index f20a154fa..de7071273 100644 --- a/frontend/src/locale/messages.th.xlf +++ b/frontend/src/locale/messages.th.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 ผู้สนับสนุนระดับองค์กร 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ ผู้สนับสนุนระดับวาฬ src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ ผู้สนับสนุนระดับ chad src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ ผู้สนับสนุนระดับ OG ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ การร่วมมือกับชุมชน src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ พันธมิตรของเรา src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ ผู้ร่วมแปลโปรเจค src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ ผู้ร่วมพัฒนาโปรเจค src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ สมาชิกในโปรเจคนี้ src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ ผู้ดูแลโปรเจคนี้ src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ ขออภัย มีบางอย่างผิดพลาด src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ เราไม่สามารถทำการเร่งธุรกรรมนี้ได้ โปรดลองใหม่อีกครั้งในภายหลัง src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ ปิด src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ ธุรกรรมของคุณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ รวมถึง ธุรกรรมก่อนหน้าที่ไม่ได้รับการยืนยัน src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ ขนาดเสมือน src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ ขนาดของธุรกรรมในหน่วย vbyte (รวมธุรกรรมที่ยังไม่ได้รับการยืนยันก่อนหน้าด้วย) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ ค่าธรรมเนียม In-band src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ ค่าธรรมเนียมถูกจ่ายโดยธุรกรรมนี้แล้ว (รวมถึงธุรกรรมก่อนหน้าธุรกรรมนี้ที่ยังไม่ได้รับการยืนยัน) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ จะเร็วขึ้นขนาดไหน? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -647,7 +715,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -656,7 +724,7 @@ สรุป src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -665,7 +733,7 @@ เรทของบล็อกถัดไป src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -674,11 +742,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -696,7 +764,7 @@ ค่าธรรมเนียมเพิ่มเติมโดยประมาณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -705,7 +773,7 @@ เรทที่ต้องการ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -714,16 +782,15 @@ ต้องเสียค่าธรรมเนียมเพิ่มเติม src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - ค่าธรรมเนียม Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -732,7 +799,7 @@ ค่าธรรมเนียมระบบ Accelerator src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -741,7 +808,7 @@ ค่าธรรมเนียมเพิ่มขนาดธุรกรรม src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -750,7 +817,7 @@ ค่าใช้จ่ายโดยประมาณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -759,7 +826,7 @@ ค่าใช้จ่ายสูงสุด src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -768,7 +835,7 @@ ค่าธรรมเนียมการเร่ง src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -777,7 +844,7 @@ ยอดเงินคงเหลือ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -786,15 +853,15 @@ ย้อนกลับ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -803,7 +870,7 @@ เร่งธุรกรรมของคุณหรือไม่ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -812,7 +879,7 @@ รอ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -821,11 +888,11 @@ จะได้รับการยืนยันภายใน src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -834,7 +901,7 @@ ไม่ได้รับการยืนยันในเร็วๆนี้ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -842,7 +909,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -850,19 +917,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -870,7 +937,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -879,19 +946,19 @@ จ่าย src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -901,7 +968,7 @@ ไม่สามารถโหลดใบแจ้งหนี้ได้ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -910,16 +977,15 @@ กำลังโหลดใบแจ้งหนี้ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - หรือ + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -928,7 +994,7 @@ ยืนยันการชำระเงิน src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -937,7 +1003,7 @@ ค่าใช้จ่ายเพิ่มเติมทั้งหมด src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -946,7 +1012,7 @@ กับ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -955,7 +1021,7 @@ กำลังโหลดวิธีการชำระเงิน src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -964,7 +1030,7 @@ กำลังยืนยันการชำระเงินของคุณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -973,7 +1039,7 @@ เรากำลังทำรายการชำระเงินของคุณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -982,7 +1048,7 @@ เร่งธุรกรรมของคุณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -990,7 +1056,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -998,7 +1064,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1007,24 +1073,56 @@ กำลังเร่งธุรกรรมของคุณ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... กำลังคำนวนค่าใช้จ่าย src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1033,7 +1131,7 @@ ปรับค่า src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1042,7 +1140,7 @@ เร่งเป็น ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1051,15 +1149,11 @@ Accelerate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1068,60 +1162,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block บล็อกถัดไป @@ -1141,6 +1185,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1201,7 +1249,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1224,12 +1272,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1267,27 +1315,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1300,11 +1348,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1320,11 +1368,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1364,12 +1412,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1406,12 +1454,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1439,8 +1487,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1458,6 +1506,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees ค่าธรรมเนียม acceleration @@ -1467,7 +1527,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1480,7 +1540,7 @@ ไม่มีธุรกรรมที่ถูกเร่งในช่วงเวลานี้ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1488,7 +1548,7 @@ ที่บล็อก: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1508,7 +1568,7 @@ ประมาณบล็อกที่: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1580,6 +1640,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1673,12 +1737,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1745,11 +1813,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1766,7 +1834,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1788,7 +1856,7 @@ ล้มเหลว src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1796,7 +1864,7 @@ There are no active accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1804,7 +1872,7 @@ There are no recent accelerations src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1865,6 +1933,19 @@ mining.all-time + + all + ทั้งหมด + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » เรียกดูเพิ่มเติม » @@ -1872,6 +1953,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1904,10 +1989,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1930,7 +2011,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1967,7 +2048,7 @@ คงเหลือ src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1975,15 +2056,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2075,7 +2160,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2096,7 +2181,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2109,7 +2194,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2131,19 +2220,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2153,6 +2242,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2173,7 +2266,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2197,7 +2290,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2214,61 +2307,80 @@ แอดเดรส: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 See mempool transactions, confirmed transactions, balance, and more for address . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History ประวัติยอดเงิน src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - ทั้งหมด - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent ล่าสุด src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction จาก ธุรกรรม src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2277,7 +2389,7 @@ จาก ธุรกรรม src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2286,11 +2398,11 @@ เกิดข้อผิดพลาดในการโหลดข้อมูลแอดเดรส src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2298,7 +2410,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2306,7 +2418,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2315,7 +2431,11 @@ UTXOs ที่ยืนยันแล้ว src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2324,7 +2444,7 @@ UTXOs ที่กำลังดำเนินการ src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2333,18 +2453,27 @@ ชนิด src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset สินทรัพย์ @@ -2550,10 +2679,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2573,11 +2698,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2593,11 +2718,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2605,7 +2730,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2631,7 +2756,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2822,7 +2947,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2834,7 +2959,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2884,37 +3009,12 @@ Mempool Goggles™ tooltip - - beta - เบต้า - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match ตรงกัน src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2927,7 +3027,7 @@ อื่นๆ src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2935,7 +3035,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2944,7 +3044,7 @@ คลาสสิก src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2957,7 +3057,7 @@ อายุ src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3022,15 +3122,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3038,7 +3138,7 @@ ไม่สามารถใช้ได้ src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3047,7 +3147,7 @@ บราวเซอร์ของคุณไม่รองรับฟีเจอร์นี้ src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3096,8 +3196,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3114,12 +3214,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3136,8 +3240,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3174,7 +3278,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3212,8 +3316,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3225,22 +3337,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict ขัดแย้ง src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3310,7 +3439,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3330,15 +3459,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3366,19 +3499,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3402,11 +3539,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3417,11 +3554,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3432,11 +3569,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3464,23 +3601,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3518,15 +3659,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3547,8 +3688,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3561,7 +3702,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3582,7 +3723,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3650,6 +3791,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3661,11 +3806,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3673,7 +3822,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3701,11 +3850,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3770,7 +3919,11 @@ ที่คาดหวัง src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3779,7 +3932,7 @@ ความจริง src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3788,7 +3941,7 @@ บล็อกที่คาดหวัง src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3797,7 +3950,7 @@ บล็อกจริง src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3806,11 +3959,15 @@ เวอร์ชั่น src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3819,7 +3976,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3849,7 +4006,7 @@ บิต src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3858,7 +4015,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3867,7 +4024,7 @@ ความยาก src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3883,11 +4040,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3896,7 +4053,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3905,7 +4062,7 @@ Hex ส่วนหัวบล็อก src/app/components/block/block.component.html - 300 + 307 block.header @@ -3914,11 +4071,11 @@ การตรวจสอบ src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3928,23 +4085,31 @@ รายละเอียด src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3974,7 +4139,7 @@ เกิดข้อผิดพลาดในการโหลดข้อมูลบล็อก src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3983,7 +4148,7 @@ ทำไมบล็อกถึงว่าง? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3991,7 +4156,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4000,24 +4169,20 @@ บล็อก src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4025,7 +4190,7 @@ ที่ src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4037,11 +4202,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4054,11 +4223,11 @@ ค่าตอบแทน src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4066,19 +4235,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4087,15 +4260,15 @@ ค่าธรรมเนียม src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4104,11 +4277,11 @@ TXs src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4120,11 +4293,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4140,14 +4313,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4159,7 +4332,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4168,7 +4341,7 @@ คัดลอกแล้ว! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4401,7 +4574,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4425,6 +4598,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4434,6 +4615,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4441,7 +4626,7 @@ ช่วงเวลา X src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4449,7 +4634,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4457,7 +4642,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4465,7 +4650,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4473,7 +4658,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4481,7 +4666,7 @@ ข้อมูล src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4489,7 +4674,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4795,7 +4980,7 @@ จำนวน (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4803,7 +4988,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4969,7 +5154,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5084,24 +5269,28 @@ lightning.nodes-channels-world-map - - Hashrate - อัตราแฮช + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + อัตราแฮช src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5113,11 +5302,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5125,7 +5314,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5133,11 +5322,11 @@ อัตราแฮช (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5180,11 +5369,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5197,11 +5386,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5214,53 +5403,6 @@ master-page.layer2-networks-header - - Dashboard - แดชบอร์ด - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - กราฟ - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - เอกสารคำอภิบาย - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5292,6 +5434,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5405,7 +5551,7 @@ บล็อก src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5434,11 +5580,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5483,7 +5637,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5530,8 +5684,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5581,9 +5735,8 @@ 163 - - L-BTC in circulation - อุปทานหมุนเวียน L-BTC + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5603,49 +5756,6 @@ shared.as-of-block - - Mining Dashboard - แดชบอร์ดการขุด - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - ตัวสำรวจ lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5702,15 +5812,15 @@ เข้าสู่ระบบ src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5741,6 +5851,18 @@ dashboard.adjustments + + Mining Dashboard + แดชบอร์ดการขุด + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5748,6 +5870,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) ความโชคดีของ pool (1 สัปดาห์) @@ -5766,7 +5940,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5797,7 +5971,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5823,7 +5997,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5870,11 +6044,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5913,7 +6087,7 @@ ผู้ขุดทั้งหมด src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5935,17 +6109,17 @@ blocks บล็อก - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5957,15 +6131,19 @@ อื่นๆ () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6010,11 +6188,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6022,11 +6200,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6045,20 +6223,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6069,6 +6271,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6080,11 +6286,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6097,11 +6303,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6114,11 +6320,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6144,19 +6350,47 @@ แท็ก coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6165,7 +6399,7 @@ ยังมีข้อมูลไม่มากพอ src/app/components/pool/pool.component.ts - 142 + 177 @@ -6173,11 +6407,11 @@ Dominance ของพูล src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6194,7 +6428,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6206,25 +6440,100 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + อนุญาติ? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + เหตุผลที่ถูกโต้กลับ + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction ประกาศธุรกรรม src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6263,17 +6572,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6286,7 +6619,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6380,11 +6713,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6498,6 +6831,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) ขนาดหน่วยความจำ vBytes (sat/vByte) @@ -6516,29 +6917,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - มุมมองทีวี - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter ตัวกรอง src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6547,7 +6935,7 @@ กลับ src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6556,7 +6944,7 @@ ธุรกรรมต่อวินาที (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6564,10 +6952,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + กราฟ + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6575,23 +6971,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions ธุรกรรมทดสอบ src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6605,368 +7018,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - อนุญาติ? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - เหตุผลที่ถูกโต้กลับ - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - ในทันที - - src/app/components/time/time.component.ts - 107 - - - - Just now - ตอนนี้ - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - ที่ผ่านมา - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - ใน ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - ภายใน ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - หลังจาก - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - ก่อน - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent ส่งแล้ว @@ -7004,11 +7059,11 @@ ETA src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7018,11 +7073,11 @@ ไม่ใช่ภายในเร็วๆนี้ src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7032,7 +7087,7 @@ ยืนยันที่ src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7041,7 +7096,7 @@ ความสูงบล็อก src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7049,7 +7104,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7057,7 +7112,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7065,7 +7120,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7073,7 +7128,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7081,7 +7136,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7089,7 +7144,7 @@ Your transaction is confirmed! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7097,16 +7152,29 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + เกิดข้อผิดพลาดขณะโหลดข้อมูลธุรกรรม + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details แสดงข้อมูลเพิ่มเติม src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7119,11 +7187,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7134,44 +7202,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant ผู้สืบทอด - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7180,18 +7236,392 @@ Ancestor บรรพบุรุษ - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + คุณสมบัติ + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + คาดว่าในบล็อก + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + พบใน Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + ไม่พบใน Mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Flow + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + ซ่อนไดอะแกรมนี้ + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + แสดงเพิ่มเติม + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + อินพุตและเอาต์พุต + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + แสดงไดอะแกรม + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + vsize ที่ถูกเปลี่ยน + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + เวลาล็อก + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator ซ่อนตัวเร่ง src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7200,7 +7630,7 @@ ช่วงเวลา RBF src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7210,109 +7640,17 @@ ช่วงเวลาของการเร่ง src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Flow - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - ซ่อนไดอะแกรมนี้ - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - แสดงเพิ่มเติม - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - อินพุตและเอาต์พุต - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - แสดงไดอะแกรม - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - vsize ที่ถูกเปลี่ยน - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - เวลาล็อก - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. ไม่พบเจอธุรกรรมนี้ src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7321,121 +7659,24 @@ กำลังรอให้ปรากฏใน mempool... src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - เกิดข้อผิดพลาดขณะโหลดข้อมูลธุรกรรม + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - คุณสมบัติ - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - คาดว่าในบล็อก - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - พบใน Mempool - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - ไม่พบใน Mempool - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (เหรียญที่ถูกสร้างใหม่) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7444,16 +7685,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7463,7 +7712,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7473,7 +7722,7 @@ พยาน src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7482,16 +7731,24 @@ สคริปต์ถอน P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7500,7 +7757,7 @@ สคริปต์พยาน P2SH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7509,7 +7766,7 @@ nลำดับ src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7518,7 +7775,7 @@ สคริปต์เอาต์พุตก่อนหน้า src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7527,7 +7784,7 @@ ประเภทของ output ก่อนหน้า src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7536,7 +7793,7 @@ Peg-out ไปยัง src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7545,7 +7802,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7555,7 +7812,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7565,10 +7822,42 @@ แสดงอินพุตเพิ่มเติมเพื่อเปิดเผยข้อมูลค่าธรรมเนียม src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs อินพุตอื่น ๆ @@ -7799,6 +8088,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7823,8 +8170,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7876,10 +8223,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7891,22 +8234,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - ค่าตอบกลับพื้นฐาน: การกระทำ: 'ต้องการ', ข้อมูล: ['บล็อก', ...] เพื่ออธิบายค่าที่ต้องการตอบกลับ. ที่ใช้งานได้: บล็อก, บล็อก-mempool, ชาตสด-2h, และ สถิติ.ส่งธุรกรรมไปยังแอดเดรส: 'track-address': '3PbJ...bF9B' เพื่อที่จะได้รับธุรกรรมใหม่ทั้งหมดที่มี input/output ของแอดเดรสนั้น. ตอบกลับเป็นอาเรย์ของธุรกรรม. แอดเดรส-ธุรกรรม สำหรับธุรกรรม mempool ใหม่, และ ธุรกรรม-บล็อก สำหรับธุรกรรมที่ถูกยืนยันในบล็อกใหม่ - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example โค้ดตัวอย่าง @@ -7946,6 +8280,15 @@ API Docs API response + + Documentation + เอกสารคำอภิบาย + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ ถามตอบ @@ -8333,7 +8676,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8956,6 +9299,18 @@ lightning.connectivity-ranking + + Lightning Explorer + ตัวสำรวจ lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). @@ -9069,7 +9424,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9570,7 +9925,7 @@ โหนด lightning บน ISP: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9581,7 +9936,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9684,6 +10039,338 @@ 71 + + Immediately + ในทันที + + src/app/services/time.service.ts + 71 + + + + Just now + ตอนนี้ + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + ที่ผ่านมา + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + ใน ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ภายใน ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + หลังจาก + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + ก่อน + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee ค่าธรรมเนียม @@ -9718,6 +10405,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation การยืนยัน @@ -9777,11 +10472,11 @@ บัญชีของฉัน src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9790,7 +10485,7 @@ สำสวจ src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9799,7 +10494,7 @@ ทดสอบธุรกรรม src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9809,7 +10504,7 @@ เชื่อมต่อกับโหนดของเรา src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9818,7 +10513,7 @@ ข้อมูล API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9827,7 +10522,7 @@ ศึกษา src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9836,7 +10531,7 @@ อะไรคือ mempoo? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9845,7 +10540,7 @@ อะไรคือเครื่องมือสำรวจบล็อก? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9854,7 +10549,7 @@ อะไรคือเครื่องมือสำรวจ mempool? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9863,7 +10558,7 @@ ทำไมธุรกรรมของฉันถึงไม่ได้รับการยืนยัน? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9872,7 +10567,7 @@ คำถามเพิ่มเติมอื่นๆ src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9881,7 +10576,7 @@ วิจัย src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9890,7 +10585,7 @@ เครือข่าย src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9899,7 +10594,7 @@ เครื่องมือสำรวจ Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9908,7 +10603,7 @@ สำรวจ Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9917,7 +10612,7 @@ ตัวสำรวจ Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9926,7 +10621,7 @@ เครื่องมือสำรวจ Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9935,7 +10630,7 @@ เครื่องมือสำรวจ Liquid Testnet src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9944,7 +10639,7 @@ เครื่องมือสำรวจ Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9953,7 +10648,7 @@ เครื่องมือ src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9962,7 +10657,7 @@ นาฬิกา (การขุด) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9971,7 +10666,7 @@ ถูกกฎหมาย src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9980,7 +10675,7 @@ เงื่อนไขการให้บริการ src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -9990,7 +10685,7 @@ นโยบายความเป็นส่วนตัว src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10000,7 +10695,7 @@ นโยบายเครื่องหมายการค้า src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10010,13 +10705,13 @@ ใบอนุญาตของบุคคลที่สาม src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10040,21 +10735,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 ยังไม่เสร็จสมบูรณ์ และอาจถูกรีเซ็ตเวลาไหนก็ได้ - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment กลุ่มธุรกรรม src/app/shared/filters.utils.ts - 108 + 110 @@ -10062,7 +10748,7 @@ ประเภทแอดเดรส src/app/shared/filters.utils.ts - 119 + 121 @@ -10070,7 +10756,7 @@ พฤติกรรม src/app/shared/filters.utils.ts - 120 + 122 @@ -10078,7 +10764,7 @@ Heuristics src/app/shared/filters.utils.ts - 122 + 124 @@ -10086,7 +10772,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10214,7 +10900,7 @@ Multisig จาก src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.tr.xlf b/frontend/src/locale/messages.tr.xlf index 7912e34ee..55b9536a1 100644 --- a/frontend/src/locale/messages.tr.xlf +++ b/frontend/src/locale/messages.tr.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Kurumsal sponsorlar src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Balina Sponsorlar src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad Sponsorlar src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Orijinal Sponsorlar ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Topluluk İntegrasyonları src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Topluluk İşbirlikleri src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Proje Çeviricileri src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Proje Destekçileri src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Proje Üyeleri src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Projeyi ayakta tutanlar src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Pardon, bir şeyler yanlış gitti. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Bu işlemi hızlandıramıyoruz. Daha sonra tekrar deneyiniz. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Kapat src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Senin İşlemin src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Artı onaylanmamış üst işlem(ler) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Sanal Boyut src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Bu işlemin vbyte boyutu (onaylanmamış üst işlemler dahil) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Bant içi ücretler src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Bu işlem için ödenmiş ücretler (onaylanmamış üst işlemler dahil) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Ne kadar daha hızlı? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ İlk onaya kadar geçen bekleme süresini kadar azaltacak. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ Özet src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ Bir sonraki blok fiyatı src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ Gereken tahmini ekstra ücret src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ Hedef ücret src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ Gerekli ekstra ücret src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool Accelerator™ ücretleri + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ Hızlandırma Servis Ücreti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ İşlem Boyutu Ek Ücreti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ Tahmini hızlandırma ücreti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ Maksimum hızlandırma ücreti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ Hızlandırma maliyeti src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ Kullanılabilir miktar src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ Geri dön src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ Bitcoin işlemini hızlandır? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ Bekle src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ Konfirmasyon bekleniyor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ Konfirmasyonun yakın zamanda gerçekleşmesi beklenmiyor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ Kadar ekstra karşılığında src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ Beklenen onaylama zamanı azaltılıyor. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - İşlem idleri .. olan işlemler için mempool.space yapılan hızlandırma ücreti + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ Hesabın ödemen günün üstünde olmayacak src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ Öde src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ Faturanın yüklenmesi başarısız oldu src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ Fatura yükleniyor... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - Veya + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ Ödemeni onayla src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ Toplam ekstra ücret src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ ile src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ Ödeme metodu yükleniyor... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ Ödemen onaylanıyor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ Ödemeni işliyoruz... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ İşlemin hızlandırılıyor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ Hızlandırma işlemin madencilik partnerlerimizce onaylanıyor... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...özür dileriz, beklediğimizden uzun sürüyor... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ İşlemin hızlandırılıyor! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Hızlandırma isteğin maden havuzu partnerlerimizce kabul edildi. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Ücretler hesaplanıyor... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ özelleştir src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ ~ sat/vB ücrete hızlandırılıyor src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ Hızlandır src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ İşleminin, madencilerin % 'ü tarafında önceliklendirilecek src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Sonraki Blok @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Hızlandırma ücretleri @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ Bu zaman aralığı için hızlandırılmış işlem bulunmamakta src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ Blok: için src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ Yaklaşık olarak blok:   src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ Başarısız oldu src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ Aktif hızlandırma bulunmuyor src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ Yakın zamanlı hızlndırma bulunmuyor src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + hepsi + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Daha fazlasını gör » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ hızlandırılmıyor src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ Cari toplam src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ Adres: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ adres için Mempool işlemlerini, gerçekleşen işlemler ve daha fazlasını görüntüle. src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Bakiye Geçmişi src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - hepsi - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent yakın zamanda src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction işlemin 'i src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ işlemin 'i src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ Adres verisi yüklenirken hata oluştu. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ Bu adres üzerindeki işlem sayısı arka arayüzününüzün işleyemeyeceği kadar fazla. Daha kuvvetli bir arkayüz için 'ye bakın. . Ya da bu adresi resmi Mempool sitesinde görüntüleyin: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ Onaylanan balans src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ Onaylanan UTXO'lar src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ Bekleyen UTXO'lar src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ Tip src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Varlık @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Liquid ağındaki L-BTC, L-Cad, USDT gibi diğer bütün varlıkları görüntüle. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Eşleşti src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ Herhangi src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ Renk tonu src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ Klasik src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ Yaşı src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ Müsait değil src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ Tarayıcın bu özelliği desteklemiyor src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Çelişki src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ Beklenen src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ Aktüel src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ Beklenen blok src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ Gerçekleşen blok src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ Versiyon src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ Bit src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ Merkle kökü src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ Zorluk src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ Block Başlığı Hex'i src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ Denetleme src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ Detaylar src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ Blok datası yüklenirken hata oluştu. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ Blok neden boş? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ Hızlandırma ücretleri bant-dışında ödendi src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ Bloklar src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ Yükseklik src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ Ödüller src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ İşlem Ücretleri src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ İşlemler src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ En güncel Liquid blokları için blok yüksekliği, blok büyüklüğü vb temel dataları gör. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ En güncel Bitcoin blokları için blok yüksekliği, blok büyüklüğü vb temel dataları gör. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ Kopyalandı! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X zaman çizelgesi src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ Birleştirme src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ Veri src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ Miktar (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ Testnet4 Coinleri talep et src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - Hashrate + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Hashrate src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ Bitcoin ağı için hashrate ve zorluk seviyelerinin değişimini zaman içinde gör. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ Hashrate (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - Panel - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Grafikler - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Dökümentasyon - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Dust-dışı süre aşımına uğrayanlar @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ bloklar src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ Peg çıkışı işleniyor... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - Federasyonun tuttuğu BTC miktarının toplam L-BTC'nin %95'inin altına düşme sayısı + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - Dolaşımdaki L-BTC miktarı + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - Madencilik Paneli - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning tarayıcı - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - Musluk - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. İşlemler için mempool istatistiklerini göster: ücret aralığı, toplam büyüklük, ve fazlasını gör. Mempool blokları, ağa yeni işlem geldiğinde anlık olarak güncellenir. @@ -5774,15 +5881,15 @@ Giriş Yap src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + Madencilik Paneli + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Anlık olarak hashrate, zorluk seviyesi, blok ödülleri, havuz dominasyonu vb madencilik istatistiklerini görüntüle. @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Havuz Şansı (1 hafta) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ Tüm madenciler src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks bloklar - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ Diğer () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ Madencilik havuzu istatistiklerini : en son bulunan bloklar, hashrate'in zaman içindeki değişimi, bugüne kadarki toplam ödül miktarı, bilinen Coinbase adresleri vb gör. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ Coinbase etiketi src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Havuz datası yüklenirken hata oluştu. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ Yetersiz Data src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ Havuz Dominasyonu src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + Raw-işlem datalarının virgül ile ayrık gösterimi + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + Maksimum ücret seviyesi (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + İzin? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Red sebebi + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction İşlemi Yayınla src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ İşlem hashini kullanarak, işlemi ağına yayınla. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool vByte (sat/vByte) görünümü @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV görünümü - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Filtre src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ Ters çevir src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ Saniye başı vBytes (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ Sınır dışı değerler src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Grafikler + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Mempool büyüklüğünün (MvB olarak) ve saniyedeki işlem sayısının (vB/s) zaman içindeki değişimini görselleştir. @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Bitcoin bloklarını ve mempool yoğunluğunu televizyon formatına uygun olarak doğru zamanlı gör + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Test işlemleri src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,370 +7100,10 @@ Çıplak hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - Raw-işlem datalarının virgül ile ayrık gösterimi - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - Maksimum ücret seviyesi (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - İzin? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Red sebebi - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Hemen - - src/app/components/time/time.component.ts - 107 - - - - Just now - Az önce - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - önce - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Yaklaşık - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - ~ içinde - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - sonrası - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - önce - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Gönderildi @@ -7090,11 +7141,11 @@ Tahmini Varış Süresi src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7104,11 +7155,11 @@ Yakında değil src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7118,7 +7169,7 @@ Onaylandığı blok src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7127,7 +7178,7 @@ Blok yüksekliği src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7136,7 +7187,7 @@ İşlemin hızlandırıldı src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7145,7 +7196,7 @@ İşleminizin mempool'da gözükemsini bekliyoruz. src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7154,7 +7205,7 @@ İşleminiz mempool'da yalnız yakın zamanda onaylanması beklenmiyor. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7163,7 +7214,7 @@ İşleminizin mempool'un üst kademesinde, yakında onaylanması bekleniyor. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7172,7 +7223,7 @@ İşleminizin bir sonraki blokta onaylanması bekleniyor. src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7181,7 +7232,7 @@ İşlemin onaylandı src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7190,16 +7241,29 @@ İşlemin yeni versiyon ile değiştirildi src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + İşlem datası yüklenirken hata oluştu. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Daha fazla detay gör src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7212,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7228,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Azalan - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7274,18 +7326,398 @@ Ancestor Ata - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + Özellikler + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + Bu işlemin gerçekleşmesi beklene blok + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + Beklenen blok + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + Bu işlem kazılma öncesi işlem havuzunda görülmüştü + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + İşlem Havuzunda Görüldü + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + Bu işlem kazılma öncesi işlem havuzunda görülmemişti + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + İşlem Havuzunda görülmedi + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + Bu işlem bant-dışı işlemlere eklenmiş olabillir. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + Bu işlem bant-dışı olarak önceliklendirilmiş olabilir + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + Bu işlem mempooldaki başka bir işlem ile çakışıyor olarak gözükmekte. + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Akış + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Diyagramı kapat + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Daha fazla göster + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Giriş ve Çıkışlar + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Diyagramı göster + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Ayarlanmış vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Kilit Süresi + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator Hızlandırıcıyı sakla src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7294,7 +7726,7 @@ RBF zaman çizelgesi src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7304,109 +7736,17 @@ Hızlandırma zaman çizelgesi src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - Akış - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Diyagramı kapat - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Daha fazla göster - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Giriş ve Çıkışlar - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Diyagramı göster - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Ayarlanmış vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Kilit Süresi - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. İşlem bulunamadı. src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7415,127 +7755,24 @@ Mempool'a dahil olmayı bekliyor. src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - İşlem datası yüklenirken hata oluştu. + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - Özellikler - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - Bu işlemin gerçekleşmesi beklene blok - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - Beklenen blok - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - Bu işlem kazılma öncesi işlem havuzunda görülmüştü - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - İşlem Havuzunda Görüldü - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - Bu işlem kazılma öncesi işlem havuzunda görülmemişti - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - İşlem Havuzunda görülmedi - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - Bu işlem bant-dışı işlemlere eklenmiş olabillir. - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - Bu işlem bant-dışı olarak önceliklendirilmiş olabilir - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - Bu işlem mempooldaki başka bir işlem ile çakışıyor olarak gözükmekte. - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (Yeni Kazınmış Koinler) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7544,16 +7781,24 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7563,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7573,7 +7818,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7582,16 +7827,24 @@ P2SH alım scripti src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7600,7 +7853,7 @@ P2WSH tanık scripti src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7609,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7618,7 +7871,7 @@ Önceki çıkış scripti src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7627,7 +7880,7 @@ Önceki çıkış tipi src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7636,7 +7889,7 @@ 'ye çıkar src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7645,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7655,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7665,10 +7918,42 @@ Ücret datasının için daha çok girdi göster src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs başka girdiler @@ -7899,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid Federasyon Varlıkları @@ -7925,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - BTC varlıklarına karşılık olan L-BTC arzı + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7980,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7995,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Varsayılan ileti: action: 'want', data: ['blocks', ...] iletmek istediğini belirt. Kullanılabilir alanlar: blocks, mempool-blocks, live-2h-chart ve stats. Takip eden adresle ilişkili işlemleri ileterek: 'track-address': '3PbJ...bF9B' bu adresi içeren bütün giriş ve çıkış işlemlerini al. İşlemleri sırala. Yeni mempool işlemleri içinaddress-transactions ve yeni onaylı blok işlemleri için block-transcations kullan. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Örnek kod @@ -8050,6 +8379,15 @@ API Docs API response + + Documentation + Dökümentasyon + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ SSS @@ -8444,7 +8782,7 @@ Lightning Kanalı için genel bakış sağlar. Kanal kapasitesi, bağlantılı Lightning nodeları, alakalı zincir üstü işlemler vb veriler. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9067,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning tarayıcı + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Lightning Network için istatistikleri getir. ( toplam kapasite, bağlantılar vb), Ligthning nodeları (kanallar, likidite) ve Lightning kanalları (durum, ücretler vb) @@ -9182,7 +9532,7 @@ adındaki Lightning ağı nodu için genel bakış. Kanalları, kapasiteyi, lokasyonu, ücret bilgileri ve daha fazlasını gör. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9689,7 +10039,7 @@ ISP üzerindeki Lightning Node'ları: [AS] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,7 +10051,7 @@ ISP [AS] kulanan bütün Lightning nodelarını ve onların toplam node sayısı, toplam kapasites vb görüntüle. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9809,6 +10159,338 @@ 71 + + Immediately + Hemen + + src/app/services/time.service.ts + 71 + + + + Just now + Az önce + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + önce + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Yaklaşık + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + ~ içinde + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + sonrası + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + önce + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee ücret @@ -9845,6 +10527,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation onay @@ -9904,11 +10594,11 @@ Benim Hesabım src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9917,7 +10607,7 @@ Keşfet src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9926,7 +10616,7 @@ Test işlemi src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9936,7 +10626,7 @@ Node'umuza bağlan src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9945,7 +10635,7 @@ API Dokümentasyonu src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9954,7 +10644,7 @@ Öğren src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9963,7 +10653,7 @@ İşlem havuzu nedir? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9972,7 +10662,7 @@ Blok tarayıcısı nedir? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9981,7 +10671,7 @@ İşlem havuzu tarayıcısı nedir? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9990,7 +10680,7 @@ İşlemim neden onaylanmıyor? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9999,7 +10689,7 @@ Daha fazla SSS » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10008,7 +10698,7 @@ Araştırma src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10017,7 +10707,7 @@ Ağlar src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10026,7 +10716,7 @@ Ana-ağ Tarayıcı src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10035,7 +10725,7 @@ Testnet3 Tarayıcı src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10044,7 +10734,7 @@ Testnet 4 Tarayıcı src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10053,7 +10743,7 @@ Signet Tarayıcı src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10062,7 +10752,7 @@ Liquid Test-ağı Tarayıcısı src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10071,7 +10761,7 @@ Liquid Tarayıcısı src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10080,7 +10770,7 @@ Araçlar src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10089,7 +10779,7 @@ Saat (Kazılan) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10098,7 +10788,7 @@ Hukuksal src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10107,7 +10797,7 @@ Hizmet Koşulları src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10117,7 +10807,7 @@ Gizlilik politikası src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10127,7 +10817,7 @@ Marka Politikası src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10137,14 +10827,13 @@ 3. Parti Lisanlar src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Balansınız çok düşük. lütfen hesabınıza ekleme yapınız . + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10169,21 +10858,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet 4 daha finalize olmadı, her an resetlenebilir. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Toplu ödeme src/app/shared/filters.utils.ts - 108 + 110 @@ -10191,7 +10871,7 @@ Adres Tipleri src/app/shared/filters.utils.ts - 119 + 121 @@ -10199,7 +10879,7 @@ Davranış src/app/shared/filters.utils.ts - 120 + 122 @@ -10207,7 +10887,7 @@ Keşifsel src/app/shared/filters.utils.ts - 122 + 124 @@ -10215,7 +10895,7 @@ Sighash Bayrakları src/app/shared/filters.utils.ts - 123 + 125 @@ -10343,7 +11023,7 @@ Çoklu imza / src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.uk.xlf b/frontend/src/locale/messages.uk.xlf index 44555c868..613458162 100644 --- a/frontend/src/locale/messages.uk.xlf +++ b/frontend/src/locale/messages.uk.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Підприємства-спонсори 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Спонсори-кити src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Спонсори-гігачади src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ Перші спонсори ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ Інтеграції спільноти src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ Союзи спільноти src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ Перекладачі проекту src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ Учасники проекту src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ Члени проекту src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ Розробники проекту src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ Вибачте, щось пішло не так! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ Нам не вдалось пришвидшити цю транзакцію. Будь ласка, спробуйте пізніше. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ Закрити src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ Ваша транзакція src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ Та непідтверджений предок(-ки) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ Віртуальний розмір src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ Розмір у vbyte цієї транзакції (включно з непідтвердженими предками) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ Мережеві комісії src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ sats src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ Комісії для цієї транзакції вже були оплачені (включно з непідтвердженими предками) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ Наскільки швидше? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -647,7 +715,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -656,7 +724,7 @@ Підсумок src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -665,7 +733,7 @@ Ринковий курс комісії наступного блоку src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -674,11 +742,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -696,7 +764,7 @@ Орієнтовна необхідна додаткова комісія src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -704,7 +772,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -712,16 +780,15 @@ Extra fee required src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Комісії Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -730,7 +797,7 @@ Комісія сервісу пришвидшення src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -739,7 +806,7 @@ Комісія за розмір транзакції src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -748,7 +815,7 @@ Орієнтовна вартість пришвидшення src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -757,7 +824,7 @@ Максимальна вартість пришвидшення src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -765,7 +832,7 @@ Acceleration cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -774,7 +841,7 @@ Доступний баланс src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -783,15 +850,15 @@ Назад src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -799,7 +866,7 @@ Accelerate your Bitcoin transaction? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -807,7 +874,7 @@ Wait src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -815,11 +882,11 @@ Confirmation expected src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -827,7 +894,7 @@ Confirmation not expected any time soon src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -835,7 +902,7 @@ For an additional src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -843,19 +910,19 @@ Reducing expected confirmation time to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -863,7 +930,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -871,19 +938,19 @@ Pay src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -892,7 +959,7 @@ Failed to load invoice src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -900,15 +967,15 @@ Loading invoice... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -916,7 +983,7 @@ Confirm your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -924,7 +991,7 @@ Total additional cost src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -933,7 +1000,7 @@ з src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -941,7 +1008,7 @@ Loading payment method... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -949,7 +1016,7 @@ Confirming your payment src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -957,7 +1024,7 @@ We are processing your payment... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -965,7 +1032,7 @@ Accelerating your transaction src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -973,7 +1040,7 @@ Confirming your acceleration with our mining pool partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -981,7 +1048,7 @@ ...sorry, this is taking longer than expected... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -989,23 +1056,55 @@ Your transaction is being accelerated! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1013,7 +1112,7 @@ customize src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1021,7 +1120,7 @@ Accelerate to ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1030,15 +1129,11 @@ Пришвидшити src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1047,60 +1142,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Наступний блок @@ -1120,6 +1165,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1179,7 +1228,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1202,12 +1251,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1245,27 +1294,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1278,11 +1327,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1298,11 +1347,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1342,12 +1391,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1384,12 +1433,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1418,8 +1467,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1437,6 +1486,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Комісії за пришвидшення @@ -1446,7 +1507,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1459,7 +1520,7 @@ Немає пришвидшених транзакцій у цьому часовому діапазоні src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1467,7 +1528,7 @@ У блоці: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1487,7 +1548,7 @@ Біля блоку: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1560,6 +1621,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1652,12 +1717,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1726,11 +1795,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1747,7 +1816,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1767,7 +1836,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1776,7 +1845,7 @@ На даний момент немає активних пришвидшень src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1785,7 +1854,7 @@ Останнім часом пришвидшень не було src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1843,6 +1912,18 @@ mining.all-time + + all + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Дивитись більше » @@ -1850,6 +1931,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1884,10 +1969,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1910,7 +1991,7 @@ not accelerating src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1948,7 +2029,7 @@ Баланс src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1956,15 +2037,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2056,7 +2141,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2077,7 +2162,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2090,7 +2175,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2112,19 +2201,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2134,6 +2223,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2154,7 +2247,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2178,7 +2271,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2195,11 +2288,11 @@ Адреса: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2207,47 +2300,67 @@ Переглянути не підтверджені та підтверджені транзакції, баланс та більше для адреси . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Історія балансу src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2255,7 +2368,7 @@ of transactions src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2264,11 +2377,11 @@ Не вдалося завантажити дані про адресу. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2276,7 +2389,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2284,7 +2397,11 @@ Confirmed balance src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2292,7 +2409,11 @@ Confirmed UTXOs src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2300,7 +2421,7 @@ Pending UTXOs src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2309,18 +2430,27 @@ Тип src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Актив @@ -2528,10 +2658,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2551,11 +2677,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2571,11 +2697,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2583,7 +2709,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2609,8 +2735,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - Перегляньте всі активи випущені у мережі Liquid, такі як L-BTC, L-CAD, USDT, та інші. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2802,7 +2927,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2814,7 +2939,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2863,37 +2988,12 @@ Mempool Goggles™ tooltip - - beta - бета - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Обмін src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2906,7 +3006,7 @@ Будь-які src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2914,7 +3014,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2922,7 +3022,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2935,7 +3035,7 @@ Вік src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3001,15 +3101,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3017,7 +3117,7 @@ недоступно src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3026,7 +3126,7 @@ Ваш браузер не підтримує цю функцію. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3075,8 +3175,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3093,12 +3193,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3115,8 +3219,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3153,7 +3257,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3192,8 +3296,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3206,22 +3318,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Конфлікт src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3293,7 +3422,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3313,15 +3442,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3349,19 +3482,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3385,11 +3522,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3401,11 +3538,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3417,11 +3554,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3449,23 +3586,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3503,15 +3644,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3532,8 +3673,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3545,7 +3686,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3565,7 +3706,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3634,6 +3775,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3645,11 +3790,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3657,7 +3806,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3685,11 +3834,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3754,7 +3903,11 @@ Очікувалося src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3763,7 +3916,7 @@ Фактично src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3772,7 +3925,7 @@ Очікуваний блок src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3781,7 +3934,7 @@ Фактичний блок src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3790,11 +3943,15 @@ Версія src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3803,7 +3960,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3833,7 +3990,7 @@ Біти src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3842,7 +3999,7 @@ Корінь Меркле src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3851,7 +4008,7 @@ Складність src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3867,11 +4024,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3880,7 +4037,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3889,7 +4046,7 @@ Заголовок блоку в hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3898,11 +4055,11 @@ Аудит src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3912,23 +4069,31 @@ Деталі src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3957,7 +4122,7 @@ Error loading block data. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3966,7 +4131,7 @@ Чому цей блок пустий? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -3975,7 +4140,11 @@ Комісії за пришвидшення сплачуються поза мережею src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -3984,24 +4153,20 @@ Блоки src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4009,7 +4174,7 @@ Висота src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4021,11 +4186,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4038,11 +4207,11 @@ Нагорода src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4050,19 +4219,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4071,15 +4244,15 @@ Комісії src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4088,11 +4261,11 @@ Транзакцій src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4104,11 +4277,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4125,7 +4298,7 @@ Перегляньте останні блоки Liquid з їх базовими характеристиками, такими як висота, розмір та іншими. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4133,7 +4306,7 @@ Перегляньте останні блоки Біткоїна з їх базовими характеристиками, такими як висота, нагорода, розмір та іншими. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4145,7 +4318,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4154,7 +4327,7 @@ Скопійовано! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4387,7 +4560,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4410,6 +4583,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4418,13 +4599,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4433,7 +4618,7 @@ Консолідація src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4441,7 +4626,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4449,7 +4634,7 @@ Коджоїн src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4457,7 +4642,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4465,7 +4650,7 @@ Дані src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4473,7 +4658,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4779,7 +4964,7 @@ Amount (sats) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4787,7 +4972,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4953,7 +5138,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5068,24 +5253,28 @@ lightning.nodes-channels-world-map - - Hashrate - Хешрейт + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Хешрейт src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5097,11 +5286,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5110,7 +5299,7 @@ Перегляньте гешрейт та складність для мережі Біткоїн візуалізованої протягом часу. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5118,11 +5307,11 @@ Хешрейт (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5166,11 +5355,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5183,11 +5372,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5200,53 +5389,6 @@ master-page.layer2-networks-header - - Dashboard - Панель - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Графіки - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Документація - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired Прострочений не пил @@ -5280,6 +5422,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5397,7 +5543,7 @@ блоки src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5427,11 +5573,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5479,7 +5633,7 @@ Відв'язка триває... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5528,8 +5682,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5580,9 +5734,8 @@ 163 - - L-BTC in circulation - L-BTC в обігу + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5602,48 +5755,6 @@ shared.as-of-block - - Mining Dashboard - Панель майнінгу - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Lightning експлорер - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. Перегляньте статистику для транзакцій у мемпулі: діапазон комісій, агрегований розмір та більше. Мемпул блоки оновлюються у реальному часі із врахуванням нових транзакцій в мережі. @@ -5701,15 +5812,15 @@ Увійти src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5740,6 +5851,18 @@ dashboard.adjustments + + Mining Dashboard + Панель майнінгу + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. Отримуйте статистику в реальному часі про майнінг біткоїна, таку як гешрейт, коригування складності, нагороди за блок, домінування пулу та інші. @@ -5748,6 +5871,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Удача пулу (1 тиждень) @@ -5766,7 +5941,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5797,7 +5972,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5823,7 +5998,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5870,11 +6045,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5913,7 +6088,7 @@ Всі майнери src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5936,17 +6111,17 @@ blocks блоків - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5958,15 +6133,19 @@ Інше () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6011,11 +6190,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6024,11 +6203,11 @@ Перегляньте статистику майнінг пулу для : останні добуті блоки, гешрейт протягом часу, загальна кількість нагород за блок до сьогодні, відомі коїнбейс адреси та інше. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6047,20 +6226,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6071,6 +6274,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6082,11 +6289,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6099,11 +6306,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6116,11 +6323,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6147,19 +6354,47 @@ Тег коїнбейс src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6168,7 +6403,7 @@ Поки що не достатньо даних src/app/components/pool/pool.component.ts - 142 + 177 @@ -6176,11 +6411,11 @@ Домінування пулу src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6197,7 +6432,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6209,18 +6444,91 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Надіслати транзакцію src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6228,7 +6536,7 @@ Надіслати транзакцію до мережі використовуючи її геш. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6268,17 +6576,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6291,7 +6623,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6385,11 +6717,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6504,6 +6836,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Мемпул в vBytes (sat/vByte) @@ -6522,29 +6922,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV перегляд - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Фільтрувати src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6553,7 +6940,7 @@ Інвертувати src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6562,7 +6949,7 @@ vBytes за секунду транзакції (vB/s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6571,10 +6958,18 @@ Перевищення лімітів src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Графіки + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. Перегляньте розмір мемпулу (в MvB) та транзакції за секунду (в vB/s) візуалізовані протягом часу. @@ -6583,23 +6978,39 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - Перегляньте блоки біткоїну та заповнення мемпулу у реальному часі у форматі ідеальному для телевізора. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6612,365 +7023,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Негайно - - src/app/components/time/time.component.ts - 107 - - - - Just now - Щойно - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - тому - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Через ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Після - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - до - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent @@ -7006,11 +7062,11 @@ Орієнтовний час src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7019,11 +7075,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7032,7 +7088,7 @@ Confirmed at src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7040,7 +7096,7 @@ Block height src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7048,7 +7104,7 @@ Your transaction has been accelerated src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7056,7 +7112,7 @@ Waiting for your transaction to appear in the mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7064,7 +7120,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7072,7 +7128,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7080,7 +7136,7 @@ Your transaction is expected to confirm in the next block src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7089,7 +7145,7 @@ Ваша транзакція підтверджена! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7097,15 +7153,28 @@ Your transaction has been replaced by a newer version! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Сталася помилка при завантаженні даних транзакції. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7118,11 +7187,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7134,44 +7203,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Нащадок - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7180,163 +7237,18 @@ Ancestor Предок - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator - - src/app/components/transaction/transaction.component.html - 133 - - accelerator.hide - - - RBF Timeline - - src/app/components/transaction/transaction.component.html - 160 - - RBF Timeline - transaction.rbf-history - - - Acceleration Timeline - - src/app/components/transaction/transaction.component.html - 169 - - Acceleration Timeline - transaction.acceleration-timeline - - - Flow - Потік - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Сховати діаграму - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Показати більше - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Входи і Виходи - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Показати діаграму - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Корегований vsize - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Час блокування - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - Sigop - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - - - Transaction not found. - Транзакція не знайдена. - - src/app/components/transaction/transaction.component.html - 407 - - transaction.error.transaction-not-found - - - Waiting for it to appear in the mempool... - Чекаємо її появи в мемпулі... - - src/app/components/transaction/transaction.component.html - 408 - - transaction.error.waiting-for-it-to-appear - - - Error loading transaction data. - Сталася помилка при завантаженні даних транзакції. - - src/app/components/transaction/transaction.component.html - 414 - - transaction.error.loading-transaction-data - Features Властивості - src/app/components/transaction/transaction.component.html - 499 + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 src/app/lightning/node/node.component.html @@ -7344,17 +7256,38 @@ src/app/shared/filters.utils.ts - 118 + 120 Transaction features transaction.features + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + This transaction was projected to be included in the block Ця транзакція мала бути підтверджена у блоці - src/app/components/transaction/transaction.component.html - 522 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 Expected in block tooltip @@ -7362,8 +7295,8 @@ Expected in Block Очікується у блоці - src/app/components/transaction/transaction.component.html - 522 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 Expected in Block tx-features.tag.expected @@ -7372,8 +7305,8 @@ This transaction was seen in the mempool prior to mining Ця транзакція була помічена в мемпулі пере майнінгом - src/app/components/transaction/transaction.component.html - 524 + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 Seen in mempool tooltip @@ -7381,8 +7314,8 @@ Seen in Mempool Помічена в Mempool - src/app/components/transaction/transaction.component.html - 524 + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 Seen in Mempool tx-features.tag.seen @@ -7391,8 +7324,8 @@ This transaction was missing from our mempool prior to mining Цієї транзакції не було в нашому мемпулі перед майнінгом - src/app/components/transaction/transaction.component.html - 526 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 Not seen in mempool tooltip @@ -7400,8 +7333,8 @@ Not seen in Mempool Не помічена в Mempool - src/app/components/transaction/transaction.component.html - 526 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 Not seen in Mempool tx-features.tag.not-seen @@ -7410,8 +7343,8 @@ This transaction may have been added out-of-band Ця транзакція могла бути додана поза чергою - src/app/components/transaction/transaction.component.html - 529 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added transaction tooltip @@ -7419,8 +7352,8 @@ This transaction may have been prioritized out-of-band Ця транзакція могла бути пріоритетною поза чергою - src/app/components/transaction/transaction.component.html - 532 + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized transaction tooltip @@ -7428,17 +7361,326 @@ This transaction conflicted with another version in our mempool Ця транзакція конфліктує з іншою версією у нашому мемпулі - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict in mempool tooltip + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + Потік + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Сховати діаграму + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Показати більше + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Входи і Виходи + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Показати діаграму + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Корегований vsize + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Час блокування + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + Sigop + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + + + Transaction not found. + Транзакція не знайдена. + + src/app/components/transaction/transaction.component.html + 350 + + transaction.error.transaction-not-found + + + Waiting for it to appear in the mempool... + Чекаємо її появи в мемпулі... + + src/app/components/transaction/transaction.component.html + 351 + + transaction.error.waiting-for-it-to-appear + + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. + + src/app/components/transactions-list/transactions-list.component.html + 21 + + transaction.poison.warning + (Newly Generated Coins) (Нові монети) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7447,16 +7689,24 @@ Закріплення src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7466,7 +7716,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7476,7 +7726,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7485,16 +7735,24 @@ P2SH redeem скрипт src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7503,7 +7761,7 @@ P2WSH witness скрипт src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7512,7 +7770,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7521,7 +7779,7 @@ Скрипт попереднього виходу src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7530,7 +7788,7 @@ Тип попереднього виходу src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7539,7 +7797,7 @@ Розкріплення до src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7548,7 +7806,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7558,7 +7816,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7568,10 +7826,42 @@ Показати більше входів, щоб порахувати комісію src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs інші входи @@ -7802,6 +8092,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings На утриманні у федерації Liquid @@ -7828,9 +8176,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - Кількість L-BTC відносно BTC на утриманні + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7883,10 +8230,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7898,22 +8241,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Надсилання за замовчуванням за замовчуванням: action: 'want', data: ['blocks', ...] щоб вказати, що має бути надіслано. Доступно: blocks, mempool-blocks, live-2h-chart та stats.Надіслати транзакції пов'язані з адресою: 'track-address': '3PbJ...bF9B' щоб отримати всі нові транзакції які містять дану адресу у входах чи виходах. Повертає масив транзакцій. address-transactions для нових мемпул транзакцій та block-transactions для нових підтверджених транзакцій. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Приклад коду @@ -7953,6 +8287,15 @@ API Docs API response + + Documentation + Документація + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ ЧаПи @@ -8347,7 +8690,7 @@ Огляд Lightning каналу . Перегляньте ємність каналу, причетні Lightning вузли, пов'язані транзакції та інше. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8970,6 +9313,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Lightning експлорер + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Отримайте статистику для мережі Lightning (агрегована ємність, з'єднаність і т п), Lightning вузлів (канали, ліквідність і т п) та Lightning канали (статус, комісії і т п). @@ -9085,7 +9440,7 @@ Огляди вузлу Lightning мережі під назвою . Перегляньте канали, ємність, локації, статистику комісії та інше. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9592,7 +9947,7 @@ Lightning вузлів на ISP: [НА ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9604,7 +9959,7 @@ Перегляньте всі Lightning вузли мережі Біткоїн використовуючи [НА ] ISP та побачте агреговану статистику, таку як загальна кількість вузлів, загальна ємність та більше для ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9712,6 +10067,337 @@ 71 + + Immediately + Негайно + + src/app/services/time.service.ts + 71 + + + + Just now + Щойно + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + тому + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Через ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Після + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + до + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee комісія @@ -9746,6 +10432,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation підтвердження @@ -9805,11 +10499,11 @@ Мій акаунт src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9818,7 +10512,7 @@ Дослідити src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9826,7 +10520,7 @@ Test Transaction src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9836,7 +10530,7 @@ Під'єднатись до наших вузлів src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9845,7 +10539,7 @@ Документація API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9854,7 +10548,7 @@ Навчитись src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9863,7 +10557,7 @@ Що таке мемпул? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9872,7 +10566,7 @@ Що таке експлорер блоків? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9881,7 +10575,7 @@ Що таке експлорер мемпулу? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9890,7 +10584,7 @@ Чому моя транзакція не підтверджується? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9899,7 +10593,7 @@ Більше ЧаПів » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9907,7 +10601,7 @@ Research src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9916,7 +10610,7 @@ Мережі src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9925,7 +10619,7 @@ Mainnet експлорер src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9933,7 +10627,7 @@ Testnet3 Explorer src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9941,7 +10635,7 @@ Testnet4 Explorer src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9950,7 +10644,7 @@ Signet експлорер src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9959,7 +10653,7 @@ Liquid Testnet експлорер src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9968,7 +10662,7 @@ Liquid експлорер src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9977,7 +10671,7 @@ Інструменти src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9986,7 +10680,7 @@ Годинник (майнінг) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9995,7 +10689,7 @@ Юридичне src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10004,7 +10698,7 @@ Умови використання src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10014,7 +10708,7 @@ Політика конфіденційності src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10024,7 +10718,7 @@ Політика щодо торгових марок src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10034,13 +10728,13 @@ Ліцензії третіх сторін src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10064,19 +10758,11 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment src/app/shared/filters.utils.ts - 108 + 110 @@ -10084,7 +10770,7 @@ Типи адрес src/app/shared/filters.utils.ts - 119 + 121 @@ -10092,7 +10778,7 @@ Поведінка src/app/shared/filters.utils.ts - 120 + 122 @@ -10100,7 +10786,7 @@ Евристика src/app/shared/filters.utils.ts - 122 + 124 @@ -10108,7 +10794,7 @@ Sighash прапорці src/app/shared/filters.utils.ts - 123 + 125 @@ -10235,7 +10921,7 @@ Multisig of src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.vi.xlf b/frontend/src/locale/messages.vi.xlf index 709b0c1d6..b4a0eeee6 100644 --- a/frontend/src/locale/messages.vi.xlf +++ b/frontend/src/locale/messages.vi.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 Nhà tài trợ doanh nghiệp 🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ Nhà tài trợ Cá voi src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -323,7 +343,7 @@ Chad Sponsors src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -331,7 +351,7 @@ OG Sponsors ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -340,7 +360,7 @@ Tích hợp cộng đồng src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -349,7 +369,7 @@ Liên minh cộng đồng src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -358,7 +378,7 @@ Dịch giả của Dự án src/app/components/about/about.component.html - 367 + 395 about.translators @@ -367,7 +387,7 @@ Người đóng góp dự án src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -376,7 +396,7 @@ Thành viên Dự án src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -385,7 +405,7 @@ Người bảo trì dự án src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -396,14 +416,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -418,7 +430,7 @@ Rất tiếc, có lỗi xảy ra! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -427,7 +439,7 @@ Chúng tôi không thể tăng tốc giao dịch này. Vui lòng thử lại sau. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -436,11 +448,11 @@ Đóng src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -449,7 +461,7 @@ Giao dịch của bạn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -457,7 +469,7 @@ Plus unconfirmed ancestor(s) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -466,7 +478,7 @@ Kích thước ảo src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -477,12 +489,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -491,7 +507,7 @@ Size in vbytes of this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -499,7 +515,7 @@ In-band fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -508,55 +524,87 @@ satoshi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -566,6 +614,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -624,7 +692,7 @@ Fees already paid by this transaction (including unconfirmed ancestors) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -633,7 +701,7 @@ Nhanh hơn bao nhiêu? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -641,7 +709,7 @@ This will reduce your expected waiting time until the first confirmation to src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -650,7 +718,7 @@ Sơ lược src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -658,7 +726,7 @@ Next block market rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -667,11 +735,11 @@ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -689,7 +757,7 @@ Ước tính phí bổ sung cần thiết src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -697,7 +765,7 @@ Target rate src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -706,16 +774,15 @@ Phí tăng thêm cần có src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Phí Mempool Accelerator™ + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -724,7 +791,7 @@ Phí dịch vụ tăng tốc src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -732,7 +799,7 @@ Transaction Size Surcharge src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -741,7 +808,7 @@ Chi phí tăng tốc dự kiến src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -750,7 +817,7 @@ Chi phí tăng tốc tối đa src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -759,7 +826,7 @@ Chi phí tăng tốc src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -768,7 +835,7 @@ Số dư khả dụng src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -777,15 +844,15 @@ Quay lại src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -794,7 +861,7 @@ Tăng tốc giao dịch Bitcoin của bạn? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -803,7 +870,7 @@ Đợi src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -812,11 +879,11 @@ Dự kiến xác nhận src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -825,7 +892,7 @@ Không mong đợi xác nhận sớm src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -834,7 +901,7 @@ Để có thêm src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -843,20 +910,19 @@ Giảm thời gian xác nhận dự kiến xuống src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - Thanh toán cho mempool.space để tăng tốc txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -864,7 +930,7 @@ Your account will be debited no more than src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -873,19 +939,19 @@ Thanh toán src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -895,7 +961,7 @@ Không thể tải hoá đơn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -904,16 +970,15 @@ Đang tải hoá đơn... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - HOẶC + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -922,7 +987,7 @@ Xác nhận khoản thanh toán của bạn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -931,7 +996,7 @@ Tổng chi phí tăng thêm src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -940,7 +1005,7 @@ với src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -949,7 +1014,7 @@ Đang tải phương thức thanh toán... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -958,7 +1023,7 @@ Đang xác nhận thanh toán của bạn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -967,7 +1032,7 @@ Chúng tôi đang xử lí thanh toán của bạn... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -976,7 +1041,7 @@ Đang tăng tốc giao dịch của bạn src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -985,7 +1050,7 @@ Đang xác nhận tăng tốc của bạn với các đối tác mining pool của chúng tôi... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -994,7 +1059,7 @@ ...xin thứ lỗi vì lâu hơn dự kiến... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1003,25 +1068,57 @@ Giao dịch của bạn đang được tăng tốc! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. Giao dịch của bạn đã được chấp nhận tăng tốc bởi các đối tác mining pool của chúng tôi. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... Đang tính chi phí... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1030,7 +1127,7 @@ tuỳ chỉnh src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1039,7 +1136,7 @@ Tăng tốc đến ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1048,15 +1145,11 @@ Tăng tốc src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1065,60 +1158,10 @@ Your transaction will be prioritized by up to % of miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - sat - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block Khối tiếp theo @@ -1138,6 +1181,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1198,7 +1245,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1221,12 +1268,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1264,27 +1311,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1297,11 +1344,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1317,11 +1364,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1361,12 +1408,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1403,12 +1450,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1437,8 +1484,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1457,6 +1504,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees Phí Tăng tốc @@ -1466,7 +1525,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1479,7 +1538,7 @@ Không có giao dịch được tăng tốc cho khung thời gian này src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1487,7 +1546,7 @@ Tại khối: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1507,7 +1566,7 @@ Khoảng khối: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1579,6 +1638,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1673,12 +1736,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1746,11 +1813,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1767,7 +1834,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1787,7 +1854,7 @@ Failed src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1796,7 +1863,7 @@ Không có tăng tốc nào hiện có src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1805,7 +1872,7 @@ Không có tăng tốc nào gần đây src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1867,6 +1934,19 @@ mining.all-time + + all + tất cả + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » Xem thêm » @@ -1874,6 +1954,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1908,10 +1992,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1936,7 +2016,7 @@ không tăng tốc src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1974,7 +2054,7 @@ Số dư src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -1982,15 +2062,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2082,7 +2166,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2103,7 +2187,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2116,7 +2200,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2138,19 +2226,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2160,6 +2248,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2180,7 +2272,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2204,7 +2296,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2221,11 +2313,11 @@ Địa chỉ: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2233,50 +2325,69 @@ Xem giao dịch mempool, giao dịch đã xác nhận, số dư, v.v. cho địa chỉ . src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History Lịch sử Số dư src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - tất cả - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent gần đây src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction trên giao dịch src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2285,7 +2396,7 @@ trên giao dịch src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2294,11 +2405,11 @@ Lỗi khi tải dữ liệu địa chỉ. src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2306,7 +2417,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2315,7 +2426,11 @@ Số dư đã xác nhận src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2324,7 +2439,11 @@ UTXO đã xác nhận src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2333,7 +2452,7 @@ UTXO đang chờ src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2342,18 +2461,27 @@ Kiểu src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset Tài sản @@ -2560,10 +2688,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2583,11 +2707,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2603,11 +2727,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2615,7 +2739,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2641,7 +2765,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2835,7 +2959,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2847,7 +2971,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2899,37 +3023,12 @@ Mempool Goggles™ tooltip - - beta - bản beta - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match Khớp src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2942,7 +3041,7 @@ Bất kỳ src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2950,7 +3049,7 @@ Tint src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2958,7 +3057,7 @@ Classic src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2971,7 +3070,7 @@ Tuổi src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3035,15 +3134,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3051,7 +3150,7 @@ không có sẵn src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3060,7 +3159,7 @@ Trình duyệt của bạn không hỗ trợ tính năng này. src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3109,8 +3208,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3127,12 +3226,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3149,8 +3252,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3187,7 +3290,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3224,8 +3327,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3238,22 +3349,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict Xung đột src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3324,7 +3452,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3344,15 +3472,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3380,19 +3512,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3416,11 +3552,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3431,11 +3567,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3446,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3478,23 +3614,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3532,15 +3672,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3561,8 +3701,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3575,7 +3715,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3596,7 +3736,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3664,6 +3804,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3675,11 +3819,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3687,7 +3835,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3715,11 +3863,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3784,7 +3932,11 @@ Dự kiến src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3793,7 +3945,7 @@ Thực tế src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3802,7 +3954,7 @@ Khối dự kiến src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3811,7 +3963,7 @@ Khối thực tế src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3820,11 +3972,15 @@ Phiên bản src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3833,7 +3989,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3863,7 +4019,7 @@ Bits src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3872,7 +4028,7 @@ Merkle root src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3881,7 +4037,7 @@ Độ khó src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3897,11 +4053,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3910,7 +4066,7 @@ Nonce src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3919,7 +4075,7 @@ Khối tiêu đề Hex src/app/components/block/block.component.html - 300 + 307 block.header @@ -3928,11 +4084,11 @@ Kiểm tra src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3942,23 +4098,31 @@ Chi tiết src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -3988,7 +4152,7 @@ Lỗi tải dữ liệu khối. src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -3997,7 +4161,7 @@ Tại sao khối này trống? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4005,7 +4169,11 @@ Acceleration fees paid out-of-band src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4014,24 +4182,20 @@ Khối src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4039,7 +4203,7 @@ Chiều cao src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4051,11 +4215,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4068,11 +4236,11 @@ Phần thưởng src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4080,19 +4248,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4101,15 +4273,15 @@ Phí src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4118,11 +4290,11 @@ Các giao dịch src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4134,11 +4306,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4154,14 +4326,14 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4172,7 +4344,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4181,7 +4353,7 @@ Đã sao chép! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4412,7 +4584,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4435,6 +4607,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4443,13 +4623,17 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions X Timeline src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4457,7 +4641,7 @@ Consolidation src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4465,14 +4649,14 @@ src/app/shared/filters.utils.ts - 107 + 109 Coinjoin src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4480,7 +4664,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4488,7 +4672,7 @@ Dữ liệu src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4496,7 +4680,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4802,7 +4986,7 @@ Số lượng (sat) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4810,7 +4994,7 @@ Request Testnet4 Coins src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -4975,7 +5159,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5090,24 +5274,28 @@ lightning.nodes-channels-world-map - - Hashrate - Tỷ lệ băm + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + Tỷ lệ băm src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5119,11 +5307,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5132,7 +5320,7 @@ Xem tốc độ băm và độ khó của mạng Bitcoin được hiển thị theo thời gian. src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5140,11 +5328,11 @@ Tỷ lệ băm (MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5188,11 +5376,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5205,11 +5393,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5222,53 +5410,6 @@ master-page.layer2-networks-header - - Dashboard - bảng điều khiển - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - Đồ thị - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - Tài liệu - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired @@ -5300,6 +5441,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5412,7 +5557,7 @@ khối src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5441,11 +5586,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5490,7 +5643,7 @@ Peg out in progress... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5534,8 +5687,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5581,9 +5734,8 @@ 163 - - L-BTC in circulation - L-BTC đang lưu hành + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5602,48 +5754,6 @@ shared.as-of-block - - Mining Dashboard - Bảng điều khiển đào - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - Trình duyệt Lightning - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. @@ -5700,15 +5810,15 @@ Đăng nhập src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5739,6 +5849,18 @@ dashboard.adjustments + + Mining Dashboard + Bảng điều khiển đào + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. @@ -5746,6 +5868,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) Pools luck (1 tuần) @@ -5763,7 +5937,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5793,7 +5967,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5819,7 +5993,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5866,11 +6040,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5909,7 +6083,7 @@ Tất cả thợ đào src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -5932,17 +6106,17 @@ blocks khối - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -5954,15 +6128,19 @@ Khác () src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6007,11 +6185,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6019,11 +6197,11 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6042,20 +6220,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6066,6 +6268,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6077,11 +6283,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6094,11 +6300,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6111,11 +6317,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6141,20 +6347,48 @@ Thẻ Coinbase src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. Lỗi tải dữ liệu pool. src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6163,18 +6397,18 @@ Chưa đủ dữ liệu src/app/components/pool/pool.component.ts - 142 + 177 Pool Dominance src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6191,7 +6425,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6203,25 +6437,99 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + Lý do từ chối + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction Phát Giao dịch src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 Broadcast a transaction to the network using the transaction's hash. src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6259,17 +6567,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6282,7 +6614,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6376,11 +6708,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6495,6 +6827,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) Mempool theo vBytes (sat / vByte) @@ -6512,29 +6912,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - Giao diện TV - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter Lọc src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6543,7 +6930,7 @@ Đảo ngược src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6552,7 +6939,7 @@ Giao dịch vBytes mỗi giây (vB / s) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6560,10 +6947,18 @@ Cap outliers src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + Đồ thị + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. @@ -6571,23 +6966,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions Giao dịch Thử nghiệm src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6600,367 +7012,10 @@ Raw hex src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - Lý do từ chối - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - Ngay lập tức - - src/app/components/time/time.component.ts - 107 - - - - Just now - Vừa mới đây - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - trước - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - Trong ~ - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - trong vòng ~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - Sau - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - trước - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent Đã gửi @@ -6998,11 +7053,11 @@ Thời gian dự kiến src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7011,11 +7066,11 @@ Not any time soon src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7025,7 +7080,7 @@ Xác nhận tại src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7034,7 +7089,7 @@ Chiều cao khối src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7043,7 +7098,7 @@ Giao dịch của bạn đã được tăng tốc src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7052,7 +7107,7 @@ Đang chờ giao dịch của bạn xuất hiện trong mempool src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7061,7 +7116,7 @@ Giao dịch của bạn đã nằm trong mempool, nhưng sẽ chưa được xác nhận trong một lúc. src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7070,7 +7125,7 @@ Giao dịch của bạn ở gần đầu mempool và dự kiến sẽ sớm được xác nhận. src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7079,7 +7134,7 @@ Giao dịch của bạn dự kiến sẽ được xác nhận trong khối tiếp theo src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7088,7 +7143,7 @@ Giao dịch của bạn đã được xác nhận! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7097,16 +7152,29 @@ Giao dịch của bạn đã được thay thế bằng phiên bản mới hơn! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + Lỗi khi tải dữ liệu giao dịch. + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details Xem chi tiết src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7119,11 +7187,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7135,44 +7203,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant Descendant - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7181,162 +7237,18 @@ Ancestor Ancestor - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor - - Hide accelerator - - src/app/components/transaction/transaction.component.html - 133 - - accelerator.hide - - - RBF Timeline - - src/app/components/transaction/transaction.component.html - 160 - - RBF Timeline - transaction.rbf-history - - - Acceleration Timeline - - src/app/components/transaction/transaction.component.html - 169 - - Acceleration Timeline - transaction.acceleration-timeline - - - Flow - lưu lượng - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - Ẩn sơ đồ - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - Hiển thị nhiều hơn - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - Đầu vào & Đầu ra - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - Hiển thị sơ đồ - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - Vsize đã điều chỉnh - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - Thời gian khóa - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - - - Transaction not found. - Không tìm thấy giao dịch. - - src/app/components/transaction/transaction.component.html - 407 - - transaction.error.transaction-not-found - - - Waiting for it to appear in the mempool... - Đang đợi nó xuất hiện trong mempool ... - - src/app/components/transaction/transaction.component.html - 408 - - transaction.error.waiting-for-it-to-appear - - - Error loading transaction data. - Lỗi khi tải dữ liệu giao dịch. - - src/app/components/transaction/transaction.component.html - 414 - - transaction.error.loading-transaction-data - Features Tính năng - src/app/components/transaction/transaction.component.html - 499 + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 src/app/lightning/node/node.component.html @@ -7344,17 +7256,38 @@ src/app/shared/filters.utils.ts - 118 + 120 Transaction features transaction.features + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + This transaction was projected to be included in the block Giao dịch này dự kiến ​​​​sẽ được đưa vào khối - src/app/components/transaction/transaction.component.html - 522 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 Expected in block tooltip @@ -7362,8 +7295,8 @@ Expected in Block Dự kiến trong Khối - src/app/components/transaction/transaction.component.html - 522 + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 Expected in Block tx-features.tag.expected @@ -7372,8 +7305,8 @@ This transaction was seen in the mempool prior to mining Giao dịch này đã được nhìn thấy trong mempool trước khi đào - src/app/components/transaction/transaction.component.html - 524 + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 Seen in mempool tooltip @@ -7381,8 +7314,8 @@ Seen in Mempool Nhìn thấy trong Mempool - src/app/components/transaction/transaction.component.html - 524 + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 Seen in Mempool tx-features.tag.seen @@ -7391,8 +7324,8 @@ This transaction was missing from our mempool prior to mining Giao dịch này bị thiếu trong mempool của chúng tôi trước khi đào - src/app/components/transaction/transaction.component.html - 526 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 Not seen in mempool tooltip @@ -7400,8 +7333,8 @@ Not seen in Mempool Không thấy trong Mempool - src/app/components/transaction/transaction.component.html - 526 + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 Not seen in Mempool tx-features.tag.not-seen @@ -7409,33 +7342,341 @@ This transaction may have been added out-of-band - src/app/components/transaction/transaction.component.html - 529 + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added transaction tooltip This transaction may have been prioritized out-of-band - src/app/components/transaction/transaction.component.html - 532 + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized transaction tooltip This transaction conflicted with another version in our mempool - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict in mempool tooltip + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + lưu lượng + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + Ẩn sơ đồ + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + Hiển thị nhiều hơn + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + Đầu vào & Đầu ra + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + Hiển thị sơ đồ + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + Vsize đã điều chỉnh + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + Thời gian khóa + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + + + Hide accelerator + + src/app/components/transaction/transaction.component.html + 78 + + accelerator.hide + + + RBF Timeline + + src/app/components/transaction/transaction.component.html + 103 + + RBF Timeline + transaction.rbf-history + + + Acceleration Timeline + + src/app/components/transaction/transaction.component.html + 112 + + Acceleration Timeline + transaction.acceleration-timeline + + + Transaction not found. + Không tìm thấy giao dịch. + + src/app/components/transaction/transaction.component.html + 350 + + transaction.error.transaction-not-found + + + Waiting for it to appear in the mempool... + Đang đợi nó xuất hiện trong mempool ... + + src/app/components/transaction/transaction.component.html + 351 + + transaction.error.waiting-for-it-to-appear + + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. + + src/app/components/transactions-list/transactions-list.component.html + 21 + + transaction.poison.warning + (Newly Generated Coins) (Coin mới được tạo) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7444,16 +7685,24 @@ Cố định src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7463,7 +7712,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7473,7 +7722,7 @@ Chứng kiến src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7482,16 +7731,24 @@ Mã thu hồi P2SH src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR tapscript src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7500,7 +7757,7 @@ Mã chứng kiến P2WSH src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7509,7 +7766,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7518,7 +7775,7 @@ Mã đầu ra trước đó src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7527,7 +7784,7 @@ Loại đầu ra trước đó src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7536,7 +7793,7 @@ Peg-out tới src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7545,7 +7802,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7555,7 +7812,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7565,10 +7822,42 @@ Hiển thị thêm đầu vào để tiết lộ dữ liệu phí src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs các đầu vào khác @@ -7799,6 +8088,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings @@ -7823,8 +8170,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7876,10 +8223,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7891,22 +8234,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - Push mặc định: hành động: 'want', dữ liệu: ['blocks', ...] để thể hiện những gì bạn muốn đẩy. Có sẵn: khối , mempool-khối , live-2h-chart c195a641ez0c195ez0. Đẩy các giao dịch liên quan đến địa chỉ: 'track-address': '3PbJ ... bF9B' a0c95ez0 đầu vào để nhận các giao dịch đầu vào a0c95ez0 a0c95ez0 đó để nhận địa chỉ đầu vào là all95ez0. Trả về một mảng các giao dịch. địa chỉ-giao dịch cho các giao dịch mempool mới và giao dịch khối cho các giao dịch được xác nhận khối mới. - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example Ví dụ về mã @@ -7946,6 +8280,15 @@ API Docs API response + + Documentation + Tài liệu + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ FAQ @@ -8338,7 +8681,7 @@ Tổng quan về kênh Lightning . Xem dung lượng kênh, các nút Lightning, và các giao dịch trên chuỗi liên quan, v.v. src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -8960,6 +9303,18 @@ lightning.connectivity-ranking + + Lightning Explorer + Trình duyệt Lightning + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). Nhận số liệu thống kê về mạng Lightning (dung lượng tổng hợp, khả năng kết nối...), nút Lightning (kênh, thanh khoản...) và kênh Lightning (trạng thái, phí...). @@ -9075,7 +9430,7 @@ Tổng quan về nút mạng Lightning tên . Xem các kênh, dung lượng, vị trí, số liệu thống kê về phí, v.v. src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9582,7 +9937,7 @@ Nút lightning trên ISP: [AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9593,7 +9948,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9701,6 +10056,338 @@ 71 + + Immediately + Ngay lập tức + + src/app/services/time.service.ts + 71 + + + + Just now + Vừa mới đây + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + trước + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + Trong ~ + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + trong vòng ~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + Sau + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + trước + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee phí @@ -9736,6 +10423,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation xác nhận @@ -9794,11 +10489,11 @@ Tài khoản của tôi src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9807,7 +10502,7 @@ Khám phá src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9816,7 +10511,7 @@ Giao dịch Test src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9826,7 +10521,7 @@ Kết nối tới Nút của chúng tôi src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9835,7 +10530,7 @@ Tài liệu API src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9844,7 +10539,7 @@ Tìm hiểu src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9853,7 +10548,7 @@ Mempool là gì? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9862,7 +10557,7 @@ Trình duyệt khối là gì? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9871,7 +10566,7 @@ Trình duyệt mempool là gì? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9880,7 +10575,7 @@ Tại sao giao dịch của tôi chưa được xác nhận? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -9889,7 +10584,7 @@ Nhiều câu hỏi hơn » src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -9898,7 +10593,7 @@ Nghiên cứu src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -9907,7 +10602,7 @@ Mạng lưới src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -9916,7 +10611,7 @@ Trình duyệt Mainnet src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -9925,7 +10620,7 @@ Trình duyệt Testnet3 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -9934,7 +10629,7 @@ Trình duyệt Testnet4 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -9943,7 +10638,7 @@ Trình duyệt Signet src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -9952,7 +10647,7 @@ Trình duyệt Testnet Liquid src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -9961,7 +10656,7 @@ Trình duyệt Liquid src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -9970,7 +10665,7 @@ Công cụ src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -9978,7 +10673,7 @@ Clock (Mined) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -9987,7 +10682,7 @@ Pháp lý src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -9996,7 +10691,7 @@ Điều khoản Dịch vụ src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10006,7 +10701,7 @@ Chính sách Quyền riêng tư src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10016,7 +10711,7 @@ Chính sách Thương hiệu src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10026,14 +10721,13 @@ Giấy phêp Bên thứ ba src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - Số dư của bạn quá thấp.Vui lòng nạp thêm vào tài khoản. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10058,21 +10752,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 chưa được hoàn thiện và có thể được reset bất kỳ lúc nào. - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment Thanh toán hàng loạt src/app/shared/filters.utils.ts - 108 + 110 @@ -10080,7 +10765,7 @@ Các kiểu địa chỉ src/app/shared/filters.utils.ts - 119 + 121 @@ -10088,21 +10773,21 @@ Hành vi src/app/shared/filters.utils.ts - 120 + 122 Heuristics src/app/shared/filters.utils.ts - 122 + 124 Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10230,7 +10915,7 @@ Đa chữ ký trên src/app/shared/script.utils.ts - 168 + 172 diff --git a/frontend/src/locale/messages.zh.xlf b/frontend/src/locale/messages.zh.xlf index 045a890fb..63010040c 100644 --- a/frontend/src/locale/messages.zh.xlf +++ b/frontend/src/locale/messages.zh.xlf @@ -301,12 +301,32 @@ 14 + + Be your own explorer + + src/app/components/about/about.component.html + 15 + + + src/app/shared/components/global-footer/global-footer.component.html + 20 + + + src/app/shared/components/global-footer/global-footer.component.html + 64 + + + src/app/shared/components/global-footer/global-footer.component.html + 89 + + shared.be-your-own-explorer + Enterprise Sponsors 🚀 企业赞助商🚀 src/app/components/about/about.component.html - 40 + 41 about.sponsors.enterprise.withRocket @@ -315,7 +335,7 @@ 巨鲸赞助商 src/app/components/about/about.component.html - 200 + 228 about.sponsors.withHeart @@ -324,7 +344,7 @@ Chad 赞助商 src/app/components/about/about.component.html - 213 + 241 about.sponsors.withHeart @@ -333,7 +353,7 @@ OG 赞助商 ❤️ src/app/components/about/about.component.html - 226 + 254 about.sponsors.withHeart @@ -342,7 +362,7 @@ 社区整合 src/app/components/about/about.component.html - 237 + 265 about.community-integrations @@ -351,7 +371,7 @@ 社区联盟 src/app/components/about/about.component.html - 351 + 379 about.alliances @@ -360,7 +380,7 @@ 项目翻译者 src/app/components/about/about.component.html - 367 + 395 about.translators @@ -369,7 +389,7 @@ 项目贡献者 src/app/components/about/about.component.html - 381 + 409 about.contributors @@ -378,7 +398,7 @@ 项目成员 src/app/components/about/about.component.html - 393 + 421 about.project_members @@ -387,7 +407,7 @@ 项目维护者 src/app/components/about/about.component.html - 406 + 434 about.maintainers @@ -398,14 +418,6 @@ src/app/components/about/about.component.ts 49 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 85 - - - src/app/components/master-page/master-page.component.html - 111 - Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. @@ -420,7 +432,7 @@ 对不起,出了点问题! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 5 + 12 accelerator.sorry-error-title @@ -429,7 +441,7 @@ 我们无法加速此交易。请稍后重试。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 11 + 19 accelerator.error-failed-to-accelerate @@ -438,11 +450,11 @@ 关闭 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 18 + 26 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 551 + 602 close @@ -451,7 +463,7 @@ 你的交易 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 37 + 45 accelerator.your-transaction @@ -460,7 +472,7 @@ 加上 个未确认的祖先 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 41 + 49 accelerator.plus-unconfirmed-ancestors @@ -469,7 +481,7 @@ 虚拟大小 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 46 + 54 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -480,12 +492,16 @@ 25 - src/app/components/transaction/transaction.component.html - 79 + src/app/components/transaction/cpfp-info.component.html + 11 + + + src/app/components/transaction/transaction-raw.component.html + 171 src/app/components/transaction/transaction.component.html - 245 + 188 Transaction Virtual Size transaction.vsize @@ -495,7 +511,7 @@ 此交易的大小(以vbytes为单位)(包括未确认的祖先) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 51 + 59 accelerator.transaction-vbytes-size-description @@ -504,7 +520,7 @@ 带内费用 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 55 + 63 accelerator.in-band-fees @@ -513,55 +529,87 @@ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 57 + 65 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 90 + 98 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 123 + 131 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 145 + 153 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 163 + 171 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 175 + 183 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 193 + 201 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 215 + 223 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 231 + 239 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 561 + 612 + + + src/app/components/accelerate-checkout/accelerate-fee-graph.component.html + 15 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 24 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 29 + + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 31 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 36 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 44 + + + src/app/components/amount-selector/amount-selector.component.html + 4 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 43 src/app/components/calculator/calculator.component.html @@ -571,6 +619,26 @@ src/app/components/calculator/calculator.component.html 44 + + src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html + 22 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 216 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 + + + src/app/components/transaction/transaction-preview.component.html + 24 + + + src/app/components/transactions-list/transactions-list.component.html + 475 + src/app/lightning/channels-list/channels-list.component.html 63 @@ -630,7 +698,7 @@ 本次交易已支付的费用(包括未确认的祖先) src/app/components/accelerate-checkout/accelerate-checkout.component.html - 62 + 70 accelerator.fees-already-paid-description @@ -639,7 +707,7 @@ 快多少? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 71 + 79 accelerator.how-much-faster @@ -648,7 +716,7 @@ 这会将您预计的等待时间缩短至第一次确认 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 76,77 + 84,85 accelerator.time-estimate-description @@ -657,7 +725,7 @@ 总结 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 100 + 108 accelerator.summary-title @@ -666,7 +734,7 @@ 下一个区块市场利率 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 109 + 117 accelerator.next-block-rate @@ -675,11 +743,11 @@ 聪/字节 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 113 + 121 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 135 + 143 src/app/shared/components/fee-rate/fee-rate.component.html @@ -697,7 +765,7 @@ 预计需支付额外费用 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 117 + 125 accelerator.estimated-extra-fee-required @@ -706,7 +774,7 @@ 目标费率 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 131 + 139 accelerator.target-rate @@ -715,16 +783,15 @@ 需额外付费 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 139 + 147 accelerator.extra-fee-required - - Mempool Accelerator™ fees - Mempool 加速器™ 费用 + + Mempool Accelerator® fees src/app/components/accelerate-checkout/accelerate-checkout.component.html - 153 + 161 accelerator.mempool-accelerator-fees @@ -733,7 +800,7 @@ 加速器服务费 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 157 + 165 accelerator.service-fee @@ -742,7 +809,7 @@ 交易规模附加费 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 169 + 177 accelerator.tx-size-surcharge @@ -751,7 +818,7 @@ 预计加速花费 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 185 + 193 accelerator.estimated-cost @@ -760,7 +827,7 @@ 最大加速花费 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 204 + 212 accelerator.maximum-cost @@ -769,7 +836,7 @@ 加速成本 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 206 + 214 accelerator.cost @@ -778,7 +845,7 @@ 可用余额 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 226 + 234 accelerator.available-balance @@ -787,15 +854,15 @@ 返回 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 258 + 266 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 435 + 457 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 493 + 529 go-back @@ -804,7 +871,7 @@ 加速你的比特币交易? src/app/components/accelerate-checkout/accelerate-checkout.component.html - 273 + 281 accelerator.accelerate-your-transaction @@ -813,7 +880,7 @@ 等待 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 285 + 293 accelerator.wait @@ -822,11 +889,11 @@ 预计确认 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 287 + 295 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 559 + 610 accelerator.confirmation-expected @@ -835,7 +902,7 @@ 预计近期不会确认 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 290 + 298 accelerator.confirmation-not-expected-soon @@ -844,7 +911,7 @@ 额外费用 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 345 + 353 accelerator.for-an-additional-cost @@ -853,20 +920,19 @@ 缩短预期确认时间 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 351,352 + 359,360 accelerator.reducing-expected-confirmation-time - Payment to mempool.space for acceleration of txid .. - 向 mempool.space 付款以加速 txid .. + Payment to mempool.space for acceleration of txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 362,363 + 370,371 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 449 + 471 accelerator.payment-to-mempool-space @@ -875,7 +941,7 @@ 您的账户最多会被扣除 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 367 + 375 accelerator.your-account-will-be-debited @@ -884,19 +950,19 @@ 支付 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 378 + 386 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 400 + 411 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 460 + 482 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 590 + 641 Pay button label transaction.pay @@ -906,7 +972,7 @@ 无法加载发票 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 381 + 391 accelerator.failed-to-load-invoice @@ -915,16 +981,15 @@ 正在加载发票... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 386 + 397 accelerator.loading-invoice - - OR - 或者 + + OR src/app/components/accelerate-checkout/accelerate-checkout.component.html - 394 + 405 or @@ -933,7 +998,7 @@ 确认付款 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 442 + 464 accelerator.confirm-your-payment @@ -942,7 +1007,7 @@ 总额外费用 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 458 + 480 accelerator.total-additional-cost @@ -951,7 +1016,7 @@ src/app/components/accelerate-checkout/accelerate-checkout.component.html - 462 + 484 accelerator.pay-with @@ -960,7 +1025,7 @@ 正在加载付款方式... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 482 + 513 accelerator.loading-payment-method @@ -969,7 +1034,7 @@ 确认付款 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 500 + 536 accelerator.confirming-your-payment @@ -978,7 +1043,7 @@ 我们正在处理您的付款... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 510 + 546 accelerator.payment-processing @@ -987,7 +1052,7 @@ 正在加速您的交易 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 520 + 556 accelerator.accelerating-your-transaction @@ -996,7 +1061,7 @@ 与我们的采矿池合作伙伴确认您的加速... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 527 + 563 accelerator.confirming-acceleration-with-miners @@ -1005,7 +1070,7 @@ ...对不起,时间比预计的要长. src/app/components/accelerate-checkout/accelerate-checkout.component.html - 529 + 565 accelerator.confirming-acceleration-with-miners @@ -1014,25 +1079,57 @@ 您的交易正在加速中! src/app/components/accelerate-checkout/accelerate-checkout.component.html - 538 + 576 accelerator.success-message + + Transaction is already being accelerated! + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 578 + + accelerator.success-message-third-party + Your transaction has been accepted for acceleration by our mining pool partners. 您的交易已被我们的矿池合作伙伴接受并加速。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 544 + 587 accelerator.confirmed-acceleration-with-miners + + Transaction has already been accepted for acceleration by our mining pool partners. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 589 + + accelerator.confirmed-acceleration-with-miners-third-party + + + Get a receipt. + + src/app/components/accelerate-checkout/accelerate-checkout.component.html + 594 + + + src/app/components/tracker/tracker.component.html + 146 + + + src/app/components/tracker/tracker.component.html + 180 + + accelerator.receipt-label + Calculating cost... 正在计算成本... src/app/components/accelerate-checkout/accelerate-checkout.component.html - 563 + 614 accelerator.calculating-cost @@ -1041,7 +1138,7 @@ 定制 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 569 + 620 accelerator.customize @@ -1050,7 +1147,7 @@ 加速至~聪/字节 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 572 + 623 accelerator.accelerate-to-x @@ -1059,15 +1156,11 @@ 加速 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 578 + 629 - src/app/components/transaction/transaction.component.html - 558 - - - src/app/components/transaction/transaction.component.html - 567 + src/app/components/transaction/transaction-details/transaction-details.component.html + 172 Accelerate button label transaction.accelerate @@ -1077,60 +1170,10 @@ 您的交易将获得最多%名矿工的优先处理。 src/app/components/accelerate-checkout/accelerate-checkout.component.html - 600 + 651 accelerator.hashrate-percentage-description - - sat - - - src/app/components/accelerate-checkout/accelerate-fee-graph.component.html - 15 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 24 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 29 - - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 31 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 36 - - - src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 44 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 43 - - - src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html - 22 - - - src/app/components/transaction/transaction-preview.component.html - 24 - - - src/app/components/transaction/transaction.component.html - 609 - - - src/app/components/transactions-list/transactions-list.component.html - 324 - - sat - shared.sat - Next Block 下一个区块 @@ -1150,6 +1193,10 @@ src/app/components/mempool-block/mempool-block.component.ts 87 + + src/app/components/pool/pool.component.html + 178 + src/app/components/tracker/tracker-bar.component.html 8 @@ -1210,7 +1257,7 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 64 + 66 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -1233,12 +1280,12 @@ 59 - src/app/components/transaction/transaction.component.html - 483 + src/app/components/transaction/transaction-details/transaction-details.component.html + 90 - src/app/components/transaction/transaction.component.html - 488 + src/app/components/transaction/transaction-details/transaction-details.component.html + 95 src/app/lightning/node/node.component.html @@ -1276,27 +1323,27 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 90 + 92 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 94 + 96 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 80 + 89 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 88 + 97 - src/app/components/transaction/transaction.component.html - 594 + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 src/app/shared/filters.utils.ts - 99 + 100 transaction.audit.accelerated @@ -1309,11 +1356,11 @@ src/app/components/acceleration-timeline/acceleration-timeline.component.html - 31 + 34 src/app/components/acceleration-timeline/acceleration-timeline.component.html - 123 + 125 src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -1329,11 +1376,11 @@ src/app/components/pool/pool.component.html - 183 + 305 src/app/components/pool/pool.component.html - 245 + 367 src/app/components/rbf-list/rbf-list.component.html @@ -1373,12 +1420,12 @@ 21 - src/app/components/transaction/transaction-preview.component.html - 24 + src/app/components/transaction/transaction-details/transaction-details.component.html + 215 - src/app/components/transaction/transaction.component.html - 608 + src/app/components/transaction/transaction-preview.component.html + 24 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -1416,12 +1463,12 @@ 46 - src/app/components/transaction/transaction.component.html - 81 + src/app/components/transaction/cpfp-info.component.html + 13 - src/app/components/transaction/transaction.component.html - 619 + src/app/components/transaction/transaction-details/transaction-details.component.html + 231 src/app/lightning/channel/channel-box/channel-box.component.html @@ -1450,8 +1497,8 @@ 53 - src/app/components/transaction/transaction.component.html - 638 + src/app/components/transaction/transaction-details/transaction-details.component.html + 250 Accelerated transaction fee rate transaction.accelerated-fee-rate @@ -1470,6 +1517,18 @@ Accelerated to hashrate transaction.accelerated-by-hashrate + + Canceled + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 32 + + + src/app/components/acceleration/accelerations-list/accelerations-list.component.html + 67 + + accelerator.canceled + Acceleration Fees 加速费 @@ -1479,7 +1538,7 @@ src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 77 + 79 src/app/components/graphs/graphs.component.html @@ -1492,7 +1551,7 @@ 此时间段内无加速交易 src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 133 + 135 @@ -1500,7 +1559,7 @@ 在区块: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 177 + 179 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1520,7 +1579,7 @@ 周围块: src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts - 179 + 181 src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1593,6 +1652,10 @@ src/app/components/acceleration/pending-stats/pending-stats.component.html 13 + + src/app/components/amount-selector/amount-selector.component.html + 3 + src/app/components/balance-widget/balance-widget.component.html 7 @@ -1687,12 +1750,16 @@ 193 - src/app/components/test-transactions/test-transactions.component.html - 24 + src/app/components/push-transaction/push-transaction.component.html + 40 - src/app/components/transaction/transaction.component.html - 78 + src/app/components/test-transactions/test-transactions.component.html + 27 + + + src/app/components/transaction/cpfp-info.component.html + 10 src/app/dashboard/dashboard.component.html @@ -1762,11 +1829,11 @@ src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/blocks-list/blocks-list.component.html - 14 + 17 src/app/components/pool-ranking/pool-ranking.component.html @@ -1783,7 +1850,7 @@ src/app/components/address/address.component.html - 252 + 280 src/app/components/tracker/tracker-bar.component.html @@ -1805,7 +1872,7 @@ 失败 src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 67 + 68 accelerator.canceled @@ -1814,7 +1881,7 @@ 没有活跃的交易加速 src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 133 + 134 accelerations.no-accelerations @@ -1823,7 +1890,7 @@ 最近没有加速 src/app/components/acceleration/accelerations-list/accelerations-list.component.html - 134 + 135 accelerations.no-accelerations @@ -1885,6 +1952,19 @@ mining.all-time + + all + 全部 + + src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html + 55 + + + src/app/components/address/address.component.html + 98 + + all + View more » 更多 » @@ -1892,6 +1972,10 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 91 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 337 + src/app/components/mining-dashboard/mining-dashboard.component.html 34 @@ -1926,10 +2010,6 @@ src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts 57 - - src/app/components/master-page/master-page.component.html - 87 - Accelerated to @@ -1955,7 +2035,7 @@ 没有加速 src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts - 86 + 99 @@ -1994,7 +2074,7 @@ 余额 src/app/components/address-graph/address-graph.component.ts - 56 + 61 src/app/components/address-graph/address-graph.component.ts @@ -2002,15 +2082,19 @@ src/app/components/address-graph/address-graph.component.ts - 282 + 229 src/app/components/address-graph/address-graph.component.ts - 349 + 310 src/app/components/address-graph/address-graph.component.ts - 424 + 382 + + + src/app/components/address-graph/address-graph.component.ts + 457 src/app/components/address/address-preview.component.html @@ -2102,7 +2186,7 @@ src/app/components/faucet/faucet.component.html - 67 + 80 src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.html @@ -2123,7 +2207,7 @@ src/app/components/address/address.component.html - 283 + 311 address.unconfidential @@ -2136,7 +2220,11 @@ src/app/components/address/address.component.html - 267 + 295 + + + src/app/components/wallet/wallet.component.html + 48 address.total-received @@ -2158,19 +2246,19 @@ src/app/components/block/block.component.html - 399 + 406 src/app/components/block/block.component.html - 431 + 438 src/app/components/block/block.component.html - 455 + 462 src/app/components/blocks-list/blocks-list.component.html - 24 + 27 src/app/components/clock/clock.component.html @@ -2180,6 +2268,10 @@ src/app/components/mempool-block/mempool-block.component.html 32 + + src/app/components/wallet/wallet.component.html + 80 + address.transactions @@ -2200,7 +2292,7 @@ src/app/components/address/address.component.html - 228 + 256 src/app/components/amount/amount.component.html @@ -2224,7 +2316,7 @@ src/app/components/transactions-list/transactions-list.component.html - 333 + 484 src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -2241,11 +2333,11 @@ 地址: src/app/components/address/address-preview.component.ts - 71 + 73 src/app/components/address/address.component.ts - 169 + 173 @@ -2253,50 +2345,69 @@ 查看 地址 的内存池交易、已确认交易、余额等。 src/app/components/address/address-preview.component.ts - 72 + 74 src/app/components/address/address.component.ts - 170 + 174 + + Taproot Tree + + src/app/components/address/address.component.html + 79 + + address.taproot-tree + Balance History 余额历史记录 src/app/components/address/address.component.html - 79 + 93 src/app/components/custom-dashboard/custom-dashboard.component.html 237 - address.balance-history - - - all - 全部 - src/app/components/address/address.component.html - 84 + src/app/components/custom-dashboard/custom-dashboard.component.html + 271 - all + + src/app/components/treasuries/treasuries.component.html + 63 + + + src/app/components/wallet/wallet.component.html + 65 + + address.balance-history recent 最近的 src/app/components/address/address.component.html - 87 + 101 recent + + Unspent Outputs + + src/app/components/address/address.component.html + 114 + + address.unspent-outputs + of transaction 笔交易,共 src/app/components/address/address.component.html - 101 + 129 X of X Address Transaction @@ -2305,7 +2416,7 @@ 笔交易,共 src/app/components/address/address.component.html - 102 + 130 X of X Address Transactions (Plural) @@ -2314,11 +2425,11 @@ 在加载地址数据时出错 src/app/components/address/address.component.html - 201 + 229 src/app/components/address/address.component.html - 218 + 246 address.error.loading-address-data @@ -2327,7 +2438,7 @@ 该地址上有太多交易,超出了您的后台处理能力。查看更多 有关建立更强大后台的信息. 请考虑在 Mempool 官方网站上查看此地址: src/app/components/address/address.component.html - 204,207 + 232,235 Electrum server limit exceeded error @@ -2336,7 +2447,11 @@ 已确认余额 src/app/components/address/address.component.html - 247 + 275 + + + src/app/components/wallet/wallet.component.html + 40 address.confirmed-balance @@ -2345,7 +2460,11 @@ 已确认的UTXO src/app/components/address/address.component.html - 257 + 285 + + + src/app/components/wallet/wallet.component.html + 44 address.confirmed-utxos @@ -2354,7 +2473,7 @@ 待处理的 UTXO src/app/components/address/address.component.html - 262 + 290 address.pending-utxos @@ -2363,18 +2482,27 @@ 类型 src/app/components/address/address.component.html - 272 + 300 - src/app/components/transaction/transaction.component.html - 77 + src/app/components/transaction/cpfp-info.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 296 + 447 address.type + + Fiat + + src/app/components/amount-selector/amount-selector.component.html + 5 + + Fiat + shared.fiat + Asset 资产 @@ -2582,10 +2710,6 @@ src/app/components/assets/assets.component.ts 44 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 79 - Assets page header @@ -2605,11 +2729,11 @@ src/app/components/block-filters/block-filters.component.html - 22 + 21 src/app/components/custom-dashboard/custom-dashboard.component.ts - 71 + 73 src/app/components/pool-ranking/pool-ranking.component.html @@ -2625,11 +2749,11 @@ src/app/components/pool/pool.component.html - 408 + 530 src/app/components/pool/pool.component.html - 433 + 555 src/app/components/rbf-list/rbf-list.component.html @@ -2637,7 +2761,7 @@ src/app/components/statistics/statistics.component.html - 60 + 57 src/app/dashboard/dashboard.component.ts @@ -2663,8 +2787,7 @@ Search Clear Button - Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. - 探索 Liquid 网络上发行的所有资产,如 L-BTC、L-CAD、USDT 等。 + Explore all the assets issued on the Liquid network like LBTC, L-CAD, USDT, and more. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2858,7 +2981,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 202 + 204 src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -2870,7 +2993,7 @@ src/app/components/pool/pool-preview.component.ts - 120 + 122 @@ -2923,37 +3046,12 @@ Mempool Goggles™ tooltip - - beta - 测试 - - src/app/components/block-filters/block-filters.component.html - 3 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 55 - - - src/app/components/master-page/master-page.component.html - 73 - - - src/app/components/master-page/master-page.component.html - 88 - - - src/app/shared/components/global-footer/global-footer.component.html - 82 - - beta - Match 匹配 src/app/components/block-filters/block-filters.component.html - 19 + 18 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -2966,7 +3064,7 @@ 任何 src/app/components/block-filters/block-filters.component.html - 25 + 24 mempool-goggles.any @@ -2975,7 +3073,7 @@ 色彩 src/app/components/block-filters/block-filters.component.html - 30 + 29 mempool-goggles.tint @@ -2984,7 +3082,7 @@ 经典 src/app/components/block-filters/block-filters.component.html - 33 + 32 src/app/components/theme-selector/theme-selector.component.html @@ -2997,7 +3095,7 @@ 年龄 src/app/components/block-filters/block-filters.component.html - 36 + 35 mempool-goggles.age @@ -3063,15 +3161,15 @@ src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/blocks-list/blocks-list.component.html - 17 + 20 src/app/components/pool/pool.component.html - 185 + 307 @@ -3079,7 +3177,7 @@ 不可用 src/app/components/block-overview-graph/block-overview-graph.component.html - 7 + 8 block.not-available @@ -3088,7 +3186,7 @@ 您的浏览器不支持此功能。 src/app/components/block-overview-graph/block-overview-graph.component.html - 21 + 23 webgl-disabled @@ -3137,8 +3235,8 @@ 10 - src/app/components/transaction/transaction.component.html - 469 + src/app/components/transaction/transaction-details/transaction-details.component.html + 76 src/app/shared/components/confirmations/confirmations.component.html @@ -3155,12 +3253,16 @@ 52 - src/app/components/test-transactions/test-transactions.component.html - 25 + src/app/components/push-transaction/push-transaction.component.html + 41 - src/app/components/transaction/transaction.component.html - 640 + src/app/components/test-transactions/test-transactions.component.html + 28 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 252 Effective transaction fee rate transaction.effective-fee-rate @@ -3177,8 +3279,8 @@ 29 - src/app/components/transaction/transaction.component.html - 80 + src/app/components/transaction/cpfp-info.component.html + 12 Transaction Weight transaction.weight @@ -3215,7 +3317,7 @@ src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 78 + 87 transaction.audit.marginal @@ -3254,8 +3356,16 @@ 76 - src/app/components/transaction/transaction.component.html - 529 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 79 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 84 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 Added tx-features.tag.added @@ -3268,22 +3378,39 @@ 77 - src/app/components/transaction/transaction.component.html - 532 + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 80 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 Prioritized tx-features.tag.prioritized + + Deprioritized + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 82 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 85 + + Deprioritized + tx-features.tag.prioritized + Conflict 冲突 src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 79 + 88 - src/app/components/transaction/transaction.component.html - 535 + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 Conflict tx-features.tag.conflict @@ -3355,7 +3482,7 @@ src/app/components/blocks-list/blocks-list.component.html - 25 + 28 src/app/components/clock/clock.component.html @@ -3375,15 +3502,19 @@ src/app/components/pool/pool.component.html - 189 + 311 src/app/components/pool/pool.component.html - 250 + 372 + + + src/app/components/transaction/transaction-raw.component.html + 164 src/app/components/transaction/transaction.component.html - 241 + 184 src/app/dashboard/dashboard.component.html @@ -3411,19 +3542,23 @@ src/app/components/block/block.component.html - 395 + 402 src/app/components/block/block.component.html - 422 + 429 src/app/components/block/block.component.html - 451 + 458 + + + src/app/components/transaction/transaction-raw.component.html + 186 src/app/components/transaction/transaction.component.html - 257 + 200 @@ -3447,11 +3582,11 @@ src/app/components/block/block-preview.component.ts - 102 + 104 src/app/components/block/block.component.ts - 260 + 262 @@ -3463,11 +3598,11 @@ src/app/components/block/block-preview.component.ts - 104 + 106 src/app/components/block/block.component.ts - 262 + 264 @@ -3479,11 +3614,11 @@ src/app/components/block/block-preview.component.ts - 106 + 108 src/app/components/block/block.component.ts - 264 + 266 @@ -3511,23 +3646,27 @@ src/app/components/blocks-list/blocks-list.component.html - 15 + 18 src/app/components/pool/pool.component.html - 182 + 192 src/app/components/pool/pool.component.html - 244 + 304 + + + src/app/components/pool/pool.component.html + 366 src/app/components/search-form/search-results/search-results.component.html 15 - src/app/components/transaction/transaction.component.html - 452 + src/app/components/transaction/transaction-details/transaction-details.component.html + 62 block.timestamp @@ -3565,15 +3704,15 @@ src/app/components/block/block.component.html - 389 + 396 src/app/components/block/block.component.html - 410 + 417 src/app/components/block/block.component.html - 447 + 454 src/app/components/mempool-block/mempool-block.component.html @@ -3594,8 +3733,8 @@ 182 - src/app/components/transaction/transaction.component.html - 678 + src/app/components/transaction/transaction-details/transaction-details.component.html + 290 block.miner @@ -3608,7 +3747,7 @@ src/app/components/block/block.component.html - 335 + 342 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3629,7 +3768,7 @@ src/app/components/block/block.component.html - 336 + 343 src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -3698,6 +3837,10 @@ src/app/components/block/block.component.html 44 + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 23 + block.hash @@ -3709,11 +3852,15 @@ src/app/components/blocks-list/blocks-list.component.html - 62 + 65 + + + src/app/components/ord-data/ord-data.component.html + 40 src/app/components/pool-ranking/pool-ranking.component.html - 122 + 123 src/app/components/pool/pool.component.html @@ -3721,7 +3868,7 @@ src/app/components/pool/pool.component.html - 218 + 340 src/app/lightning/channel/closing-type/closing-type.component.ts @@ -3749,11 +3896,11 @@ src/app/services/api.service.ts - 261 + 275 src/app/services/api.service.ts - 274 + 288 unknown @@ -3818,7 +3965,11 @@ 预计区块 src/app/components/block/block.component.html - 225 + 232 + + + src/app/components/pool/pool.component.html + 190 block.expected @@ -3827,7 +3978,7 @@ 实际区块 src/app/components/block/block.component.html - 227 + 234 block.actual @@ -3836,7 +3987,7 @@ 预计区块 src/app/components/block/block.component.html - 231 + 238 block.expected-block @@ -3845,7 +3996,7 @@ 实际区块 src/app/components/block/block.component.html - 246 + 253 block.actual-block @@ -3854,11 +4005,15 @@ 版本 src/app/components/block/block.component.html - 273 + 280 + + + src/app/components/transaction/transaction-raw.component.html + 199 src/app/components/transaction/transaction.component.html - 267 + 210 transaction.version @@ -3867,7 +4022,7 @@ Taproot src/app/components/block/block.component.html - 274 + 281 src/app/components/tx-features/tx-features.component.html @@ -3897,7 +4052,7 @@ 字节 src/app/components/block/block.component.html - 277 + 284 block.bits @@ -3906,7 +4061,7 @@ 哈希树 src/app/components/block/block.component.html - 281 + 288 block.merkle-root @@ -3915,7 +4070,7 @@ 难度 src/app/components/block/block.component.html - 292 + 299 src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -3931,11 +4086,11 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 310 + 302 src/app/components/hashrate-chart/hashrate-chart.component.ts - 411 + 403 block.difficulty @@ -3944,7 +4099,7 @@ 随机数 src/app/components/block/block.component.html - 296 + 303 block.nonce @@ -3953,7 +4108,7 @@ 区块头字节 src/app/components/block/block.component.html - 300 + 307 block.header @@ -3962,11 +4117,11 @@ 审计 src/app/components/block/block.component.html - 318 + 325 - src/app/components/transaction/transaction.component.html - 516 + src/app/components/transaction/transaction-details/transaction-details.component.html + 123 Toggle Audit block.toggle-audit @@ -3976,23 +4131,31 @@ 明细 src/app/components/block/block.component.html - 325 + 332 + + + src/app/components/transaction/transaction-raw.component.html + 148 + + + src/app/components/transaction/transaction-raw.component.html + 156 src/app/components/transaction/transaction.component.html - 134 + 79 src/app/components/transaction/transaction.component.html - 225 + 168 src/app/components/transaction/transaction.component.html - 233 + 176 src/app/components/transaction/transaction.component.html - 358 + 301 src/app/lightning/channel/channel.component.html @@ -4022,7 +4185,7 @@ 加载区块失败 src/app/components/block/block.component.html - 367 + 374 block.error.loading-block-data @@ -4031,7 +4194,7 @@ 为什么这个区块是空的? src/app/components/block/block.component.html - 381 + 388 block.empty-block-explanation @@ -4040,7 +4203,11 @@ 加速费用以带外支付 src/app/components/block/block.component.html - 413 + 420 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 218 Acceleration Fees @@ -4049,24 +4216,20 @@ 区块 src/app/components/blocks-list/blocks-list.component.html - 4 + 5 src/app/components/blocks-list/blocks-list.component.ts - 68 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 68 - - - src/app/components/master-page/master-page.component.html - 99 + 70 src/app/components/pool-ranking/pool-ranking.component.html 94 + + src/app/components/pool/pool.component.html + 298 + master-page.blocks @@ -4074,7 +4237,7 @@ 区块高度 src/app/components/blocks-list/blocks-list.component.html - 12 + 15 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4086,11 +4249,15 @@ src/app/components/pool/pool.component.html - 181 + 189 src/app/components/pool/pool.component.html - 243 + 303 + + + src/app/components/pool/pool.component.html + 365 src/app/dashboard/dashboard.component.html @@ -4103,11 +4270,11 @@ 奖励 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/blocks-list/blocks-list.component.html - 19 + 22 src/app/components/pool/pool.component.html @@ -4115,19 +4282,23 @@ src/app/components/pool/pool.component.html - 186 + 191 src/app/components/pool/pool.component.html - 247 + 308 src/app/components/pool/pool.component.html - 355 + 369 src/app/components/pool/pool.component.html - 380 + 477 + + + src/app/components/pool/pool.component.html + 502 latest-blocks.reward @@ -4136,15 +4307,15 @@ 费用 src/app/components/blocks-list/blocks-list.component.html - 20 + 23 src/app/components/pool/pool.component.html - 187 + 309 src/app/components/pool/pool.component.html - 248 + 370 latest-blocks.fees @@ -4153,11 +4324,11 @@ 交易 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/blocks-list/blocks-list.component.html - 23 + 26 src/app/components/custom-dashboard/custom-dashboard.component.html @@ -4169,11 +4340,11 @@ src/app/components/pool/pool.component.html - 188 + 310 src/app/components/pool/pool.component.html - 249 + 371 src/app/dashboard/dashboard.component.html @@ -4190,7 +4361,7 @@ 查看最新的 Liquid 区块以及区块高度、区块大小等基本统计数据。 src/app/components/blocks-list/blocks-list.component.ts - 71 + 73 @@ -4198,7 +4369,7 @@ 查看最新的比特币区块以及区块高度、区块奖励、区块大小等基本统计数据。 src/app/components/blocks-list/blocks-list.component.ts - 73 + 75 @@ -4210,7 +4381,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 92 + 108 shared.calculator @@ -4219,7 +4390,7 @@ 已复制! src/app/components/clipboard/clipboard.component.ts - 19 + 15 @@ -4452,7 +4623,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 62 + 76 dashboard.recent-blocks @@ -4476,6 +4647,14 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 228 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 262 + + + src/app/components/treasuries/treasuries.component.html + 11 + dashboard.treasury @@ -4485,6 +4664,10 @@ src/app/components/custom-dashboard/custom-dashboard.component.html 251 + + src/app/components/custom-dashboard/custom-dashboard.component.html + 285 + dashboard.treasury-transactions @@ -4492,7 +4675,7 @@ X时间线 src/app/components/custom-dashboard/custom-dashboard.component.html - 265 + 299 dashboard.x-timeline @@ -4501,7 +4684,7 @@ 整合 src/app/components/custom-dashboard/custom-dashboard.component.ts - 72 + 74 src/app/dashboard/dashboard.component.ts @@ -4509,7 +4692,7 @@ src/app/shared/filters.utils.ts - 107 + 109 @@ -4517,7 +4700,7 @@ 代币混合 src/app/components/custom-dashboard/custom-dashboard.component.ts - 73 + 75 src/app/dashboard/dashboard.component.ts @@ -4525,7 +4708,7 @@ src/app/shared/filters.utils.ts - 106 + 108 @@ -4533,7 +4716,7 @@ 数据 src/app/components/custom-dashboard/custom-dashboard.component.ts - 74 + 76 src/app/dashboard/dashboard.component.ts @@ -4541,7 +4724,7 @@ src/app/shared/filters.utils.ts - 121 + 123 @@ -4849,7 +5032,7 @@ 数量(聪) src/app/components/faucet/faucet.component.html - 51 + 64 amount-sats @@ -4858,7 +5041,7 @@ 请求 Testnet4 代币 src/app/components/faucet/faucet.component.html - 70 + 83 testnet4.request-coins @@ -5024,7 +5207,7 @@ src/app/components/hashrate-chart/hashrate-chart.component.ts - 75 + 77 mining.hashrate-difficulty @@ -5139,24 +5322,28 @@ lightning.nodes-channels-world-map - - Hashrate - 哈希率 + + Hashrate (1w) src/app/components/hashrate-chart/hashrate-chart.component.html 8 + mining.hashrate + + + Hashrate + 哈希率 src/app/components/hashrate-chart/hashrate-chart.component.html 69 src/app/components/hashrate-chart/hashrate-chart.component.ts - 299 + 291 src/app/components/hashrate-chart/hashrate-chart.component.ts - 399 + 391 src/app/components/pool-ranking/pool-ranking.component.html @@ -5168,11 +5355,11 @@ src/app/components/pool/pool.component.ts - 211 + 244 src/app/components/pool/pool.component.ts - 265 + 296 mining.hashrate @@ -5181,7 +5368,7 @@ 查看比特币网络随时间变化的哈希率和难度。 src/app/components/hashrate-chart/hashrate-chart.component.ts - 76 + 78 @@ -5189,11 +5376,11 @@ 哈希率(MA) src/app/components/hashrate-chart/hashrate-chart.component.ts - 318 + 310 src/app/components/hashrate-chart/hashrate-chart.component.ts - 422 + 414 @@ -5237,11 +5424,11 @@ src/app/components/master-page/master-page.component.html - 34 + 33 src/app/components/master-page/master-page.component.html - 58 + 57 master-page.offline @@ -5254,11 +5441,11 @@ src/app/components/master-page/master-page.component.html - 35 + 34 src/app/components/master-page/master-page.component.html - 59 + 58 master-page.reconnecting @@ -5271,53 +5458,6 @@ master-page.layer2-networks-header - - Dashboard - 仪表板 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 65 - - - src/app/components/master-page/master-page.component.html - 83 - - master-page.dashboard - - - Graphs - 图表 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 71 - - - src/app/components/master-page/master-page.component.html - 102 - - - src/app/components/statistics/statistics.component.ts - 65 - - master-page.graphs - - - Documentation - 文档 - - src/app/components/liquid-master-page/liquid-master-page.component.html - 82 - - - src/app/components/master-page/master-page.component.html - 108 - - - src/app/docs/docs/docs.component.html - 4 - - documentation.title - Non-Dust Expired 无尘过期 @@ -5351,6 +5491,10 @@ src/app/components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component.html 9 + + src/app/components/wallet/wallet-preview.component.html + 13 + shared.utxos @@ -5468,7 +5612,7 @@ 区块 src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.html - 63 + 62 shared.blocks @@ -5498,11 +5642,19 @@ src/app/components/pool/pool.component.html - 321 + 443 src/app/components/pool/pool.component.html - 332 + 454 + + + src/app/components/wallet/wallet-preview.component.html + 10 + + + src/app/components/wallet/wallet.component.html + 16 mining.addresses @@ -5550,7 +5702,7 @@ 转出进行中 src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html - 70 + 69 liquid.redemption-in-progress @@ -5599,9 +5751,8 @@ liquid.unpeg - - Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply - 联邦 BTC 持有量低于 L-BTC 总供应量 95% 的次数 + + Number of times that the Federation's BTC holdings fall below 95% of the total LBTC supply src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5652,9 +5803,8 @@ 163 - - L-BTC in circulation - 流通中的L-BTC + + LBTC in circulation src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5674,49 +5824,6 @@ shared.as-of-block - - Mining Dashboard - 挖矿仪表盘 - - src/app/components/master-page/master-page.component.html - 92 - - - src/app/components/mining-dashboard/mining-dashboard.component.ts - 29 - - - src/app/shared/components/global-footer/global-footer.component.html - 60 - - mining.mining-dashboard - - - Lightning Explorer - 闪电网络浏览器 - - src/app/components/master-page/master-page.component.html - 95 - - - src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts - 33 - - - src/app/shared/components/global-footer/global-footer.component.html - 61 - - master-page.lightning - - - Faucet - 龙头 - - src/app/components/master-page/master-page.component.html - 105 - - master-page.faucet - See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. 查看内存池中 交易的统计数据:费用范围、总规模等。当网络收到新交易时,内存池区块会实时更新。 @@ -5774,15 +5881,15 @@ 登录 src/app/components/menu/menu.component.html - 21 + 27 src/app/shared/components/global-footer/global-footer.component.html - 37 + 45 src/app/shared/components/global-footer/global-footer.component.html - 48 + 57 shared.sign-in @@ -5813,6 +5920,18 @@ dashboard.adjustments + + Mining Dashboard + 挖矿仪表盘 + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 29 + + + src/app/shared/components/global-footer/global-footer.component.html + 74 + + Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. 获取实时比特币挖矿统计数据,如哈希率、难度调整、区块奖励、矿池主导地位等。 @@ -5821,6 +5940,58 @@ 30 + + Mint + + src/app/components/ord-data/ord-data.component.html + 3,5 + + ord.mint-n-runes + + + Premine (% of total supply) + + src/app/components/ord-data/ord-data.component.html + 11,15 + + ord.premine-n-runes + + + Etching of + + src/app/components/ord-data/ord-data.component.html + 19,21 + + ord.etch-rune + + + Transfer + + src/app/components/ord-data/ord-data.component.html + 28,29 + + ord.transfer-rune + + + Source inscription + + src/app/components/ord-data/ord-data.component.html + 44 + + + src/app/shared/filters.utils.ts + 104 + + ord.source-inscription + + + Error decoding data + + src/app/components/ord-data/ord-data.component.html + 57 + + error.decoding-data + Pools luck (1 week) 矿池幸运度(1 周) @@ -5839,7 +6010,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 156 + 158 mining.miners-luck @@ -5870,7 +6041,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 162 + 164 mining.miners-count @@ -5896,7 +6067,7 @@ src/app/components/pool-ranking/pool-ranking.component.html - 168 + 170 master-page.blocks @@ -5943,11 +6114,11 @@ src/app/components/pool/pool.component.html - 357 + 479 src/app/components/pool/pool.component.html - 382 + 504 latest-blocks.avg_health @@ -5986,7 +6157,7 @@ 所有矿工 src/app/components/pool-ranking/pool-ranking.component.html - 138 + 139 mining.all-miners @@ -6009,17 +6180,17 @@ blocks 个区块 - - src/app/components/pool-ranking/pool-ranking.component.ts - 167 - src/app/components/pool-ranking/pool-ranking.component.ts 170 src/app/components/pool-ranking/pool-ranking.component.ts - 206 + 173 + + + src/app/components/pool-ranking/pool-ranking.component.ts + 207 src/app/components/pool-ranking/pool-ranking.component.ts @@ -6031,15 +6202,19 @@ 其他( src/app/components/pool-ranking/pool-ranking.component.ts - 186 + 189 src/app/components/pool-ranking/pool-ranking.component.ts - 204 + 207 src/app/components/pool-ranking/pool-ranking.component.ts - 208 + 209 + + + src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts + 184 src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -6084,11 +6259,11 @@ src/app/components/pool/pool.component.html - 304 + 426 src/app/components/pool/pool.component.html - 312 + 434 mining.tags @@ -6097,11 +6272,11 @@ 查看的矿池统计数据:最近开采的区块、随时间变化的哈希率、迄今为止的总区块奖励、已知的 coinbase 地址等。 src/app/components/pool/pool-preview.component.ts - 86 + 88 src/app/components/pool/pool.component.ts - 83 + 93 @@ -6120,20 +6295,44 @@ 57 - src/app/components/transactions-list/transactions-list.component.html - 137 + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 9 src/app/components/transactions-list/transactions-list.component.html - 161 + 221 src/app/components/transactions-list/transactions-list.component.html - 189 + 243 src/app/components/transactions-list/transactions-list.component.html - 307 + 258 + + + src/app/components/transactions-list/transactions-list.component.html + 287 + + + src/app/components/transactions-list/transactions-list.component.html + 406 + + + src/app/components/transactions-list/transactions-list.component.html + 423 + + + src/app/components/transactions-list/transactions-list.component.html + 440 + + + src/app/components/transactions-list/transactions-list.component.html + 458 + + + src/app/components/wallet/wallet.component.html + 32 show-all @@ -6144,6 +6343,10 @@ src/app/components/pool/pool.component.html 55 + + src/app/components/wallet/wallet.component.html + 33 + hide @@ -6155,11 +6358,11 @@ src/app/components/pool/pool.component.html - 356 + 478 src/app/components/pool/pool.component.html - 381 + 503 mining.hashrate @@ -6172,11 +6375,11 @@ src/app/components/pool/pool.component.html - 406 + 528 src/app/components/pool/pool.component.html - 431 + 553 24h @@ -6189,11 +6392,11 @@ src/app/components/pool/pool.component.html - 407 + 529 src/app/components/pool/pool.component.html - 432 + 554 1w @@ -6220,20 +6423,48 @@ CoinBase 标签 src/app/components/pool/pool.component.html - 184 + 223 src/app/components/pool/pool.component.html - 246 + 306 + + + src/app/components/pool/pool.component.html + 368 latest-blocks.coinbasetag + + Clean + + src/app/components/pool/pool.component.html + 227 + + next-block.clean + + + Prevhash + + src/app/components/pool/pool.component.html + 228 + + next-block.prevhash + + + Job Received + + src/app/components/pool/pool.component.html + 229 + + next-block.job-received + Error loading pool data. 加载矿池数据时出错。 src/app/components/pool/pool.component.html - 467 + 589 pool.error.loading-pool-data @@ -6242,7 +6473,7 @@ 还没有足够的数据 src/app/components/pool/pool.component.ts - 142 + 177 @@ -6250,11 +6481,11 @@ 泳池霸主 src/app/components/pool/pool.component.ts - 222 + 255 src/app/components/pool/pool.component.ts - 276 + 307 mining.pool-dominance @@ -6271,7 +6502,7 @@ src/app/shared/components/global-footer/global-footer.component.html - 63 + 77 Broadcast Transaction shared.broadcast-transaction @@ -6283,18 +6514,95 @@ src/app/components/push-transaction/push-transaction.component.html 6 + + src/app/components/transaction/transaction-raw.component.html + 215 + src/app/components/transaction/transaction.component.html - 283 + 226 transaction.hex + + Submit Package + + src/app/components/push-transaction/push-transaction.component.html + 14 + + + src/app/components/push-transaction/push-transaction.component.html + 27 + + Submit Package + shared.submit-transactions + + + Comma-separated list of raw transactions + 以逗号分隔的原始交易列表 + + src/app/components/push-transaction/push-transaction.component.html + 18 + + + src/app/components/test-transactions/test-transactions.component.html + 10 + + transaction.test-transactions + + + Maximum fee rate (sat/vB) + 最高费率 (聪/字节) + + src/app/components/push-transaction/push-transaction.component.html + 20 + + + src/app/components/test-transactions/test-transactions.component.html + 12 + + test.tx.max-fee-rate + + + Maximum burn amount (sats) + + src/app/components/push-transaction/push-transaction.component.html + 23 + + submitpackage.tx.max-burn-amount + + + Allowed? + 是否允许 + + src/app/components/push-transaction/push-transaction.component.html + 39 + + + src/app/components/test-transactions/test-transactions.component.html + 26 + + test-tx.is-allowed + + + Rejection reason + 拒绝原因 + + src/app/components/push-transaction/push-transaction.component.html + 42 + + + src/app/components/test-transactions/test-transactions.component.html + 29 + + test-tx.rejection-reason + Broadcast Transaction 广播交易 src/app/components/push-transaction/push-transaction.component.ts - 38 + 57 @@ -6302,7 +6610,7 @@ 使用交易的哈希值将交易广播到 网络。 src/app/components/push-transaction/push-transaction.component.ts - 39 + 58 @@ -6342,17 +6650,41 @@ src/app/components/rbf-timeline/rbf-timeline.component.html 61 + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 14 + + + src/app/components/transaction/transaction-raw.component.html + 127 + src/app/components/transaction/transaction.component.html - 204 + 147 src/app/components/transactions-list/transactions-list.component.html - 139 + 223 src/app/components/transactions-list/transactions-list.component.html - 162 + 244 + + + src/app/components/transactions-list/transactions-list.component.html + 259 + + + src/app/components/transactions-list/transactions-list.component.html + 407 + + + src/app/components/transactions-list/transactions-list.component.html + 424 + + + src/app/components/transactions-list/transactions-list.component.html + 441 show-less @@ -6365,7 +6697,7 @@ src/app/components/transactions-list/transactions-list.component.html - 363 + 514 x-remaining @@ -6459,11 +6791,11 @@ src/app/shared/components/global-footer/global-footer.component.html - 16 + 17 src/app/shared/components/global-footer/global-footer.component.html - 51 + 61 search-form.searchbar-placeholder @@ -6579,6 +6911,74 @@ search.go-to + + Search by student name or ID... + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 28 + + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 58 + + simpleproof.search_placeholder + + + Student Name + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 35 + + simpleproof.student_name + + + ID + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 42 + + simpleproof.id_code + + + Proof + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 48 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 25 + + simpleproof.proof + + + Verify + + src/app/components/simpleproof-widget/simpleproof-cubo-widget.component.html + 98 + + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 39 + + simpleproof.verify + + + Filename + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 22 + + simpleproof.filename + + + Verified + + src/app/components/simpleproof-widget/simpleproof-widget.component.html + 24 + + simpleproof.verified + Mempool by vBytes (sat/vByte) 交易字节/秒 (字节) @@ -6597,29 +6997,16 @@ src/app/shared/components/global-footer/global-footer.component.html - 90 + 106 footer.clock-mempool - - TV view - TV模式 - - src/app/components/statistics/statistics.component.html - 20 - - - src/app/components/television/television.component.ts - 39 - - master-page.tvview - Filter 过滤 src/app/components/statistics/statistics.component.html - 68 + 65 statistics.component-filter.title @@ -6628,7 +7015,7 @@ 倒置 src/app/components/statistics/statistics.component.html - 93 + 90 statistics.component-invert.title @@ -6637,7 +7024,7 @@ 交易字节/秒 (虚拟字节) src/app/components/statistics/statistics.component.html - 113 + 110 statistics.transaction-vbytes-per-second @@ -6646,10 +7033,18 @@ 上限异常值 src/app/components/statistics/statistics.component.html - 121 + 118 statistics.cap-outliers + + Graphs + 图表 + + src/app/components/statistics/statistics.component.ts + 65 + + See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. 查看随时间变化的内存池大小(以 MvB 为单位)和每秒交易次数(以 vB/s 为单位)。 @@ -6658,24 +7053,40 @@ 66 - - See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. - 以适合电视的简化格式实时查看比特币区块和内存池拥塞情况。 + + Stratum Jobs - src/app/components/television/television.component.ts - 40 + src/app/components/stratum/stratum-list/stratum-list.component.html + 2 + master-page.blocks + + + levels remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 19 + + x-levels-remaining + + + 1 level remaining + + src/app/components/taproot-address-scripts/taproot-address-scripts.component.html + 20 + + 1-level-remaining Test Transactions 测试交易 src/app/components/test-transactions/test-transactions.component.html - 2 + 3 src/app/components/test-transactions/test-transactions.component.html - 13 + 16 src/app/components/test-transactions/test-transactions.component.ts @@ -6689,371 +7100,10 @@ 原始十六进制 src/app/components/test-transactions/test-transactions.component.html - 5 + 8 test.tx.raw-hex - - Comma-separated list of raw transactions - 以逗号分隔的原始交易列表 - - src/app/components/test-transactions/test-transactions.component.html - 7 - - transaction.test-transactions - - - Maximum fee rate (sat/vB) - 最高费率 (聪/字节) - - src/app/components/test-transactions/test-transactions.component.html - 9 - - test.tx.max-fee-rate - - - Allowed? - 是否允许 - - src/app/components/test-transactions/test-transactions.component.html - 23 - - test-tx.is-allowed - - - Rejection reason - 拒绝原因 - - src/app/components/test-transactions/test-transactions.component.html - 26 - - test-tx.rejection-reason - - - Immediately - 立刻 - - - src/app/components/time/time.component.ts - 107 - - - - Just now - 现在 - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 111 - - - src/app/components/time/time.component.ts - 113 - - - - ago - 之前 - - src/app/components/time/time.component.ts - 165 - - - src/app/components/time/time.component.ts - 166 - - - src/app/components/time/time.component.ts - 167 - - - src/app/components/time/time.component.ts - 168 - - - src/app/components/time/time.component.ts - 169 - - - src/app/components/time/time.component.ts - 170 - - - src/app/components/time/time.component.ts - 171 - - - src/app/components/time/time.component.ts - 175 - - - src/app/components/time/time.component.ts - 176 - - - src/app/components/time/time.component.ts - 177 - - - src/app/components/time/time.component.ts - 178 - - - src/app/components/time/time.component.ts - 179 - - - src/app/components/time/time.component.ts - 180 - - - src/app/components/time/time.component.ts - 181 - - - - In ~ - 之内 - - src/app/components/time/time.component.ts - 188 - - - src/app/components/time/time.component.ts - 189 - - - src/app/components/time/time.component.ts - 190 - - - src/app/components/time/time.component.ts - 191 - - - src/app/components/time/time.component.ts - 192 - - - src/app/components/time/time.component.ts - 193 - - - src/app/components/time/time.component.ts - 194 - - - src/app/components/time/time.component.ts - 198 - - - src/app/components/time/time.component.ts - 199 - - - src/app/components/time/time.component.ts - 200 - - - src/app/components/time/time.component.ts - 201 - - - src/app/components/time/time.component.ts - 202 - - - src/app/components/time/time.component.ts - 203 - - - src/app/components/time/time.component.ts - 204 - - - - within ~ - 在~ - - src/app/components/time/time.component.ts - 211 - - - src/app/components/time/time.component.ts - 212 - - - src/app/components/time/time.component.ts - 213 - - - src/app/components/time/time.component.ts - 214 - - - src/app/components/time/time.component.ts - 215 - - - src/app/components/time/time.component.ts - 216 - - - src/app/components/time/time.component.ts - 217 - - - src/app/components/time/time.component.ts - 221 - - - src/app/components/time/time.component.ts - 222 - - - src/app/components/time/time.component.ts - 223 - - - src/app/components/time/time.component.ts - 224 - - - src/app/components/time/time.component.ts - 225 - - - src/app/components/time/time.component.ts - 226 - - - src/app/components/time/time.component.ts - 227 - - - - After - 之后 - - src/app/components/time/time.component.ts - 234 - - - src/app/components/time/time.component.ts - 235 - - - src/app/components/time/time.component.ts - 236 - - - src/app/components/time/time.component.ts - 237 - - - src/app/components/time/time.component.ts - 238 - - - src/app/components/time/time.component.ts - 239 - - - src/app/components/time/time.component.ts - 240 - - - src/app/components/time/time.component.ts - 244 - - - src/app/components/time/time.component.ts - 245 - - - src/app/components/time/time.component.ts - 246 - - - src/app/components/time/time.component.ts - 247 - - - src/app/components/time/time.component.ts - 248 - - - src/app/components/time/time.component.ts - 249 - - - src/app/components/time/time.component.ts - 250 - - - - before - 之前 - - src/app/components/time/time.component.ts - 257 - - - src/app/components/time/time.component.ts - 258 - - - src/app/components/time/time.component.ts - 259 - - - src/app/components/time/time.component.ts - 260 - - - src/app/components/time/time.component.ts - 261 - - - src/app/components/time/time.component.ts - 262 - - - src/app/components/time/time.component.ts - 263 - - - src/app/components/time/time.component.ts - 267 - - - src/app/components/time/time.component.ts - 268 - - - src/app/components/time/time.component.ts - 269 - - - src/app/components/time/time.component.ts - 270 - - - src/app/components/time/time.component.ts - 271 - - - src/app/components/time/time.component.ts - 272 - - - src/app/components/time/time.component.ts - 273 - - Sent 已发送 @@ -7091,11 +7141,11 @@ 预估时间 src/app/components/tracker/tracker.component.html - 69 + 70 - src/app/components/transaction/transaction.component.html - 551 + src/app/components/transaction/transaction-details/transaction-details.component.html + 158 Transaction ETA transaction.eta @@ -7105,11 +7155,11 @@ 近期内不会 src/app/components/tracker/tracker.component.html - 74 + 75 - src/app/components/transaction/transaction.component.html - 556 + src/app/components/transaction/transaction-details/transaction-details.component.html + 166 Transaction ETA mot any time soon transaction.eta.not-any-time-soon @@ -7119,7 +7169,7 @@ 确认于 src/app/components/tracker/tracker.component.html - 87 + 89 transaction.confirmed-at @@ -7128,7 +7178,7 @@ 区块高度 src/app/components/tracker/tracker.component.html - 96 + 98 transaction.block-height @@ -7137,7 +7187,7 @@ 您的交易已加速 src/app/components/tracker/tracker.component.html - 143 + 144 tracker.explain.accelerated @@ -7146,7 +7196,7 @@ 等待你的交易出现在内存池中 src/app/components/tracker/tracker.component.html - 150 + 154 tracker.explain.waiting @@ -7155,7 +7205,7 @@ 您的交易已在内存池中,但一段时间内还无法确认。 src/app/components/tracker/tracker.component.html - 156 + 160 tracker.explain.pending @@ -7164,7 +7214,7 @@ 您的交易已接近内存池顶部,预计很快就会确认。 src/app/components/tracker/tracker.component.html - 162 + 166 tracker.explain.soon @@ -7173,7 +7223,7 @@ 您的交易预计将在下一个区块中确认 src/app/components/tracker/tracker.component.html - 168 + 172 tracker.explain.next-block @@ -7182,7 +7232,7 @@ 您的交易已确认! src/app/components/tracker/tracker.component.html - 174 + 178 tracker.explain.confirmed @@ -7191,16 +7241,29 @@ 您的交易已被新版本取代! src/app/components/tracker/tracker.component.html - 180 + 187 tracker.explain.replaced + + Error loading transaction data. + 加载交易数据时出错。 + + src/app/components/tracker/tracker.component.html + 197 + + + src/app/components/transaction/transaction.component.html + 357 + + transaction.error.loading-transaction-data + See more details 查看更多详细信息 src/app/components/tracker/tracker.component.html - 193 + 206 accelerator.show-more-details @@ -7213,11 +7276,11 @@ src/app/components/transaction/transaction-preview.component.ts - 89 + 91 src/app/components/transaction/transaction.component.ts - 530 + 580 @@ -7229,44 +7292,32 @@ src/app/components/transaction/transaction-preview.component.ts - 93 + 95 src/app/components/transaction/transaction.component.ts - 534 + 584 - - Coinbase - Coinbase + + Related Transactions - src/app/components/transaction/transaction-preview.component.html - 43 + src/app/components/transaction/cpfp-info.component.html + 3 - - src/app/components/transaction/transaction.component.html - 520 - - - src/app/components/transactions-list/transactions-list.component.html - 54 - - - src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html - 19 - - transactions-list.coinbase + CPFP List + transaction.related-transactions Descendant 后裔 - src/app/components/transaction/transaction.component.html - 88 + src/app/components/transaction/cpfp-info.component.html + 20 - src/app/components/transaction/transaction.component.html - 100 + src/app/components/transaction/cpfp-info.component.html + 32 Descendant transaction.descendant @@ -7275,18 +7326,398 @@ Ancestor 祖先 - src/app/components/transaction/transaction.component.html - 112 + src/app/components/transaction/cpfp-info.component.html + 44 Transaction Ancestor transaction.ancestor + + Features + 交易特征 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 106 + + + src/app/lightning/node/node.component.html + 120 + + + src/app/shared/filters.utils.ts + 120 + + Transaction features + transaction.features + + + Coinbase + Coinbase + + src/app/components/transaction/transaction-details/transaction-details.component.html + 127 + + + src/app/components/transaction/transaction-preview.component.html + 43 + + + src/app/components/transactions-list/transactions-list.component.html + 90 + + + src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html + 19 + + transactions-list.coinbase + + + This transaction was projected to be included in the block + 这笔交易预计将被纳入区块 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in block tooltip + + + Expected in Block + 预计在区块中 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 129 + + Expected in Block + tx-features.tag.expected + + + This transaction was seen in the mempool prior to mining + 这笔交易在挖矿之前就已经在内存池中被看到了 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in mempool tooltip + + + Seen in Mempool + 在Mempool中查看 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 131 + + Seen in Mempool + tx-features.tag.seen + + + This transaction was missing from our mempool prior to mining + 在挖矿之前,此交易已经从内存池丢失。 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in mempool tooltip + + + Not seen in Mempool + 未在内存池中看到 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 133 + + Not seen in Mempool + tx-features.tag.not-seen + + + This transaction may have been added out-of-band + 此交易可能已在带外加速中添加 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 136 + + Added transaction tooltip + + + This transaction may have been prioritized out-of-band + 此交易可能已被优先处理 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 139 + + Prioritized transaction tooltip + + + This transaction conflicted with another version in our mempool + 此交易与我们的内存池中的另一个版本相冲突 + + src/app/components/transaction/transaction-details/transaction-details.component.html + 142 + + Conflict in mempool tooltip + + + This transaction cannot be accelerated + + src/app/components/transaction/transaction-details/transaction-details.component.html + 173 + + Mempool Accelerator® tooltip + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.html + 5 + + + src/app/components/transaction/transaction-raw.component.html + 25 + + + src/app/shared/components/global-footer/global-footer.component.html + 79 + + Preview Transaction + shared.preview-transaction + + + Transaction hex or base64 encoded PSBT + + src/app/components/transaction/transaction-raw.component.html + 9 + + transaction.hex-and-psbt + + + Preview + + src/app/components/transaction/transaction-raw.component.html + 11 + + Preview + shared.preview + + + Fetch missing prevouts + + src/app/components/transaction/transaction-raw.component.html + 14 + + transaction.fetch-prevout-data + + + Error decoding transaction, reason: + + src/app/components/transaction/transaction-raw.component.html + 16,18 + + transaction.error-decoding + + + Preview Coinbase + + src/app/components/transaction/transaction-raw.component.html + 23 + + Preview Coinbase + shared.preview-coinbase + + + This transaction is stored locally in your browser. Broadcast it to add it to the mempool. + + src/app/components/transaction/transaction-raw.component.html + 50,52 + + This transaction is stored locally in your browser. + transaction.local-tx + + + Redirecting to transaction page... + + src/app/components/transaction/transaction-raw.component.html + 53,55 + + Redirecting to transaction page... + transaction.redirecting + + + Transaction cannot be broadcasted because it's missing signature(s) + + src/app/components/transaction/transaction-raw.component.html + 58 + + transaction.missing-signature + + + Broadcast + + src/app/components/transaction/transaction-raw.component.html + 60 + + Broadcast + transaction.broadcast + + + Broadcasted + + src/app/components/transaction/transaction-raw.component.html + 61 + + Broadcasted + transaction.broadcasted + + + Flow + 流向 + + src/app/components/transaction/transaction-raw.component.html + 101 + + + src/app/components/transaction/transaction.component.html + 121 + + + src/app/components/transaction/transaction.component.html + 241 + + Transaction flow + transaction.flow + + + Hide diagram + 隐藏图表 + + src/app/components/transaction/transaction-raw.component.html + 104 + + + src/app/components/transaction/transaction.component.html + 124 + + hide-diagram + + + Show more + 展示更多 + + src/app/components/transaction/transaction-raw.component.html + 125 + + + src/app/components/transaction/transaction.component.html + 145 + + + src/app/components/transactions-list/transactions-list.component.html + 289 + + + src/app/components/transactions-list/transactions-list.component.html + 460 + + show-more + + + Inputs & Outputs + 输入与输出 + + src/app/components/transaction/transaction-raw.component.html + 143 + + + src/app/components/transaction/transaction.component.html + 163 + + + src/app/components/transaction/transaction.component.html + 272 + + Transaction inputs and outputs + transaction.inputs-and-outputs + + + Show diagram + 显示图表 + + src/app/components/transaction/transaction-raw.component.html + 147 + + + src/app/components/transaction/transaction.component.html + 167 + + show-diagram + + + Adjusted vsize + 调整后的虚拟大小 + + src/app/components/transaction/transaction-raw.component.html + 178 + + + src/app/components/transaction/transaction.component.html + 192 + + Transaction Adjusted VSize + transaction.adjusted-vsize + + + Locktime + 锁定时间 + + src/app/components/transaction/transaction-raw.component.html + 203 + + + src/app/components/transaction/transaction.component.html + 214 + + transaction.locktime + + + Sigops + 签名操作 + + src/app/components/transaction/transaction-raw.component.html + 207 + + + src/app/components/transaction/transaction.component.html + 218 + + Transaction Sigops + transaction.sigops + + + Loading + + src/app/components/transaction/transaction-raw.component.html + 228,230 + + transaction.error.loading-prevouts + + + Preview Transaction + + src/app/components/transaction/transaction-raw.component.ts + 89 + + + + Preview a transaction to the Bitcoin network using the transaction's raw hex data. + + src/app/components/transaction/transaction-raw.component.ts + 90 + + Hide accelerator 隐藏加速器 src/app/components/transaction/transaction.component.html - 133 + 78 accelerator.hide @@ -7295,7 +7726,7 @@ RBF时间线 src/app/components/transaction/transaction.component.html - 160 + 103 RBF Timeline transaction.rbf-history @@ -7305,109 +7736,17 @@ 加速时间线 src/app/components/transaction/transaction.component.html - 169 + 112 Acceleration Timeline transaction.acceleration-timeline - - Flow - 流向 - - src/app/components/transaction/transaction.component.html - 178 - - - src/app/components/transaction/transaction.component.html - 298 - - Transaction flow - transaction.flow - - - Hide diagram - 隐藏图表 - - src/app/components/transaction/transaction.component.html - 181 - - hide-diagram - - - Show more - 展示更多 - - src/app/components/transaction/transaction.component.html - 202 - - - src/app/components/transactions-list/transactions-list.component.html - 191 - - - src/app/components/transactions-list/transactions-list.component.html - 309 - - show-more - - - Inputs & Outputs - 输入与输出 - - src/app/components/transaction/transaction.component.html - 220 - - - src/app/components/transaction/transaction.component.html - 329 - - Transaction inputs and outputs - transaction.inputs-and-outputs - - - Show diagram - 显示图表 - - src/app/components/transaction/transaction.component.html - 224 - - show-diagram - - - Adjusted vsize - 调整后的虚拟大小 - - src/app/components/transaction/transaction.component.html - 249 - - Transaction Adjusted VSize - transaction.adjusted-vsize - - - Locktime - 锁定时间 - - src/app/components/transaction/transaction.component.html - 271 - - transaction.locktime - - - Sigops - 签名操作 - - src/app/components/transaction/transaction.component.html - 275 - - Transaction Sigops - transaction.sigops - Transaction not found. 交易未找到 src/app/components/transaction/transaction.component.html - 407 + 350 transaction.error.transaction-not-found @@ -7416,127 +7755,24 @@ 等待交易出现在内存池 src/app/components/transaction/transaction.component.html - 408 + 351 transaction.error.waiting-for-it-to-appear - - Error loading transaction data. - 加载交易数据时出错。 + + Warning! This transaction involves deceptively similar addresses. It may be an address poisoning attack. - src/app/components/transaction/transaction.component.html - 414 + src/app/components/transactions-list/transactions-list.component.html + 21 - transaction.error.loading-transaction-data - - - Features - 交易特征 - - src/app/components/transaction/transaction.component.html - 499 - - - src/app/lightning/node/node.component.html - 120 - - - src/app/shared/filters.utils.ts - 118 - - Transaction features - transaction.features - - - This transaction was projected to be included in the block - 这笔交易预计将被纳入区块 - - src/app/components/transaction/transaction.component.html - 522 - - Expected in block tooltip - - - Expected in Block - 预计在区块中 - - src/app/components/transaction/transaction.component.html - 522 - - Expected in Block - tx-features.tag.expected - - - This transaction was seen in the mempool prior to mining - 这笔交易在挖矿之前就已经在内存池中被看到了 - - src/app/components/transaction/transaction.component.html - 524 - - Seen in mempool tooltip - - - Seen in Mempool - 在Mempool中查看 - - src/app/components/transaction/transaction.component.html - 524 - - Seen in Mempool - tx-features.tag.seen - - - This transaction was missing from our mempool prior to mining - 在挖矿之前,此交易已经从内存池丢失。 - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in mempool tooltip - - - Not seen in Mempool - 未在内存池中看到 - - src/app/components/transaction/transaction.component.html - 526 - - Not seen in Mempool - tx-features.tag.not-seen - - - This transaction may have been added out-of-band - 此交易可能已在带外加速中添加 - - src/app/components/transaction/transaction.component.html - 529 - - Added transaction tooltip - - - This transaction may have been prioritized out-of-band - 此交易可能已被优先处理 - - src/app/components/transaction/transaction.component.html - 532 - - Prioritized transaction tooltip - - - This transaction conflicted with another version in our mempool - 此交易与我们的内存池中的另一个版本相冲突 - - src/app/components/transaction/transaction.component.html - 535 - - Conflict in mempool tooltip + transaction.poison.warning (Newly Generated Coins) (新产出货币) src/app/components/transactions-list/transactions-list.component.html - 54 + 90 transactions-list.newly-generated-coins @@ -7545,16 +7781,24 @@ 转入 src/app/components/transactions-list/transactions-list.component.html - 56 + 92 transactions-list.peg-in + + Inscription + + src/app/components/transactions-list/transactions-list.component.html + 123 + + transaction.inscription-tag + ScriptSig (ASM) ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 105 + 157 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -7564,7 +7808,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 109 + 168 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -7574,7 +7818,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 114 + 173 transactions-list.witness @@ -7583,16 +7827,24 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 148 + 232 transactions-list.p2sh-redeem-script + + P2TR Simplicity script + + src/app/components/transactions-list/transactions-list.component.html + 237 + + transactions-list.p2tr-simplicity-script + P2TR tapscript P2TR 脚本 src/app/components/transactions-list/transactions-list.component.html - 152 + 249 transactions-list.p2tr-tapscript @@ -7601,7 +7853,7 @@ P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 154 + 251 transactions-list.p2wsh-witness-script @@ -7610,7 +7862,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 168 + 266 transactions-list.nsequence @@ -7619,7 +7871,7 @@ 上一次输出脚本 src/app/components/transactions-list/transactions-list.component.html - 173 + 271 transactions-list.previous-output-script @@ -7628,7 +7880,7 @@ 之前输出类型 src/app/components/transactions-list/transactions-list.component.html - 177 + 275 transactions-list.previous-output-type @@ -7637,7 +7889,7 @@ 转出至 src/app/components/transactions-list/transactions-list.component.html - 225,226 + 326,327 transactions-list.peg-out-to @@ -7646,7 +7898,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 284 + 400 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -7656,7 +7908,7 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 288 + 413 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex @@ -7666,10 +7918,42 @@ 显示更多输入以显示费用数据 src/app/components/transactions-list/transactions-list.component.html - 326 + 477 transactions-list.load-to-reveal-fee-info + + Treasury Leaderboard + + src/app/components/treasuries/treasuries.component.html + 7 + + dashboard.treasury-leaderboard + + + BTC Balance + + src/app/components/treasuries/treasuries.component.html + 12 + + dashboard.treasury-leaderboard.balance + + + USD Value + + src/app/components/treasuries/treasuries.component.html + 13 + + dashboard.treasury-leaderboard.value + + + Treasury Distribution + + src/app/components/treasuries/treasuries.component.html + 43 + + dashboard.treasury-distribution + other inputs 其他输入 @@ -7900,6 +8184,64 @@ TX Fee Rating is Warning tx-fee-rating.overpaid.warning + + Wallet + + src/app/components/wallet/wallet-preview.component.html + 3 + + shared.wallet + + + Balance (BTC) + + src/app/components/wallet/wallet-preview.component.html + 17 + + wallet.balance-btc + + + Balance (USD) + + src/app/components/wallet/wallet-preview.component.html + 20 + + wallet.balance-usd + + + Wallet: + + src/app/components/wallet/wallet-preview.component.ts + 149 + + + src/app/components/wallet/wallet.component.ts + 69 + + + + See mempool transactions, confirmed transactions, balance, and more for wallet . + + src/app/components/wallet/wallet-preview.component.ts + 150 + + + src/app/components/wallet/wallet.component.ts + 70 + + + + Error loading wallet data. + + src/app/components/wallet/wallet.component.html + 139 + + + src/app/components/wallet/wallet.component.html + 146 + + address.error.loading-wallet-data + Liquid Federation Holdings Liquid 联邦控股 @@ -7926,9 +8268,8 @@ liquid.federation-expired-utxos - - L-BTC Supply Against BTC Holdings - L-BTC 供应量与 BTC 持有量对比 + + LBTC Supply Against BTC Holdings src/app/dashboard/dashboard.component.html 184 @@ -7981,10 +8322,6 @@ src/app/docs/api-docs/api-docs.component.html 60 - - src/app/docs/api-docs/api-docs.component.html - 115 - Api docs endpoint @@ -7996,22 +8333,13 @@ src/app/docs/api-docs/api-docs.component.html - 119 + 137 src/app/lightning/group/group.component.html 17 - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - 默认推送:操作: 'want', 数据: ['blocks', ...] 来表达你想要推送的内容。可用字段:blocksmempool-blockslive-2h-chart,和stats推送与地址有关的事务。'track-address': '3PbJ...bF9B' 接收所有包含该地址的新事务作为输入或输出。返回一个交易数组。address-transactions用于新的mempool交易,block-transactions用于新的块确认交易。 - - src/app/docs/api-docs/api-docs.component.html - 120 - - api-docs.websocket.websocket - Code Example 代码示例 @@ -8051,6 +8379,15 @@ API Docs API response + + Documentation + 文档 + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + FAQ 常见问题 @@ -8445,7 +8782,7 @@ 闪电通道 概览。查看通道容量、涉及的闪电节点、相关的链上交易等。 src/app/lightning/channel/channel-preview.component.ts - 37 + 39 src/app/lightning/channel/channel.component.ts @@ -9068,6 +9405,18 @@ lightning.connectivity-ranking + + Lightning Explorer + 闪电网络浏览器 + + src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts + 33 + + + src/app/shared/components/global-footer/global-footer.component.html + 75 + + Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). 获取有关闪电网络(总容量、连接性等)、闪电节点(渠道、流动性等)和闪电通道(状态、费用等)的统计数据。 @@ -9183,7 +9532,7 @@ 闪电网络节点 的概览。查看通道、容量、位置、费用统计等。 src/app/lightning/node/node-preview.component.ts - 52 + 54 src/app/lightning/node/node.component.ts @@ -9690,7 +10039,7 @@ 闪电网络节点位于 ISP:[AS ] src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 44 + 46 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9702,7 +10051,7 @@ 使用 [AS] ISP 浏览所有比特币闪电节点,并查看 ISP 的节点总数、总容量等汇总统计数据。 src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts - 45 + 47 src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -9810,6 +10159,339 @@ 71 + + Immediately + 立刻 + + + src/app/services/time.service.ts + 71 + + + + Just now + 现在 + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 75 + + + src/app/services/time.service.ts + 77 + + + + ago + 之前 + + src/app/services/time.service.ts + 129 + + + src/app/services/time.service.ts + 130 + + + src/app/services/time.service.ts + 131 + + + src/app/services/time.service.ts + 132 + + + src/app/services/time.service.ts + 133 + + + src/app/services/time.service.ts + 134 + + + src/app/services/time.service.ts + 135 + + + src/app/services/time.service.ts + 139 + + + src/app/services/time.service.ts + 140 + + + src/app/services/time.service.ts + 141 + + + src/app/services/time.service.ts + 142 + + + src/app/services/time.service.ts + 143 + + + src/app/services/time.service.ts + 144 + + + src/app/services/time.service.ts + 145 + + + + In ~ + 之内 + + src/app/services/time.service.ts + 152 + + + src/app/services/time.service.ts + 153 + + + src/app/services/time.service.ts + 154 + + + src/app/services/time.service.ts + 155 + + + src/app/services/time.service.ts + 156 + + + src/app/services/time.service.ts + 157 + + + src/app/services/time.service.ts + 158 + + + src/app/services/time.service.ts + 162 + + + src/app/services/time.service.ts + 163 + + + src/app/services/time.service.ts + 164 + + + src/app/services/time.service.ts + 165 + + + src/app/services/time.service.ts + 166 + + + src/app/services/time.service.ts + 167 + + + src/app/services/time.service.ts + 168 + + + + within ~ + 在~ + + src/app/services/time.service.ts + 175 + + + src/app/services/time.service.ts + 176 + + + src/app/services/time.service.ts + 177 + + + src/app/services/time.service.ts + 178 + + + src/app/services/time.service.ts + 179 + + + src/app/services/time.service.ts + 180 + + + src/app/services/time.service.ts + 181 + + + src/app/services/time.service.ts + 185 + + + src/app/services/time.service.ts + 186 + + + src/app/services/time.service.ts + 187 + + + src/app/services/time.service.ts + 188 + + + src/app/services/time.service.ts + 189 + + + src/app/services/time.service.ts + 190 + + + src/app/services/time.service.ts + 191 + + + + After + 之后 + + src/app/services/time.service.ts + 198 + + + src/app/services/time.service.ts + 199 + + + src/app/services/time.service.ts + 200 + + + src/app/services/time.service.ts + 201 + + + src/app/services/time.service.ts + 202 + + + src/app/services/time.service.ts + 203 + + + src/app/services/time.service.ts + 204 + + + src/app/services/time.service.ts + 208 + + + src/app/services/time.service.ts + 209 + + + src/app/services/time.service.ts + 210 + + + src/app/services/time.service.ts + 211 + + + src/app/services/time.service.ts + 212 + + + src/app/services/time.service.ts + 213 + + + src/app/services/time.service.ts + 214 + + + + before + 之前 + + src/app/services/time.service.ts + 221 + + + src/app/services/time.service.ts + 222 + + + src/app/services/time.service.ts + 223 + + + src/app/services/time.service.ts + 224 + + + src/app/services/time.service.ts + 225 + + + src/app/services/time.service.ts + 226 + + + src/app/services/time.service.ts + 227 + + + src/app/services/time.service.ts + 231 + + + src/app/services/time.service.ts + 232 + + + src/app/services/time.service.ts + 233 + + + src/app/services/time.service.ts + 234 + + + src/app/services/time.service.ts + 235 + + + src/app/services/time.service.ts + 236 + + + src/app/services/time.service.ts + 237 + + + + This address is deceptively similar to another output. It may be part of an address poisoning attack. + + src/app/shared/components/address-text/address-text.component.html + 9 + + address-poisoning.warning-tooltip + fee 费用 @@ -9846,6 +10528,14 @@ address.bare-multisig + + unknown + + src/app/shared/components/address-type/address-type.component.html + 27 + + unknown + confirmation 确认 @@ -9905,11 +10595,11 @@ 我的账户 src/app/shared/components/global-footer/global-footer.component.html - 36 + 44 src/app/shared/components/global-footer/global-footer.component.html - 47 + 56 shared.my-account @@ -9918,7 +10608,7 @@ 探索 src/app/shared/components/global-footer/global-footer.component.html - 59 + 73 footer.explore @@ -9927,7 +10617,7 @@ 测试交易 src/app/shared/components/global-footer/global-footer.component.html - 64 + 78 Test Transaction shared.test-transaction @@ -9937,7 +10627,7 @@ 连接到我们的节点 src/app/shared/components/global-footer/global-footer.component.html - 65 + 80 footer.connect-to-our-nodes @@ -9946,7 +10636,7 @@ API 文档 src/app/shared/components/global-footer/global-footer.component.html - 66 + 81 footer.api-documentation @@ -9955,7 +10645,7 @@ 学习 src/app/shared/components/global-footer/global-footer.component.html - 69 + 84 footer.learn @@ -9964,7 +10654,7 @@ 什么是mempool? src/app/shared/components/global-footer/global-footer.component.html - 70 + 85 faq.what-is-a-mempool @@ -9973,7 +10663,7 @@ 什么是区块浏览器? src/app/shared/components/global-footer/global-footer.component.html - 71 + 86 faq.what-is-a-block-exlorer @@ -9982,7 +10672,7 @@ 什么是内存池浏览器? src/app/shared/components/global-footer/global-footer.component.html - 72 + 87 faq.what-is-a-mempool-exlorer @@ -9991,7 +10681,7 @@ 为何我的交易没有确认? src/app/shared/components/global-footer/global-footer.component.html - 73 + 88 faq.why-isnt-my-transaction-confirming @@ -10000,7 +10690,7 @@ 更多问题 src/app/shared/components/global-footer/global-footer.component.html - 74 + 90 faq.more-faq @@ -10009,7 +10699,7 @@ 研究 src/app/shared/components/global-footer/global-footer.component.html - 75 + 91 mempool-research @@ -10018,7 +10708,7 @@ 网络 src/app/shared/components/global-footer/global-footer.component.html - 79 + 95 footer.networks @@ -10027,7 +10717,7 @@ 主网浏览器 src/app/shared/components/global-footer/global-footer.component.html - 80 + 96 footer.mainnet-explorer @@ -10036,7 +10726,7 @@ Testnet3 浏览器 src/app/shared/components/global-footer/global-footer.component.html - 81 + 97 footer.testnet3-explorer @@ -10045,7 +10735,7 @@ Testnet4 浏览器 src/app/shared/components/global-footer/global-footer.component.html - 82 + 98 footer.testnet4-explorer @@ -10054,7 +10744,7 @@ Signet 区块浏览器 src/app/shared/components/global-footer/global-footer.component.html - 83 + 99 footer.signet-explorer @@ -10063,7 +10753,7 @@ Liquid 测试网区块浏览器 src/app/shared/components/global-footer/global-footer.component.html - 84 + 100 footer.liquid-testnet-explorer @@ -10072,7 +10762,7 @@ Liquid 区块浏览器 src/app/shared/components/global-footer/global-footer.component.html - 85 + 101 footer.liquid-explorer @@ -10081,7 +10771,7 @@ 工具 src/app/shared/components/global-footer/global-footer.component.html - 89 + 105 footer.tools @@ -10090,7 +10780,7 @@ 时钟(开采) src/app/shared/components/global-footer/global-footer.component.html - 91 + 107 footer.clock-mined @@ -10099,7 +10789,7 @@ 法律 src/app/shared/components/global-footer/global-footer.component.html - 96 + 112 footer.legal @@ -10108,7 +10798,7 @@ 服务条款 src/app/shared/components/global-footer/global-footer.component.html - 97 + 113 Terms of Service shared.terms-of-service @@ -10118,7 +10808,7 @@ 隐私协议 src/app/shared/components/global-footer/global-footer.component.html - 98 + 114 Privacy Policy shared.privacy-policy @@ -10128,7 +10818,7 @@ 商标政策 src/app/shared/components/global-footer/global-footer.component.html - 99 + 115 Trademark Policy shared.trademark-policy @@ -10138,14 +10828,13 @@ 第三方许可 src/app/shared/components/global-footer/global-footer.component.html - 100 + 116 Third-party Licenses shared.trademark-policy - Your balance is too low.Please top up your account. - 您的余额太少.充值. + Your balance is too low.Please top up your account. src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -10170,21 +10859,12 @@ testnet3-deprecated - - Testnet4 is not yet finalized, and may be reset at anytime. - Testnet4 尚未最终确定,随时可能重新设置。 - - src/app/shared/components/testnet-alert/testnet-alert.component.html - 9 - - testnet4-not-finalized - Batch payment 批次付款 src/app/shared/filters.utils.ts - 108 + 110 @@ -10192,7 +10872,7 @@ 地址类型 src/app/shared/filters.utils.ts - 119 + 121 @@ -10200,7 +10880,7 @@ 行为 src/app/shared/filters.utils.ts - 120 + 122 @@ -10208,7 +10888,7 @@ 启发式 src/app/shared/filters.utils.ts - 122 + 124 @@ -10216,7 +10896,7 @@ Sighash Flags src/app/shared/filters.utils.ts - 123 + 125 @@ -10344,7 +11024,7 @@ 个多签中的 src/app/shared/script.utils.ts - 168 + 172 From 4faf3bdf35f0d9cec43f776c8da868e0e8c3a3df Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 28 Jul 2025 17:53:11 +0700 Subject: [PATCH 333/534] fix i18n duplicates --- .../accelerate-fee-graph.component.ts | 2 +- .../pool-ranking/pool-ranking.component.ts | 2 +- .../push-transaction.component.ts | 2 +- .../transaction/transaction-raw.component.ts | 2 +- .../nodes-channels-map.component.ts | 2 +- .../nodes-networks-chart.component.ts | 2 +- .../lightning-statistics-chart.component.ts | 2 +- .../address-type/address-type.component.html | 2 +- .../confirmations.component.html | 2 +- frontend/src/locale/duplicates.sh | 12 ++ frontend/src/locale/messages.xlf | 163 +++++++----------- 11 files changed, 84 insertions(+), 109 deletions(-) create mode 100755 frontend/src/locale/duplicates.sh 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 5890e6582..e1c868cb4 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 @@ -88,7 +88,7 @@ export class AccelerateFeeGraphComponent implements OnInit, AfterViewInit, OnCha rate: option.rate, height: lastHeight, class: 'max', - label: this.showEstimate ? $localize`maximum` : $localize`accelerated`, + label: this.showEstimate ? $localize`maximum` : $localize`:@@b484583f0ce10f3341ab36750d05271d9d22c9a1:Accelerated`.toLowerCase(), active: option.index === this.maxRateIndex, rateIndex: option.index, fee: option.fee, 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 971fdd382..9dd50c6ca 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -56,7 +56,7 @@ export class PoolRankingComponent implements OnInit { if (this.widget) { this.miningWindowPreference = '1w'; } else { - this.seoService.setTitle($localize`:@@mining.mining-pools:Mining Pools`); + this.seoService.setTitle($localize`:@@fe5317c6c60dd7e0e86f04d22f566f67cf04d404:Mining Pools`); this.seoService.setDescription($localize`:@@meta.description.bitcoin.graphs.pool-ranking:See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe.`); this.miningWindowPreference = this.miningService.getDefaultTimespan('24h'); } 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 221333edb..6ef2cf587 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -54,7 +54,7 @@ export class PushTransactionComponent implements OnInit { this.stateService.networkChanged$.subscribe((network) => this.network = network); - this.seoService.setTitle($localize`:@@meta.title.push-tx:Broadcast Transaction`); + this.seoService.setTitle($localize`:@@f13cbfe8cfc955918e9f64466d2cafddb4760d9a: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'); diff --git a/frontend/src/app/components/transaction/transaction-raw.component.ts b/frontend/src/app/components/transaction/transaction-raw.component.ts index 6d0f234d8..dd41639c6 100644 --- a/frontend/src/app/components/transaction/transaction-raw.component.ts +++ b/frontend/src/app/components/transaction/transaction-raw.component.ts @@ -86,7 +86,7 @@ export class TransactionRawComponent implements OnInit, OnDestroy { ) {} ngOnInit(): void { - this.seoService.setTitle($localize`:@@meta.title.preview-tx:Preview Transaction`); + this.seoService.setTitle($localize`:@@d7f92e6fe26fba6fff568cbdae5db4a5c8c6a55c:Preview Transaction`); this.seoService.setDescription($localize`:@@meta.description.preview-tx:Preview a transaction to the Bitcoin${seoDescriptionNetwork(this.stateService.network)} network using the transaction's raw hex data.`); this.websocketService.want(['blocks', 'mempool-blocks']); this.pushTxForm = this.formBuilder.group({ 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 a1efdc144..35d003553 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 @@ -70,7 +70,7 @@ export class NodesChannelsMap implements OnInit { if (this.style === 'graph') { this.center = [0, 5]; - this.seoService.setTitle($localize`Lightning Nodes Channels World Map`); + this.seoService.setTitle($localize`:@@b482ceceb39c7a045cb2ab2c64f7091d21e63d44:Lightning Nodes Channels World Map`); this.seoService.setDescription($localize`:@@meta.description.lightning.node-map:See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details.`); } 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 a5d0d076a..487dd8920 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 @@ -130,7 +130,7 @@ export class NodesNetworksChartComponent implements OnInit, OnChanges { color: 'grey', fontSize: 15 }, - text: $localize`Indexing in progress`, + text: $localize`:@@af1176facd00a0580509fb2900ab0cf7f9b39ae7:Indexing in progress`, left: 'center', top: 'center', }; 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 08523088c..5944e51d8 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 @@ -120,7 +120,7 @@ export class LightningStatisticsChartComponent implements OnInit, OnChanges { color: 'grey', fontSize: 15 }, - text: $localize`Indexing in progress`, + text: $localize`:@@af1176facd00a0580509fb2900ab0cf7f9b39ae7:Indexing in progress`, left: 'center', top: 'center' }; 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 f5cbd5916..94aa507ac 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 @@ -24,7 +24,7 @@ anchor } @case (null) { - unknown + Unknown } @default { {{ address.type.toUpperCase() }} diff --git a/frontend/src/app/shared/components/confirmations/confirmations.component.html b/frontend/src/app/shared/components/confirmations/confirmations.component.html index 282979824..4b14a645b 100644 --- a/frontend/src/app/shared/components/confirmations/confirmations.component.html +++ b/frontend/src/app/shared/components/confirmations/confirmations.component.html @@ -15,5 +15,5 @@
    - + \ No newline at end of file diff --git a/frontend/src/locale/duplicates.sh b/frontend/src/locale/duplicates.sh new file mode 100755 index 000000000..ea6c659ae --- /dev/null +++ b/frontend/src/locale/duplicates.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +FILE="messages.xlf" + +# Check if file exists +[ ! -f "$FILE" ] && { echo "Error: File '$FILE' not found"; exit 1; } + +# Extract contents, normalize whitespace, count duplicates +echo "Duplicates:" +grep -o '[^<]*' "$FILE" | sed 's/\(.*\)<\/source>/\1/' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | sort | uniq -c | while read -r count str; do + [ "$count" -gt 1 ] && echo "$str (found $count times)" +done diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index 6e7d06633..924336880 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -1111,12 +1111,40 @@ 91 - - accelerated + + Accelerated src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts 91 + + src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html + 16 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 92 + + + src/app/components/acceleration-timeline/acceleration-timeline.component.html + 96 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 89 + + + src/app/components/block-overview-tooltip/block-overview-tooltip.component.html + 97 + + + src/app/components/transaction/transaction-details/transaction-details.component.html + 201 + + + src/app/shared/filters.utils.ts + 100 + Status @@ -1212,38 +1240,6 @@ Transaction first seen transaction.first-seen - - Accelerated - - src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html - 16 - - - src/app/components/acceleration-timeline/acceleration-timeline.component.html - 92 - - - src/app/components/acceleration-timeline/acceleration-timeline.component.html - 96 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 89 - - - src/app/components/block-overview-tooltip/block-overview-tooltip.component.html - 97 - - - src/app/components/transaction/transaction-details/transaction-details.component.html - 201 - - - src/app/shared/filters.utils.ts - 100 - - transaction.audit.accelerated - Mined @@ -3645,6 +3641,10 @@ src/app/services/api.service.ts 288 + + src/app/shared/components/address-type/address-type.component.html + 27 + unknown @@ -4166,6 +4166,10 @@ src/app/dashboard/dashboard.component.html 282 + + src/app/shared/components/confirmations/confirmations.component.html + 18 + Unconfirmed count dashboard.unconfirmed @@ -4964,6 +4968,10 @@ src/app/lightning/nodes-channels-map/nodes-channels-map.component.html 20 + + src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts + 73 + lightning.nodes-channels-world-map @@ -5739,12 +5747,16 @@ mining.all-miners - + Mining Pools src/app/components/pool-ranking/pool-ranking.component.ts 59 + + src/app/components/search-form/search-results/search-results.component.html + 47 + See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe. @@ -6059,6 +6071,10 @@ src/app/components/push-transaction/push-transaction.component.html 8 + + src/app/components/push-transaction/push-transaction.component.ts + 57 + src/app/shared/components/global-footer/global-footer.component.html 77 @@ -6151,13 +6167,6 @@ test-tx.rejection-reason - - Broadcast Transaction - - src/app/components/push-transaction/push-transaction.component.ts - 57 - - Broadcast a transaction to the network using the transaction's hash. @@ -6390,14 +6399,6 @@ search.bitcoin-addresses - - Mining Pools - - src/app/components/search-form/search-results/search-results.component.html - 47 - - search.mining-pools - Lightning Nodes @@ -6959,6 +6960,10 @@ src/app/components/transaction/transaction-raw.component.html 25 + + src/app/components/transaction/transaction-raw.component.ts + 89 + src/app/shared/components/global-footer/global-footer.component.html 79 @@ -7168,21 +7173,6 @@ Transaction Sigops transaction.sigops - - Loading - - src/app/components/transaction/transaction-raw.component.html - 228,230 - - transaction.error.loading-prevouts - - - Preview Transaction - - src/app/components/transaction/transaction-raw.component.ts - 89 - - Preview a transaction to the Bitcoin network using the transaction's raw hex data. @@ -7719,6 +7709,10 @@ src/app/dashboard/dashboard.component.html 364 + + src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts + 133 + src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.html 102 @@ -7727,6 +7721,10 @@ src/app/lightning/statistics-chart/lightning-statistics-chart.component.html 52 + + src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts + 123 + lightning.indexing-in-progress @@ -9045,13 +9043,6 @@ lightning.tor-nodes-excluded - - Lightning Nodes Channels World Map - - src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts - 73 - - See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. @@ -9088,17 +9079,6 @@ 74 - - Indexing in progress - - src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts - 133 - - - src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts - 123 - - Clearnet and Darknet @@ -9797,14 +9777,6 @@ address.bare-multisig - - unknown - - src/app/shared/components/address-type/address-type.component.html - 27 - - unknown - confirmation @@ -9832,15 +9804,6 @@ Transaction replaced state transaction.replaced - - Unconfirmed - - src/app/shared/components/confirmations/confirmations.component.html - 18 - - Transaction unconfirmed state - transaction.unconfirmed - sat/WU From 6b918550e21057f2e5d1e1ec75a9e4b8910d155a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 17:00:41 +0000 Subject: [PATCH 334/534] Bump axios from 1.10.0 to 1.11.0 in /backend Bumps [axios](https://github.com/axios/axios) from 1.10.0 to 1.11.0. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.10.0...v1.11.0) --- updated-dependencies: - dependency-name: axios dependency-version: 1.11.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 18 +++++++++--------- backend/package.json | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 646f2ecfc..4429c4347 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.10.0", + "axios": "1.11.0", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", @@ -2275,12 +2275,12 @@ } }, "node_modules/axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -9534,12 +9534,12 @@ "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==" }, "axios": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", - "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "requires": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, diff --git a/backend/package.json b/backend/package.json index 8174b439e..b62190e6b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -41,7 +41,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.10.0", + "axios": "1.11.0", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", From 49381bd98a5816358c5b3ba76e5da3dd047afaec Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 29 Jul 2025 20:07:50 +0200 Subject: [PATCH 335/534] Update simplicity script to use the correct witness element --- .../components/transactions-list/transactions-list.component.ts | 2 +- frontend/src/app/shared/address-utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 241c39101..e32f099be 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -342,10 +342,10 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { const isScriptSpend = vin.witness.length > (hasAnnex ? 2 : 1); if (isScriptSpend) { const controlBlock = hasAnnex ? vin.witness[vin.witness.length - 2] : vin.witness[vin.witness.length - 1]; - const scriptHex = hasAnnex ? vin.witness[vin.witness.length - 3] : vin.witness[vin.witness.length - 2]; const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; // simplicity script spend if (tapleafVersion === 0xbe) { + const scriptHex = vin.witness[1]; // simplicity program is the second witness element vin.inner_simplicityscript = scriptHex; } } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 69db4cc4a..065837840 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -170,7 +170,7 @@ export class AddressTypeInfo { this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i])); } else if (this.network === 'liquid' || this.network === 'liquidtestnet' && tapleafVersion === 0xbe) { this.simplicity = true; - v.inner_simplicityscript = scriptHex; + v.inner_simplicityscript = v.witness[1]; this.processScript(new ScriptInfo('inner_simplicityscript', scriptHex, null, v.witness, controlBlock, vinIds?.[i])); } } From 45f126a5fa45b85df983ace5b23875449e6b956c Mon Sep 17 00:00:00 2001 From: mononaut <83316221+mononaut@users.noreply.github.com> Date: Wed, 30 Jul 2025 08:52:09 +0000 Subject: [PATCH 336/534] standardize taproot witness treatment --- .../components/transactions-list/transactions-list.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index e32f099be..47ce50c8d 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -342,6 +342,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { const isScriptSpend = vin.witness.length > (hasAnnex ? 2 : 1); if (isScriptSpend) { const controlBlock = hasAnnex ? vin.witness[vin.witness.length - 2] : vin.witness[vin.witness.length - 1]; + const scriptHex = hasAnnex ? vin.witness[vin.witness.length - 3] : vin.witness[vin.witness.length - 2]; // bip341 script element const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; // simplicity script spend if (tapleafVersion === 0xbe) { From 2146b8d1fedf26e8dd9aa291a2b8ec3a3e29f8ad Mon Sep 17 00:00:00 2001 From: mononaut <83316221+mononaut@users.noreply.github.com> Date: Wed, 30 Jul 2025 08:52:24 +0000 Subject: [PATCH 337/534] standardize taproot witness treatment --- .../transactions-list/transactions-list.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 47ce50c8d..39729b7fd 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -346,8 +346,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; // simplicity script spend if (tapleafVersion === 0xbe) { - const scriptHex = vin.witness[1]; // simplicity program is the second witness element - vin.inner_simplicityscript = scriptHex; + vin.inner_simplicityscript = vin.witness[1]; // simplicity program is the second witness element } } } From 8295a0be53d6203c88a3e7f9716ef5f690d57146 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 30 Jul 2025 09:37:52 +0000 Subject: [PATCH 338/534] fix treasury names --- .../treasuries/treasuries-graph/treasuries-graph.component.ts | 4 ++-- .../treasuries/treasuries-pie/treasuries-pie.component.ts | 2 +- .../src/app/components/treasuries/treasuries.component.html | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 09080f7df..3b4cc6ea4 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -170,7 +170,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { this.seriesNameToLabel = {}; for (const treasury of this.treasuries) { - this.seriesNameToLabel[treasury.wallet] = treasury.enterprise || treasury.name; + this.seriesNameToLabel[treasury.wallet] = treasury.name || treasury.enterprise || treasury.wallet; } const legendData = this.treasuries.map(treasury => ({ @@ -301,7 +301,7 @@ export class TreasuriesGraphComponent implements OnInit, OnChanges, OnDestroy { const marker = ``; tooltip += `
    - ${marker} ${treasury.enterprise || treasury.name}: + ${marker} ${treasury.name || treasury.enterprise || treasury.wallet}: ${this.formatBTC(balance)}
    `; } diff --git a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts index b0daae4bb..0219f4642 100644 --- a/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-pie/treasuries-pie.component.ts @@ -115,7 +115,7 @@ export class TreasuriesPieComponent implements OnChanges { }[] = this.treasuries.map((treasury, index) => ({ treasury, id: treasury.wallet, - label: treasury.enterprise || treasury.name, + label: treasury.name || treasury.enterprise || treasury.wallet, balance: this.walletBalance[treasury.wallet], share: (this.walletBalance[treasury.wallet] / total) * 100, color: chartColors[index % chartColors.length], diff --git a/frontend/src/app/components/treasuries/treasuries.component.html b/frontend/src/app/components/treasuries/treasuries.component.html index 9744f37c4..f86a3ccf3 100644 --- a/frontend/src/app/components/treasuries/treasuries.component.html +++ b/frontend/src/app/components/treasuries/treasuries.component.html @@ -23,7 +23,7 @@ {{i + 1}}
    {{ treasury.enterprise || treasury.name }}{{ treasury.name || treasury.enterprise || treasury.wallet }} RTT RTT HeightHybrid Front Back Electrs{{ (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 < maxHeight ? '🟧' : '✅')) }} @if (host.hashes?.[type]) { - {{ host.hashes[type].slice(0, 8) || '?' }} + {{ host.hashes[type].slice(0, 8) || '?' }} } @else { ? } 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 c1b6fe443..63f9f952b 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -17,6 +17,13 @@ export class ServerHealthComponent implements OnInit { interval: number; now: number = Date.now(); + repoMap = { + frontend: 'mempool', + hybrid: 'mempool.space', + backend: 'mempool', + electrs: 'electrs', + }; + constructor( private websocketService: WebsocketService, private stateService: StateService, From 8ea1078d8a994b7cb2713cc7f57d39e590dea3eb Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 4 Aug 2025 11:24:11 +0200 Subject: [PATCH 344/534] Fix scriptsig_asm in coinbase on non-esplora backends --- backend/src/api/bitcoin/bitcoin-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 5f2e2619a..86c1ffdba 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -294,7 +294,7 @@ class BitcoinApi implements AbstractBitcoinApi { is_coinbase: !!vin.coinbase, prevout: null, scriptsig: vin.scriptSig && vin.scriptSig.hex || vin.coinbase || '', - scriptsig_asm: vin.scriptSig && transactionUtils.convertScriptSigAsm(vin.scriptSig.hex) || '', + scriptsig_asm: vin.scriptSig ? transactionUtils.convertScriptSigAsm(vin.scriptSig.hex) : (vin.coinbase ? transactionUtils.convertScriptSigAsm(vin.coinbase) : ''), sequence: vin.sequence, txid: vin.txid || '', vout: vin.vout || 0, From df533ad88b2f980a8523fa1bd04263cead7c681d Mon Sep 17 00:00:00 2001 From: hunicus <93150691+hunicus@users.noreply.github.com> Date: Sat, 22 Feb 2025 10:00:05 -0500 Subject: [PATCH 345/534] Update bull bitcoin logo for 2025 --- .../src/app/components/about/about.component.html | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 671e35ce9..5484342d0 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -140,14 +140,11 @@ Metaplanet - Bull Bitcoin From ac1072170f47eee3c26082b57b2786157968c0a1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 6 Aug 2025 16:47:44 +0200 Subject: [PATCH 346/534] Update conversions rates before sending them to websocket --- backend/src/tasks/price-updater.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 467669a6f..8fa9fc700 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -273,10 +273,6 @@ class PriceUpdater { this.latestPrices.time = Math.round(new Date().getTime() / 1000); logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestPrices)}`); - if (this.ratesChangedCallback) { - this.ratesChangedCallback(this.latestPrices); - } - if (!forceUpdate) { this.cyclePosition++; } @@ -284,6 +280,10 @@ class PriceUpdater { if (this.latestPrices.USD === -1) { this.latestPrices = await PricesRepository.$getLatestConversionRates(); } + + if (this.ratesChangedCallback) { + this.ratesChangedCallback(this.latestPrices); + } } /** From 40f32c83d13b3994df8efc233ea9aca35fa51fc4 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 6 Aug 2025 16:51:39 +0200 Subject: [PATCH 347/534] Log when falling back to latest known price --- backend/src/tasks/price-updater.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 8fa9fc700..75027d07f 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -279,6 +279,7 @@ class PriceUpdater { if (this.latestPrices.USD === -1) { this.latestPrices = await PricesRepository.$getLatestConversionRates(); + logger.warn(`No BTC price available, falling back to latest known price: ${JSON.stringify(this.latestPrices)}`); } if (this.ratesChangedCallback) { From a20d38366475bafa35a8e3e265dd8828f19b0ed1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 6 Aug 2025 17:57:52 +0200 Subject: [PATCH 348/534] Check if latest USD price is valid before updating rates --- backend/src/tasks/price-updater.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 75027d07f..8fd2779cf 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -282,7 +282,7 @@ class PriceUpdater { logger.warn(`No BTC price available, falling back to latest known price: ${JSON.stringify(this.latestPrices)}`); } - if (this.ratesChangedCallback) { + if (this.ratesChangedCallback && this.latestPrices.USD > 0) { this.ratesChangedCallback(this.latestPrices); } } From 1d35c929ed531446793490346fcc8fed08f8306e Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 7 Aug 2025 18:47:32 +0200 Subject: [PATCH 349/534] Fix fiat value in total received amount --- frontend/src/app/components/address/address.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/address/address.component.html b/frontend/src/app/components/address/address.component.html index 5f6f0545a..b1d96a620 100644 --- a/frontend/src/app/components/address/address.component.html +++ b/frontend/src/app/components/address/address.component.html @@ -293,7 +293,7 @@ Total received {{ treasury.name || treasury.enterprise || treasury.wallet }} - + From b59b7f1d5616055a35fc55c4832441f58b2fa69c Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 12 Aug 2025 17:01:54 +0200 Subject: [PATCH 358/534] [accelerator] minor tweak to dashboard `recent` widget to align status --- .../accelerations-list/accelerations-list.component.html | 2 +- .../accelerations-list/accelerations-list.component.scss | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 179d576e5..26cdace5d 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 @@ -1,4 +1,4 @@ -
    +

    Accelerations

    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 7f7f24bd5..9d695ce38 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 @@ -141,7 +141,7 @@ tr, td, th { } .fee { - width: 30%; + width: 25%; text-align: end !important; } @@ -153,7 +153,7 @@ tr, td, th { } .status { - width: 20% + width: 25% } } From 2545ab790ca772a3a58dd9ccddc921a639b109b0 Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 14 Aug 2025 15:09:58 +0200 Subject: [PATCH 359/534] ops: Remove bisq stuff from production folder --- production/README.md | 17 +-------- production/mempool-build-all | 2 - production/mempool-config.bisq.json | 38 ------------------- production/mempool-frontend-config.bitb.json | 3 -- .../mempool-frontend-config.liquid.json | 3 -- .../mempool-frontend-config.mainnet.json | 1 - production/mempool-frontend-config.meta.json | 3 -- production/mempool-frontend-config.onbtc.json | 3 -- production/mempool-frontend-config.river.json | 3 -- .../mempool-frontend-config.strategy.json | 3 -- production/mempool-frontend-config.xxi.json | 3 -- production/newsyslog-mempool-nginx.conf | 2 - production/nginx/location-redirects.conf | 7 ---- 13 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 production/mempool-config.bisq.json diff --git a/production/README.md b/production/README.md index bf281fb1b..997020841 100644 --- a/production/README.md +++ b/production/README.md @@ -1,6 +1,6 @@ # Deploying an Enterprise Production Instance -These instructions are for setting up a serious production Mempool website for Bitcoin (mainnet, testnet, signet), Liquid (mainnet, testnet), and Bisq. +These instructions are for setting up a serious production Mempool website for Bitcoin (mainnet, testnet, signet), Liquid (mainnet, testnet). Again, this setup is no joke—home users should use [one of the other installation methods](../#installation-methods). Support is only provided to project sponsors through [Mempool Enterprise®](https://mempool.space/enterprise). @@ -38,7 +38,6 @@ nvm 3.62T 1.25T 2.38T - - 2% 34% 1.00x ONLINE For maximum flexibility of configuration, I recommend separate partitions for each data folder: ``` Filesystem Size Used Avail Capacity Mounted on -nvm/bisq 766G 1.1G 765G 0% /bisq nvm/bitcoin 766G 648M 765G 0% /bitcoin nvm/bitcoin/blocks 1.1T 375G 765G 33% /bitcoin/blocks nvm/bitcoin/chainstate 770G 4.5G 765G 1% /bitcoin/chainstate @@ -72,7 +71,6 @@ nvm/elements/liquidv1 777G 11G 765G 1% /elements/li nvm/mempool 789G 24G 765G 3% /mempool nvm/mysql 766G 648M 765G 0% /mysql tmpfs 1.0G 1.3M 1.0G 0% /var/cache/nginx -tmpfs 3.0G 1.9G 1.1G 63% /bisq/statsnode-data/btc_mainnet/db/json ``` ### Build Dependencies @@ -124,10 +122,6 @@ HiddenServiceDir /var/db/tor/mempool HiddenServicePort 80 127.0.0.1:81 HiddenServiceVersion 3 -HiddenServiceDir /var/db/tor/bisq -HiddenServicePort 80 127.0.0.1:82 -HiddenServiceVersion 3 - HiddenServiceDir /var/db/tor/liquid HiddenServicePort 80 127.0.0.1:83 HiddenServiceVersion 3 @@ -262,15 +256,6 @@ grant all on mempool_liquidtestnet.* to 'mempool_liquidtestnet'@'localhost' iden ``` -### Bisq - -Build bisq-statsnode normally and run using options like this: -``` -./bisq-statsnode --dumpBlockchainData=true --dumpStatistics=true -``` - -If Bisq is happy, it should dump JSON files for Bisq Markets and BSQ data into `/bisq` for the Mempool backend to use. - ### Mempool After all 3 electrs instances are fully indexed, install your 3 Mempool nodes: diff --git a/production/mempool-build-all b/production/mempool-build-all index 3c566d4ef..35bff9a81 100755 --- a/production/mempool-build-all +++ b/production/mempool-build-all @@ -110,8 +110,6 @@ build_backend() -e "s!__MEMPOOL_LIQUID_PASS__!${MEMPOOL_LIQUID_PASS}!" \ -e "s!__MEMPOOL_LIQUIDTESTNET_USER__!${MEMPOOL_LIQUIDTESTNET_USER}!" \ -e "s!__MEMPOOL_LIQUIDTESTNET_PASS__!${MEMPOOL_LIQUIDTESTNET_PASS}!" \ - -e "s!__MEMPOOL_BISQ_USER__!${MEMPOOL_BISQ_USER}!" \ - -e "s!__MEMPOOL_BISQ_PASS__!${MEMPOOL_BISQ_PASS}!" \ "mempool-config.json" fi npm install --omit=dev --omit=optional || exit 1 diff --git a/production/mempool-config.bisq.json b/production/mempool-config.bisq.json deleted file mode 100644 index 4913cb986..000000000 --- a/production/mempool-config.bisq.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "MEMPOOL": { - "OFFICIAL": true, - "NETWORK": "bisq", - "BACKEND": "esplora", - "HTTP_PORT": 8996, - "MINED_BLOCKS_CACHE": 144, - "API_URL_PREFIX": "/api/v1/", - "POLL_RATE_MS": 2000 - }, - "SYSLOG" : { - "MIN_PRIORITY": "debug" - }, - "CORE_RPC": { - "USERNAME": "__BITCOIN_RPC_USER__", - "PASSWORD": "__BITCOIN_RPC_PASS__" - }, - "ESPLORA": { - "REST_API_URL": "http://127.0.0.1:5000", - "UNIX_SOCKET_PATH": "/bitcoin/socket/esplora-bitcoin-mainnet" - }, - "DATABASE": { - "ENABLED": false, - "HOST": "127.0.0.1", - "SOCKET": "/var/run/mysql/mysql.sock", - "USERNAME": "__MEMPOOL_BISQ_USER__", - "PASSWORD": "__MEMPOOL_BISQ_PASS__", - "DATABASE": "mempool_bisq" - }, - "STATISTICS": { - "ENABLED": true, - "TX_PER_SECOND_SAMPLE_PERIOD": 150 - }, - "BISQ": { - "ENABLED": true, - "DATA_PATH": "/bisq/statsnode-data/btc_mainnet/db" - } -} diff --git a/production/mempool-frontend-config.bitb.json b/production/mempool-frontend-config.bitb.json index 5e79db71d..7a9d0312a 100644 --- a/production/mempool-frontend-config.bitb.json +++ b/production/mempool-frontend-config.bitb.json @@ -4,12 +4,9 @@ "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, diff --git a/production/mempool-frontend-config.liquid.json b/production/mempool-frontend-config.liquid.json index 09bde34a6..c807a76b1 100644 --- a/production/mempool-frontend-config.liquid.json +++ b/production/mempool-frontend-config.liquid.json @@ -5,12 +5,9 @@ "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, "MEMPOOL_BLOCKS_AMOUNT": 2, "KEEP_BLOCKS_AMOUNT": 16 diff --git a/production/mempool-frontend-config.mainnet.json b/production/mempool-frontend-config.mainnet.json index e0cdbf030..7950ada86 100644 --- a/production/mempool-frontend-config.mainnet.json +++ b/production/mempool-frontend-config.mainnet.json @@ -8,7 +8,6 @@ "SIGNET_ENABLED": true, "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, diff --git a/production/mempool-frontend-config.meta.json b/production/mempool-frontend-config.meta.json index dad27de53..67bd73745 100644 --- a/production/mempool-frontend-config.meta.json +++ b/production/mempool-frontend-config.meta.json @@ -4,12 +4,9 @@ "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, diff --git a/production/mempool-frontend-config.onbtc.json b/production/mempool-frontend-config.onbtc.json index f1df1dff5..102828ad4 100644 --- a/production/mempool-frontend-config.onbtc.json +++ b/production/mempool-frontend-config.onbtc.json @@ -4,12 +4,9 @@ "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, diff --git a/production/mempool-frontend-config.river.json b/production/mempool-frontend-config.river.json index e6758f392..c90cc3e31 100644 --- a/production/mempool-frontend-config.river.json +++ b/production/mempool-frontend-config.river.json @@ -4,12 +4,9 @@ "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, diff --git a/production/mempool-frontend-config.strategy.json b/production/mempool-frontend-config.strategy.json index 7ca10da80..f15e3752a 100644 --- a/production/mempool-frontend-config.strategy.json +++ b/production/mempool-frontend-config.strategy.json @@ -4,12 +4,9 @@ "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, diff --git a/production/mempool-frontend-config.xxi.json b/production/mempool-frontend-config.xxi.json index 2aa4645a1..29f1a60d2 100644 --- a/production/mempool-frontend-config.xxi.json +++ b/production/mempool-frontend-config.xxi.json @@ -4,12 +4,9 @@ "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, diff --git a/production/newsyslog-mempool-nginx.conf b/production/newsyslog-mempool-nginx.conf index 876613e1c..0d4d468c4 100644 --- a/production/newsyslog-mempool-nginx.conf +++ b/production/newsyslog-mempool-nginx.conf @@ -1,7 +1,5 @@ /var/log/nginx/access.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 /var/log/nginx/error.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 -/var/log/nginx/bisq-access.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 -/var/log/nginx/bisq-error.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 /var/log/nginx/liquid-access.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 /var/log/nginx/liquid-error.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 /var/log/nginx/mempool-access.log www:www 644 10 * @T00 C /var/run/mempool.pid 30 diff --git a/production/nginx/location-redirects.conf b/production/nginx/location-redirects.conf index d330b9deb..d7ac56394 100644 --- a/production/nginx/location-redirects.conf +++ b/production/nginx/location-redirects.conf @@ -13,13 +13,6 @@ location = /liquidtestnet { return 308; } -# redirect mempool.space/bisq to bisq.markets -location = /bisq { - rewrite /bisq/(.*) https://bisq.markets/$1; - rewrite /bisq https://bisq.markets/; - return 308; -} - # redirect /api to /docs/api location = /api { return 308 https://$host/docs/api; From a41290deafd21c9032aef3d6f1b5ef70d72cc8cc Mon Sep 17 00:00:00 2001 From: wiz Date: Sat, 16 Aug 2025 10:05:29 +0200 Subject: [PATCH 360/534] ops: Tweak start times on elements screens --- production/elements.crontab | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/production/elements.crontab b/production/elements.crontab index 6590dfbd7..c93a982d6 100644 --- a/production/elements.crontab +++ b/production/elements.crontab @@ -1,10 +1,10 @@ # start elements on reboot -@reboot sleep 5 ; /usr/local/bin/elementsd -chain=liquidv1 >/dev/null 2>&1 -@reboot sleep 5 ; /usr/local/bin/elementsd -chain=liquidtestnet >/dev/null 2>&1 +@reboot sleep 15 ; /usr/local/bin/elementsd -chain=liquidv1 >/dev/null 2>&1 +@reboot sleep 25 ; /usr/local/bin/elementsd -chain=liquidtestnet >/dev/null 2>&1 # start electrs on reboot -@reboot sleep 20 ; screen -dmS liquidv1 /elements/electrs/start liquid -@reboot sleep 20 ; screen -dmS liquidtestnet /elements/electrs/start liquidtestnet +@reboot sleep 35 ; screen -dmS liquidv1 /elements/electrs/start liquid +@reboot sleep 45 ; screen -dmS liquidtestnet /elements/electrs/start liquidtestnet # hourly asset update and electrs restart 6 * * * * cd $HOME/asset_registry_db && git pull --quiet origin master && cd $HOME/asset_registry_testnet_db && git pull --quiet origin master && killall electrs From 71e9463a2bf3c53d95d1dded2ea2309273438a43 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 16 Aug 2025 20:32:33 +0200 Subject: [PATCH 361/534] remove console.log --- backend/src/api/services/wallets.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index b7f81af92..95e6e488e 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -180,7 +180,6 @@ class WalletApi { // update list of treasuries const treasuriesResponse = await axios.get(config.MEMPOOL_SERVICES.API + `/treasuries`); - console.log(treasuriesResponse.data); this.treasuries = treasuriesResponse.data || []; } catch (e) { logger.err(`Error updating active wallets: ${(e instanceof Error ? e.message : e)}`); From f97e61a550eb37c8e1a894d8a0abb05806f4907e Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 20 Aug 2025 22:47:40 -0700 Subject: [PATCH 362/534] Tag Docker images as latest when both builds are successful --- .github/workflows/on-tag.yml | 41 +++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index 4a6882b81..18da775b3 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -24,6 +24,9 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 120 name: Build and push to DockerHub + outputs: + image-digest-frontend: ${{ matrix.service == 'frontend' && steps.docker-build.outputs.digest || '' }} + image-digest-backend: ${{ matrix.service == 'backend' && steps.docker-build.outputs.digest || '' }} steps: - name: Replace the current swap file shell: bash @@ -99,15 +102,51 @@ jobs: ${{ runner.os }}-buildx-${{ matrix.service }}- - name: Run Docker buildx for ${{ matrix.service }} against tag + id: docker-build run: | docker buildx build \ --cache-from "type=local,src=/tmp/.buildx-cache" \ --cache-to "type=local,dest=/tmp/.buildx-cache,mode=max" \ --platform linux/amd64,linux/arm64 \ --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ - --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ --build-context rustgbt=./rust \ --build-context backend=./backend \ --output "type=registry,push=true" \ --build-arg commitHash=$SHORT_SHA \ ./${{ matrix.service }}/ + + tag-latest: + needs: build + if: ${{ needs.build.result == 'success' }} + runs-on: ubuntu-latest + timeout-minutes: 30 + name: Tag images as latest + strategy: + matrix: + service: + - frontend + - backend + steps: + - name: Set env variables + run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: linux/amd64,linux/arm64 + + - name: Setup Docker buildx action + uses: docker/setup-buildx-action@v3 + with: + platforms: linux/amd64,linux/arm64 + driver-opts: | + network=host + + - name: Login to Docker Hub + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Tag multi-arch image as latest for ${{ matrix.service }} + run: | + docker buildx imagetools create \ + --tag ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:latest \ + ${{ secrets.DOCKER_HUB_USER }}/${{ matrix.service }}:$TAG \ No newline at end of file From ad8d0214c1f91b95487798246d4c778774bbd786 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Wed, 20 Aug 2025 23:03:18 -0700 Subject: [PATCH 363/534] Remove old tagging workflow --- .../workflows/docker_update_latest_tag.yml | 181 ------------------ 1 file changed, 181 deletions(-) delete mode 100644 .github/workflows/docker_update_latest_tag.yml diff --git a/.github/workflows/docker_update_latest_tag.yml b/.github/workflows/docker_update_latest_tag.yml deleted file mode 100644 index 5d21697d5..000000000 --- a/.github/workflows/docker_update_latest_tag.yml +++ /dev/null @@ -1,181 +0,0 @@ -name: Docker - Update latest tag - -on: - workflow_dispatch: - inputs: - tag: - description: 'The Docker image tag to pull' - required: true - type: string - -jobs: - retag-and-push: - strategy: - matrix: - service: - - frontend - - backend - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3 - id: buildx - with: - install: true - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/amd64,linux/arm64 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_HUB_USER }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Get source image manifest and SHAs - id: source-manifest - run: | - set -e - echo "Fetching source manifest..." - MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }}) - if [ -z "$MANIFEST" ]; then - echo "No manifest found. Assuming single-arch image." - exit 1 - fi - - echo "Original source manifest:" - echo "$MANIFEST" | jq . - - AMD64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest') - ARM64_SHA=$(echo "$MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest') - - if [ -z "$AMD64_SHA" ] || [ -z "$ARM64_SHA" ]; then - echo "Source image is not multi-arch (missing amd64 or arm64)" - exit 1 - fi - - echo "Source amd64 manifest digest: $AMD64_SHA" - echo "Source arm64 manifest digest: $ARM64_SHA" - - echo "amd64_sha=$AMD64_SHA" >> $GITHUB_OUTPUT - echo "arm64_sha=$ARM64_SHA" >> $GITHUB_OUTPUT - - - name: Pull and retag architecture-specific images - run: | - set -e - - docker buildx inspect --bootstrap - - # Remove any existing local images to avoid cache interference - echo "Removing existing local images if they exist..." - docker image rm ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true - - # Pull amd64 image by digest - echo "Pulling amd64 image by digest..." - docker pull --platform linux/amd64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} - PULLED_AMD64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2) - PULLED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} --format '{{.Id}}') - echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST" - echo "Pulled amd64 image ID (sha256): $PULLED_AMD64_IMAGE_ID" - - # Pull arm64 image by digest - echo "Pulling arm64 image by digest..." - docker pull --platform linux/arm64 ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} - PULLED_ARM64_MANIFEST_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{index .RepoDigests 0}}' | cut -d@ -f2) - PULLED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} --format '{{.Id}}') - echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST" - echo "Pulled arm64 image ID (sha256): $PULLED_ARM64_IMAGE_ID" - - # Tag the images - docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 - docker tag ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 - - # Verify tagged images - TAGGED_AMD64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{.Id}}') - TAGGED_ARM64_IMAGE_ID=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{.Id}}') - echo "Tagged amd64 image ID (sha256): $TAGGED_AMD64_IMAGE_ID" - echo "Tagged arm64 image ID (sha256): $TAGGED_ARM64_IMAGE_ID" - - - name: Push architecture-specific images - run: | - set -e - - echo "Pushing amd64 image..." - docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 - PUSHED_AMD64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2) - echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST" - - # Fetch manifest from registry after push - echo "Fetching pushed amd64 manifest from registry..." - PUSHED_AMD64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64) - PUSHED_AMD64_REGISTRY_DIGEST=$(echo "$PUSHED_AMD64_REGISTRY_MANIFEST" | jq -r '.config.digest') - echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST" - - echo "Pushing arm64 image..." - docker push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 - PUSHED_ARM64_DIGEST=$(docker inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 --format '{{index .RepoDigests 0}}' | cut -d@ -f2) - echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST" - - # Fetch manifest from registry after push - echo "Fetching pushed arm64 manifest from registry..." - PUSHED_ARM64_REGISTRY_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64) - PUSHED_ARM64_REGISTRY_DIGEST=$(echo "$PUSHED_ARM64_REGISTRY_MANIFEST" | jq -r '.config.digest') - echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST" - - - name: Create and push multi-arch manifest with original digests - run: | - set -e - - echo "Creating multi-arch manifest with original digests..." - docker manifest create ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest \ - ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.amd64_sha }} \ - ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}@${{ steps.source-manifest.outputs.arm64_sha }} - - echo "Pushing multi-arch manifest..." - docker manifest push ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest - - - name: Clean up intermediate tags - if: success() - run: | - docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-amd64 || true - docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest-arm64 || true - docker rmi ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:${{ github.event.inputs.tag }} || true - - - name: Verify final manifest - run: | - set -e - echo "Fetching final generated manifest..." - FINAL_MANIFEST=$(docker manifest inspect ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest) - echo "Generated final manifest:" - echo "$FINAL_MANIFEST" | jq . - - FINAL_AMD64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="amd64" and .platform.os=="linux") | .digest') - FINAL_ARM64_SHA=$(echo "$FINAL_MANIFEST" | jq -r '.manifests[] | select(.platform.architecture=="arm64" and .platform.os=="linux") | .digest') - - echo "Final amd64 manifest digest: $FINAL_AMD64_SHA" - echo "Final arm64 manifest digest: $FINAL_ARM64_SHA" - - # Compare all digests - echo "Comparing digests..." - echo "Source amd64 digest: ${{ steps.source-manifest.outputs.amd64_sha }}" - echo "Pulled amd64 manifest digest: $PULLED_AMD64_MANIFEST_DIGEST" - echo "Pushed amd64 manifest digest (local): $PUSHED_AMD64_DIGEST" - echo "Pushed amd64 manifest digest (registry): $PUSHED_AMD64_REGISTRY_DIGEST" - echo "Final amd64 digest: $FINAL_AMD64_SHA" - echo "Source arm64 digest: ${{ steps.source-manifest.outputs.arm64_sha }}" - echo "Pulled arm64 manifest digest: $PULLED_ARM64_MANIFEST_DIGEST" - echo "Pushed arm64 manifest digest (local): $PUSHED_ARM64_DIGEST" - echo "Pushed arm64 manifest digest (registry): $PUSHED_ARM64_REGISTRY_DIGEST" - echo "Final arm64 digest: $FINAL_ARM64_SHA" - - if [ "$FINAL_AMD64_SHA" != "${{ steps.source-manifest.outputs.amd64_sha }}" ] || [ "$FINAL_ARM64_SHA" != "${{ steps.source-manifest.outputs.arm64_sha }}" ]; then - echo "Error: Final manifest SHAs do not match source SHAs" - exit 1 - fi - - echo "Successfully created multi-arch ${{ secrets.DOCKER_USERNAME }}/${{ matrix.service }}:latest from ${{ github.event.inputs.tag }}" From 35f031f69d3316fb48c61f8c29f698a4f1b779aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:13:27 +0000 Subject: [PATCH 364/534] Bump brace-expansion from 1.1.11 to 1.1.12 in /unfurler Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- unfurler/package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/unfurler/package-lock.json b/unfurler/package-lock.json index 8f8373a36..e02cf1590 100644 --- a/unfurler/package-lock.json +++ b/unfurler/package-lock.json @@ -482,9 +482,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1233,9 +1233,9 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { "balanced-match": "^1.0.0" } @@ -3105,9 +3105,9 @@ } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3663,9 +3663,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "requires": { "balanced-match": "^1.0.0" } From 6967267328edb8ccd5442daf4805f778285f984f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 15:41:48 +0000 Subject: [PATCH 365/534] Bump pbkdf2 from 3.1.1 to 3.1.3 in /frontend Bumps [pbkdf2](https://github.com/crypto-browserify/pbkdf2) from 3.1.1 to 3.1.3. - [Changelog](https://github.com/browserify/pbkdf2/blob/master/CHANGELOG.md) - [Commits](https://github.com/crypto-browserify/pbkdf2/compare/v3.1.1...v3.1.3) --- updated-dependencies: - dependency-name: pbkdf2 dependency-version: 3.1.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 761 ++++++++++++++----------------------- 1 file changed, 283 insertions(+), 478 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7f100b793..d63ac4d3f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -5694,11 +5694,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -5861,11 +5856,11 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dependencies": { - "array-filter": "^1.0.0" + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7066,15 +7061,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -7095,6 +7089,21 @@ "node": ">= 0.4" } }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8405,22 +8414,6 @@ "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -9022,35 +9015,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -9098,22 +9062,6 @@ "node": ">= 0.4" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es5-ext": { "version": "0.10.64", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", @@ -10283,6 +10231,20 @@ } } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -10701,14 +10663,6 @@ "node": ">=0.10.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -11307,14 +11261,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "node_modules/is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -11326,29 +11272,15 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -11367,20 +11299,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -11462,17 +11380,6 @@ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -11490,17 +11397,6 @@ "lodash.isfinite": "^3.3.2" } }, - "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -11532,21 +11428,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -11558,41 +11439,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -13684,23 +13536,6 @@ "node": ">= 0.4" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -14216,20 +14051,68 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" }, "engines": { "node": ">=0.12" } }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -14408,6 +14291,14 @@ "lodash": "^4.17.14" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", @@ -16316,30 +16207,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -16733,6 +16600,38 @@ "node": ">=0.6.0" } }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -17004,6 +16903,19 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typed-assert": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", @@ -17094,20 +17006,6 @@ "node": ">=0.4.0" } }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", @@ -18124,38 +18022,23 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "node_modules/which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -22272,11 +22155,6 @@ } } }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -22400,11 +22278,11 @@ } }, "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "requires": { - "array-filter": "^1.0.0" + "possible-typed-array-names": "^1.0.0" } }, "aws-sign2": { @@ -23340,15 +23218,14 @@ "optional": true }, "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "requires": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" } }, "call-bind-apply-helpers": { @@ -23360,6 +23237,15 @@ "function-bind": "^1.1.2" } }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -24335,16 +24221,6 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -24832,29 +24708,6 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -24890,16 +24743,6 @@ "hasown": "^2.0.2" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { "version": "0.10.64", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", @@ -25797,6 +25640,14 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "requires": { + "is-callable": "^1.2.7" + } + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -26103,11 +25954,6 @@ } } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -26534,11 +26380,6 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -26547,23 +26388,15 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "requires": { - "call-bind": "^1.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { "version": "2.13.1", @@ -26573,14 +26406,6 @@ "hasown": "^2.0.0" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -26629,11 +26454,6 @@ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -26648,11 +26468,6 @@ "lodash.isfinite": "^3.3.2" } }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" - }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -26672,43 +26487,17 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" + "which-typed-array": "^1.1.16" } }, "is-typedarray": { @@ -28302,17 +28091,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -28694,15 +28472,51 @@ } }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "requires": { + "inherits": "^2.0.1" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "requires": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "pend": { @@ -28826,6 +28640,11 @@ } } }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, "postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", @@ -30260,24 +30079,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -30569,6 +30370,23 @@ "os-tmpdir": "~1.0.2" } }, + "to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -30749,6 +30567,16 @@ "mime-types": "~2.1.24" } }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, "typed-assert": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", @@ -30811,17 +30639,6 @@ } } }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "undeclared-identifiers": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", @@ -31401,35 +31218,23 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" } }, "wildcard": { From 61f57d95c12a3da870c2cacf4445d296e63ba07b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:23:22 +0000 Subject: [PATCH 366/534] Bump sha.js from 2.4.11 to 2.4.12 in /frontend Bumps [sha.js](https://github.com/crypto-browserify/sha.js) from 2.4.11 to 2.4.12. - [Changelog](https://github.com/browserify/sha.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/crypto-browserify/sha.js/compare/v2.4.11...v2.4.12) --- updated-dependencies: - dependency-name: sha.js dependency-version: 2.4.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 54 +++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d63ac4d3f..0c26b48d2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -15549,17 +15549,43 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sha.js/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -29571,12 +29597,20 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "shallow-clone": { From c6530cbce2f09ebd1b22f6569a5512aada618064 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Aug 2025 16:47:51 +0000 Subject: [PATCH 367/534] Bump cipher-base from 1.0.4 to 1.0.6 in /frontend Bumps [cipher-base](https://github.com/crypto-browserify/cipher-base) from 1.0.4 to 1.0.6. - [Changelog](https://github.com/browserify/cipher-base/blob/master/CHANGELOG.md) - [Commits](https://github.com/crypto-browserify/cipher-base/compare/v1.0.4...v1.0.6) --- updated-dependencies: - dependency-name: cipher-base dependency-version: 1.0.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 49 ++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d63ac4d3f..e32d965f6 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7262,14 +7262,36 @@ } }, "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, + "node_modules/cipher-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -23344,12 +23366,19 @@ "optional": true }, "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "clean-stack": { From 99d2a8edf26ad05a43ea2cc73d30965352bfa3ae Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 23 Aug 2025 22:25:20 +0200 Subject: [PATCH 368/534] [menu] add new icon --- frontend/src/app/shared/shared.module.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 565a1d92a..20b72f334 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -1,6 +1,5 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; import { NgbCollapseModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; import { FontAwesomeModule, FaIconLibrary } from '@fortawesome/angular-fontawesome'; import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, faCogs, faDatabase, faExchangeAlt, faInfoCircle, @@ -9,7 +8,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faTimeline, faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen, faPaperclip, faAddressCard, - faMedal, faBug, faFilePdf } from '@fortawesome/free-solid-svg-icons'; + faMedal, faBug, faFilePdf, faPiggyBank } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -478,5 +477,6 @@ export class SharedModule { library.addIcons(faAddressCard); library.addIcons(faBug); library.addIcons(faFilePdf); + library.addIcons(faPiggyBank); } } From 74a3dac43a4bf3f2f0a7198e6562de77b87e383f Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 24 Aug 2025 14:35:09 +0200 Subject: [PATCH 369/534] [menu] add new icons --- frontend/src/app/shared/shared.module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 20b72f334..ed8ab907c 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -8,7 +8,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faTimeline, faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen, faPaperclip, faAddressCard, - faMedal, faBug, faFilePdf, faPiggyBank } from '@fortawesome/free-solid-svg-icons'; + faMedal, faBug, faFilePdf, faPiggyBank, faLayerGroup, faHeart } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -478,5 +478,7 @@ export class SharedModule { library.addIcons(faBug); library.addIcons(faFilePdf); library.addIcons(faPiggyBank); + library.addIcons(faLayerGroup); + library.addIcons(faHeart); } } From c7ded4f6f6f2b8ade69e82eb1d571bc0caa11efd Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 24 Aug 2025 16:40:18 +0200 Subject: [PATCH 370/534] [menu] add new icon --- frontend/src/app/shared/shared.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index ed8ab907c..05ac17e25 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -8,7 +8,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faTimeline, faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard, faMicroscope, faExclamationTriangle, faLockOpen, faPaperclip, faAddressCard, - faMedal, faBug, faFilePdf, faPiggyBank, faLayerGroup, faHeart } from '@fortawesome/free-solid-svg-icons'; + faMedal, faBug, faFilePdf, faPiggyBank, faLayerGroup, faHeart, faCashRegister } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MenuComponent } from '@components/menu/menu.component'; import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; @@ -480,5 +480,6 @@ export class SharedModule { library.addIcons(faPiggyBank); library.addIcons(faLayerGroup); library.addIcons(faHeart); + library.addIcons(faCashRegister); } } From 7d70d1617d1412bc0a566bb12b5e16276eb33788 Mon Sep 17 00:00:00 2001 From: adambor Date: Thu, 10 Jul 2025 18:31:56 +0200 Subject: [PATCH 371/534] Add /tx/:txId/merkle-proof endpoint Fix call to blockchainTransaction_getMerkle Add proper error message passing to handleError() Co-authored-by: softsimon --- .../api/bitcoin/bitcoin-api-abstract-factory.ts | 1 + backend/src/api/bitcoin/bitcoin-api.ts | 4 ++++ backend/src/api/bitcoin/bitcoin.routes.ts | 14 ++++++++++++++ backend/src/api/bitcoin/electrum-api.ts | 5 +++++ backend/src/api/bitcoin/esplora-api.interface.ts | 6 ++++++ backend/src/api/bitcoin/esplora-api.ts | 4 ++++ 6 files changed, 34 insertions(+) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index e246f249d..c40019b10 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -8,6 +8,7 @@ export interface AbstractBitcoinApi { $getMempoolTransactions(txids: string[]): Promise; $getAllMempoolTransactions(lastTxid?: string, max_txs?: number); $getTransactionHex(txId: string): Promise; + $getTransactionMerkleProof(txId: string): Promise; $getBlockHeightTip(): Promise; $getBlockHashTip(): Promise; $getTxIdsForBlock(hash: string): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 86c1ffdba..bad34af02 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -95,6 +95,10 @@ class BitcoinApi implements AbstractBitcoinApi { }); } + $getTransactionMerkleProof(txId: string): Promise { + throw new Error('Method getTransactionMerkleProof not supported by the Bitcoin RPC API.'); + } + $getBlockHeightTip(): Promise { return this.bitcoindClient.getBlockCount(); } diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 3cf2923f1..b60fbef70 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -76,6 +76,7 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/hex', this.getRawTransaction) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/status', this.getTransactionStatus) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', this.getTransactionOutspends) + .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/merkle-proof', this.getTransactionMerkleProof) .get(config.MEMPOOL.API_URL_PREFIX + 'txs/outspends', this.$getBatchedOutspends) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/header', this.getBlockHeader) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/hash', this.getBlockTipHash) @@ -921,6 +922,19 @@ class BitcoinRoutes { } } + private async getTransactionMerkleProof(req: Request, res: Response): Promise { + if (!TXID_REGEX.test(req.params.txId)) { + handleError(req, res, 501, `Invalid transaction ID`); + return; + } + try { + const result = await bitcoinApi.$getTransactionMerkleProof(req.params.txId); + res.json(result); + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : 'Failed to get transaction merkle proof'); + } + } + private getDifficultyChange(req: Request, res: Response) { try { const da = difficultyAdjustment.getDifficultyAdjustment(); diff --git a/backend/src/api/bitcoin/electrum-api.ts b/backend/src/api/bitcoin/electrum-api.ts index 07c58dbc9..78d84c751 100644 --- a/backend/src/api/bitcoin/electrum-api.ts +++ b/backend/src/api/bitcoin/electrum-api.ts @@ -197,6 +197,11 @@ class BitcoindElectrsApi extends BitcoinApi implements AbstractBitcoinApi { } } + async $getTransactionMerkleProof(txId: string): Promise { + const tx = await this.$getRawTransaction(txId); + return this.electrumClient.blockchainTransaction_getMerkle(txId, tx.status.block_height); + } + private $getScriptHashBalance(scriptHash: string): Promise { return this.electrumClient.blockchainScripthash_getBalance(this.encodeScriptHash(scriptHash)); } diff --git a/backend/src/api/bitcoin/esplora-api.interface.ts b/backend/src/api/bitcoin/esplora-api.interface.ts index 13fb3526d..b60828367 100644 --- a/backend/src/api/bitcoin/esplora-api.interface.ts +++ b/backend/src/api/bitcoin/esplora-api.interface.ts @@ -186,4 +186,10 @@ export namespace IEsploraApi { time: number; tx_position?: number; } + + export interface MerkleProof { + merkle: string[]; + block_height: number; + pos: number; + } } diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index 950bb18b4..d84d94ec4 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -396,6 +396,10 @@ class ElectrsApi implements AbstractBitcoinApi { return this.failoverRouter.$get('/tx/' + txId + '/hex'); } + $getTransactionMerkleProof(txId: string): Promise { + return this.failoverRouter.$get('/tx/' + txId + '/merkle-proof'); + } + $getBlockHeightTip(): Promise { return this.failoverRouter.$get('/blocks/tip/height'); } From e45a50a982fc979582d24ebd5f1ab30f40d4b08e Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Tue, 26 Aug 2025 22:02:38 -0700 Subject: [PATCH 372/534] Cache rust and npm deps --- .github/workflows/ci.yml | 61 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 976fe5a7a..c3118ecec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,12 +29,37 @@ jobs: with: node-version: ${{ matrix.node }} registry-url: "https://registry.npmjs.org" + cache: 'npm' + cache-dependency-path: '${{ matrix.node }}/${{ matrix.flavor }}/backend/package-lock.json' + + - name: Cache node modules + uses: actions/cache@v4 + with: + path: ${{ matrix.node }}/${{ matrix.flavor }}/backend/node_modules + key: ${{ runner.os }}-backend-${{ matrix.flavor }}-node-${{ matrix.node }}-${{ hashFiles('${{ matrix.node }}/${{ matrix.flavor }}/backend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-backend-${{ matrix.flavor }}-node-${{ matrix.node }}- + ${{ runner.os }}-backend-${{ matrix.flavor }}- - name: Read rust-toolchain file from repository id: gettoolchain run: echo "::set-output name=toolchain::$(cat ./rust/gbt/rust-toolchain)" working-directory: ${{ matrix.node }}/${{ matrix.flavor }} + - name: Cache Rust dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + ${{ matrix.node }}/${{ matrix.flavor }}/rust/gbt/target/ + key: ${{ runner.os }}-cargo-${{ matrix.flavor }}-${{ hashFiles('${{ matrix.node }}/${{ matrix.flavor }}/rust/gbt/**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-${{ matrix.flavor }}- + ${{ runner.os }}-cargo- + - name: Install ${{ steps.gettoolchain.outputs.toolchain }} Rust toolchain # Latest version available on this commit is 1.71.1 # Commit date is Aug 3, 2023 @@ -69,6 +94,9 @@ jobs: cache: name: "Cache assets for builds" + strategy: + matrix: + node: ["22.14.0"] runs-on: ubuntu-latest steps: - name: Checkout @@ -81,6 +109,17 @@ jobs: with: node-version: ${{ matrix.node }} registry-url: "https://registry.npmjs.org" + cache: 'npm' + cache-dependency-path: 'assets/frontend/package-lock.json' + + - name: Cache node modules for frontend + uses: actions/cache@v4 + with: + path: assets/frontend/node_modules + key: ${{ runner.os }}-cache-frontend-node-${{ matrix.node }}-${{ hashFiles('assets/frontend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-cache-frontend-node-${{ matrix.node }}- + ${{ runner.os }}-cache-frontend- - name: Install (Prod dependencies only) run: npm ci --omit=dev --omit=optional @@ -180,6 +219,17 @@ jobs: with: node-version: ${{ matrix.node }} registry-url: "https://registry.npmjs.org" + cache: 'npm' + cache-dependency-path: '${{ matrix.node }}/${{ matrix.flavor }}/frontend/package-lock.json' + + - name: Cache node modules + uses: actions/cache@v4 + with: + path: ${{ matrix.node }}/${{ matrix.flavor }}/frontend/node_modules + key: ${{ runner.os }}-frontend-${{ matrix.flavor }}-node-${{ matrix.node }}-${{ hashFiles('${{ matrix.node }}/${{ matrix.flavor }}/frontend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-frontend-${{ matrix.flavor }}-node-${{ matrix.node }}- + ${{ runner.os }}-frontend-${{ matrix.flavor }}- - name: Install (Prod dependencies only) run: npm ci --omit=dev --omit=optional @@ -270,6 +320,15 @@ jobs: cache: "npm" cache-dependency-path: ${{ matrix.module }}/frontend/package-lock.json + - name: Cache node modules for e2e + uses: actions/cache@v4 + with: + path: ${{ matrix.module }}/frontend/node_modules + key: ${{ runner.os }}-e2e-${{ matrix.module }}-node-22-${{ hashFiles('${{ matrix.module }}/frontend/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-e2e-${{ matrix.module }}-node-22- + ${{ runner.os }}-e2e-${{ matrix.module }}- + - name: Restore cached mining pool assets continue-on-error: true id: cache-mining-pool-restore @@ -405,4 +464,4 @@ jobs: - name: Validate JSON syntax run: | cat mempool-config.json | jq - working-directory: docker/docker/backend \ No newline at end of file + working-directory: docker/docker/backend From 856f16497c88507f8d244acee77523872f4943bb Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 27 Aug 2025 12:28:13 +0000 Subject: [PATCH 373/534] always serve latest good prices --- backend/src/tasks/price-updater.ts | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 2cf0fbdb4..581a40a22 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -56,6 +56,7 @@ class PriceUpdater { private feeds: PriceFeed[] = []; private currencies: string[] = ['USD', 'EUR', 'GBP', 'CAD', 'CHF', 'AUD', 'JPY']; private latestPrices: ApiPrice; + private latestGoodPrices: ApiPrice; private currencyConversionFeed: ConversionFeed | undefined; private newCurrencies: string[] = ['BGN', 'BRL', 'CNY', 'CZK', 'DKK', 'HKD', 'HRK', 'HUF', 'IDR', 'ILS', 'INR', 'ISK', 'KRW', 'MXN', 'MYR', 'NOK', 'NZD', 'PHP', 'PLN', 'RON', 'RUB', 'SEK', 'SGD', 'THB', 'TRY', 'ZAR']; private lastTimeConversionsRatesFetched: number = 0; @@ -64,6 +65,7 @@ class PriceUpdater { constructor() { this.latestPrices = this.getEmptyPricesObj(); + this.latestGoodPrices = this.getEmptyPricesObj(); this.feeds.push(new BitflyerApi()); // Does not have historical endpoint this.feeds.push(new KrakenApi()); @@ -76,7 +78,7 @@ class PriceUpdater { } public getLatestPrices(): ApiPrice { - return this.latestPrices; + return this.latestGoodPrices; } public getEmptyPricesObj(): ApiPrice { @@ -128,6 +130,7 @@ class PriceUpdater { */ public async $initializeLatestPriceWithDb(): Promise { this.latestPrices = await PricesRepository.$getLatestConversionRates(); + this.latestGoodPrices = JSON.parse(JSON.stringify(this.latestPrices)); } public async $run(): Promise { @@ -179,6 +182,14 @@ class PriceUpdater { this.running = false; } + private setLatestPrice(currency, price): void { + this.latestPrices[currency] = price; + if (price ?? price > -1) { + this.latestGoodPrices[currency] = price; + this.latestGoodPrices.time = Math.round(new Date().getTime() / 1000); + } + } + private getMillisecondsSinceBeginningOfHour(): number { const now = new Date(); const beginningOfHour = new Date(now); @@ -245,16 +256,16 @@ class PriceUpdater { // Compute average price, non weighted prices = prices.filter(price => price > 0); if (prices.length === 0) { - this.latestPrices[currency] = -1; + this.setLatestPrice(currency, -1); } else { - this.latestPrices[currency] = Math.round(getMedian(prices)); + this.setLatestPrice(currency, Math.round(getMedian(prices))); } } if (config.FIAT_PRICE.API_KEY && this.latestPrices.USD > 0 && Object.keys(this.latestConversionsRatesFromFeed).length > 0) { for (const conversionCurrency of this.newCurrencies) { if (this.latestConversionsRatesFromFeed[conversionCurrency] > 0 && this.latestPrices.USD * this.latestConversionsRatesFromFeed[conversionCurrency] < MAX_PRICES[conversionCurrency]) { - this.latestPrices[conversionCurrency] = Math.round(this.latestPrices.USD * this.latestConversionsRatesFromFeed[conversionCurrency]); + this.setLatestPrice(conversionCurrency, Math.round(this.latestPrices.USD * this.latestConversionsRatesFromFeed[conversionCurrency])); } } } @@ -277,14 +288,13 @@ class PriceUpdater { } if (this.latestPrices.USD === -1) { - this.latestPrices = await PricesRepository.$getLatestConversionRates(); - logger.warn(`No BTC price available, falling back to latest known price: ${JSON.stringify(this.latestPrices)}`); + logger.warn(`No BTC price available, falling back to latest known price: ${JSON.stringify(this.latestGoodPrices)}`); } else { - logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestPrices)}`); + logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestGoodPrices)}`); } - if (this.ratesChangedCallback && this.latestPrices.USD > 0) { - this.ratesChangedCallback(this.latestPrices); + if (this.ratesChangedCallback && this.latestGoodPrices.USD > 0) { + this.ratesChangedCallback(this.latestGoodPrices); } } From 53f8665b506aa822ade12a8302d5dc1e92d3f4a5 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Sep 2025 14:37:14 +0000 Subject: [PATCH 374/534] fix price update condition --- backend/src/tasks/price-updater.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/tasks/price-updater.ts b/backend/src/tasks/price-updater.ts index 581a40a22..a97501221 100644 --- a/backend/src/tasks/price-updater.ts +++ b/backend/src/tasks/price-updater.ts @@ -184,7 +184,7 @@ class PriceUpdater { private setLatestPrice(currency, price): void { this.latestPrices[currency] = price; - if (price ?? price > -1) { + if (price > 0) { this.latestGoodPrices[currency] = price; this.latestGoodPrices.time = Math.round(new Date().getTime() / 1000); } From 96f787702c5e2a98cf4e3aea5d94d0bab6e8ffc1 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 4 Sep 2025 23:39:42 +0000 Subject: [PATCH 375/534] fix sync-assets.js bugs --- frontend/sync-assets.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/frontend/sync-assets.js b/frontend/sync-assets.js index 4164efff6..9614dd7f9 100644 --- a/frontend/sync-assets.js +++ b/frontend/sync-assets.js @@ -61,6 +61,12 @@ try { } function download(filename, url) { + if (!filename || !url) { + if (verbose) { + console.log('skipping malformed download request: ', filename, url); + } + return; + } https.get(url, (response) => { if (response.statusCode < 200 || response.statusCode > 299) { throw new Error('HTTP Error ' + response.statusCode + ' while fetching \'' + filename + '\''); @@ -122,6 +128,9 @@ function downloadMiningPoolLogos$() { } let downloadedCount = 0; for (const poolLogo of poolLogos) { + if (poolLogo.type !== 'file' || poolLogo.download_url == null) { + continue; + } if (verbose) { console.log(`${LOG_TAG} Processing ${poolLogo.name}`); } @@ -217,6 +226,9 @@ function downloadPromoVideoSubtiles$() { } let downloadedCount = 0; for (const language of videoLanguages) { + if (language.type !== 'file' || language.download_url == null) { + continue; + } if (verbose) { console.log(`${LOG_TAG} Processing ${language.name}`); } @@ -253,7 +265,7 @@ function downloadPromoVideoSubtiles$() { let download_url = language.download_url; if (MEMPOOL_CDN) { - download_url = downloadownload_url = download_url.replace("raw.githubusercontent.com/mempool/mempool-promo/master/subtitles", "mempool.space/resources/promo-video"); + download_url = download_url.replace("raw.githubusercontent.com/mempool/mempool-promo/master/subtitles", "mempool.space/resources/promo-video"); } if (DRY_RUN) { console.log(`${LOG_TAG} \tDRY_RUN is set, not downloading ${language.name} but we should`); From 39ad4280cd759b6ab24ab754fc027958713c165a Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 5 Sep 2025 11:50:02 +0200 Subject: [PATCH 376/534] [accelerator] use unique wording for acceleration confirmation --- .../accelerate-checkout.component.html | 12 ++---------- .../app/components/tracker/tracker.component.html | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) 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 4e40fd639..339a0a196 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -572,22 +572,14 @@

    - @if (accelerationResponse) { - Your transaction is being accelerated! - } @else { - Transaction is already being accelerated! - } + Transaction is being accelerated!

    - @if (accelerationResponse) { - Your transaction has been accepted for acceleration by our mining pool partners. - } @else { - Transaction has already been accepted for acceleration by our mining pool partners. - } + Transaction has been accepted for acceleration by our mining pool partners.
    @if (accelerationResponse?.receiptUrl) {
    diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index b324062e9..35b8975b0 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -141,7 +141,7 @@
    - Your transaction has been accelerated + Transaction has been accelerated @if (paymentReceiptUrl) { Get a receipt. } From 3d325edc8a691747e3e8abb22d190e84c4097efd Mon Sep 17 00:00:00 2001 From: natsoni Date: Fri, 29 Aug 2025 16:32:50 +0200 Subject: [PATCH 377/534] Add FAQ link for block child earlier than parent --- .../blockchain-blocks.component.html | 6 +++++- .../blockchain-blocks.component.scss | 11 +++++++++++ .../blockchain-blocks.component.ts | 13 ++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) 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 a784ae24e..ed42a874f 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -56,7 +56,11 @@ {{ i }} transactions
    -
    + + + + +
    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 5c2a5ab5a..0ab50c4bd 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss @@ -25,6 +25,17 @@ font-weight: normal; } +.timestamp-info { + color: #fff; + position: relative; + z-index: 11; + font-size: 14px; + margin-left: 4px; + transition: color 0.15s ease-in-out; + &:hover { + color: var(--info); + } +} .on-pool { align-items: center; 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 008ab1052..85fd031bc 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -431,4 +431,15 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { } return 0; } -} + + isEarlierThanParent(index: number): boolean { + const block = this.blocks[index]; + const parent = this.blocks[index + 1]; + + if (!block || !parent) { + return false; + } + + return block.timestamp < parent.timestamp; + } +} \ No newline at end of file From 1fa67fa79c04f5c053a58e399ad69776d260f3ac Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 12 Aug 2025 11:33:35 +0000 Subject: [PATCH 378/534] Expose chain tips in public API --- backend/src/api/bitcoin/bitcoin.routes.ts | 16 ++++++++++++++++ backend/src/api/chain-tips.ts | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index b60fbef70..a97cc057b 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -22,6 +22,7 @@ import rbfCache from '../rbf-cache'; import { calculateMempoolTxCpfp } from '../cpfp'; import { handleError } from '../../utils/api'; import poolsUpdater from '../../tasks/pools-updater'; +import chainTips from '../chain-tips'; const TXID_REGEX = /^[a-f0-9]{64}$/i; const BLOCK_HASH_REGEX = /^[a-f0-9]{64}$/i; @@ -55,6 +56,7 @@ class BitcoinRoutes { .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)) + .get(config.MEMPOOL.API_URL_PREFIX + 'chain-tips', this.getChainTips.bind(this)) .post(config.MEMPOOL.API_URL_PREFIX + 'prevouts', this.$getPrevouts) .post(config.MEMPOOL.API_URL_PREFIX + 'cpfp', this.getCpfpLocalTxs) // Temporarily add txs/package endpoint for all backends until esplora supports it @@ -524,6 +526,20 @@ class BitcoinRoutes { } } + private async getChainTips(req: Request, res: Response) { + try { + if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) { // Bitcoin + res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); + res.json(chainTips.getChainTips()); + } else { // Liquid + handleError(req, res, 404, `This API is only available for Bitcoin networks`); + return; + } + } catch (e) { + handleError(req, res, 500, 'Failed to get chain tips'); + } + } + private async getLegacyBlocks(req: Request, res: Response) { try { const returnBlocks: IEsploraApi.Block[] = []; diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index b7fd05ad8..2ed9403fc 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -86,6 +86,10 @@ class ChainTips { return this.orphansByHeight[height] || []; } + + public getChainTips(): ChainTip[] { + return this.chainTips; + } } export default new ChainTips(); \ No newline at end of file From cbdd01dd06ac3f9d3459bab05069d52fdf301396 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 8 Sep 2025 09:46:51 +0000 Subject: [PATCH 379/534] Send 503 when chain tips aren't available --- backend/src/api/bitcoin/bitcoin.routes.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index a97cc057b..1cfb03215 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -530,7 +530,13 @@ class BitcoinRoutes { try { if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK)) { // Bitcoin res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); - res.json(chainTips.getChainTips()); + const tips = await chainTips.getChainTips(); + if (tips.length > 0) { + res.json(tips); + } else { + handleError(req, res, 503, `Temporarily unavailable`); + return; + } } else { // Liquid handleError(req, res, 404, `This API is only available for Bitcoin networks`); return; From 3bdc92404b828d2b409ecb092a76bf312722fd89 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sun, 7 Sep 2025 18:29:09 +0200 Subject: [PATCH 380/534] [accelerator] we don't need to start a new price subscription at checkout --- .../accelerate-checkout.component.ts | 31 +++++-------------- 1 file changed, 7 insertions(+), 24 deletions(-) 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 4d9938bcc..f6f362b90 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -479,14 +479,12 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } this.processing = true; - this.conversionsSubscription = this.stateService.conversions$.subscribe( - async (conversions) => { - this.conversions = conversions; + if (this.applePay) { this.applePay.destroy(); } - const costUSD = this.cost / 100_000_000 * conversions.USD; + const costUSD = this.cost / 100_000_000 * this.conversions.USD; const paymentRequest = this.payments.paymentRequest({ countryCode: 'US', currencyCode: 'USD', @@ -585,8 +583,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.processing = false; console.error(e); } - } - ); } /** @@ -601,14 +597,12 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } 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 costUSD = this.cost / 100_000_000 * this.conversions.USD; const paymentRequest = this.payments.paymentRequest({ countryCode: 'US', currencyCode: 'USD', @@ -710,8 +704,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.isCheckoutLocked--; } }); - } - ); } /** @@ -726,11 +718,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } this.processing = true; - this.conversionsSubscription = this.stateService.conversions$.subscribe( - async (conversions) => { - this.conversions = conversions; - const costUSD = this.cost / 100_000_000 * conversions.USD; + const costUSD = this.cost / 100_000_000 * this.conversions.USD; if (this.isCheckoutLocked > 0) { return; } @@ -815,8 +804,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.isCheckoutLocked--; this.isTokenizing--; } - } - ); } /** @@ -831,15 +818,13 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } this.processing = true; - this.conversionsSubscription = this.stateService.conversions$.subscribe( - async (conversions) => { - this.conversions = conversions; + if (this.cashAppPay) { this.cashAppPay.destroy(); } const redirectHostname = document.location.hostname === 'localhost' ? `http://localhost:4200`: `https://${document.location.hostname}`; - const costUSD = this.cost / 100_000_000 * conversions.USD; + const costUSD = this.cost / 100_000_000 * this.conversions.USD; const paymentRequest = this.payments.paymentRequest({ countryCode: 'US', currencyCode: 'USD', @@ -902,8 +887,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }); } }); - } - ); } /** From 27e88920c7e60609cee41b8a6e4ab29b4b82c989 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 8 Sep 2025 18:22:17 +0200 Subject: [PATCH 381/534] [accelerator] we don't need to stop the price subscription --- .../accelerate-checkout.component.ts | 12 ------------ 1 file changed, 12 deletions(-) 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 f6f362b90..9cb563a68 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -474,9 +474,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.processing) { return; } - if (this.conversionsSubscription) { - this.conversionsSubscription.unsubscribe(); - } this.processing = true; @@ -592,9 +589,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.processing) { return; } - if (this.conversionsSubscription) { - this.conversionsSubscription.unsubscribe(); - } this.processing = true; @@ -713,9 +707,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.processing) { return; } - if (this.conversionsSubscription) { - this.conversionsSubscription.unsubscribe(); - } this.processing = true; @@ -813,9 +804,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.processing) { return; } - if (this.conversionsSubscription) { - this.conversionsSubscription.unsubscribe(); - } this.processing = true; From fedcb25882798c52c4e39b93703708702dc71065 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 8 Sep 2025 18:23:49 +0200 Subject: [PATCH 382/534] [login/signup] polish redirects --- .../github-login.component/github-login.component.ts | 4 ++-- .../app/components/twitter-login/twitter-login.component.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/github-login.component/github-login.component.ts b/frontend/src/app/components/github-login.component/github-login.component.ts index 52f2584b9..3abfaa7a3 100644 --- a/frontend/src/app/components/github-login.component/github-login.component.ts +++ b/frontend/src/app/components/github-login.component/github-login.component.ts @@ -6,7 +6,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; export class GithubLogin { @Input() width: string | null = null; @Input() customClass: string | null = null; - @Input() buttonString: string= 'unset'; + @Input() buttonString: string = 'unset'; @Input() redirectTo: string | null = null; @Output() clicked = new EventEmitter(); @Input() disabled: boolean = false; @@ -18,7 +18,7 @@ export class GithubLogin { if (this.redirectTo) { location.replace(`/api/v1/services/auth/login/github?redirectTo=${encodeURIComponent(this.redirectTo)}`); } else { - location.replace(`/api/v1/services/auth/login/github?redirectTo=${location.href}`); + location.replace(`/api/v1/services/auth/login/github?redirectTo`); } return false; } diff --git a/frontend/src/app/components/twitter-login/twitter-login.component.ts b/frontend/src/app/components/twitter-login/twitter-login.component.ts index 17583b00e..f9a72ab54 100644 --- a/frontend/src/app/components/twitter-login/twitter-login.component.ts +++ b/frontend/src/app/components/twitter-login/twitter-login.component.ts @@ -18,7 +18,7 @@ export class TwitterLogin { if (this.redirectTo) { location.replace(`/api/v1/services/auth/login/twitter?redirectTo=${encodeURIComponent(this.redirectTo)}`); } else { - location.replace(`/api/v1/services/auth/login/twitter?redirectTo=${location.href}`); + location.replace(`/api/v1/services/auth/login/twitter`); } return false; } From 64e82157b31fc97db237ed8b208a60292e7e3d9c Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 8 Sep 2025 21:23:19 +0200 Subject: [PATCH 383/534] [axios] bump timeouts from 10000 ms to 20000 ms --- backend/src/utils/axios-query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/utils/axios-query.ts b/backend/src/utils/axios-query.ts index e641d3ce9..3a92cd94d 100644 --- a/backend/src/utils/axios-query.ts +++ b/backend/src/utils/axios-query.ts @@ -18,7 +18,7 @@ export async function query(path, throwOnFail: boolean = false): Promise Date: Tue, 9 Sep 2025 00:12:42 +0200 Subject: [PATCH 384/534] Add /utxo endpoint --- .../bitcoin/bitcoin-api-abstract-factory.ts | 2 + backend/src/api/bitcoin/bitcoin-api.ts | 8 ++++ backend/src/api/bitcoin/bitcoin.routes.ts | 48 +++++++++++++++++++ .../src/api/bitcoin/electrum-api.interface.ts | 7 +++ backend/src/api/bitcoin/electrum-api.ts | 46 ++++++++++++++++++ .../src/api/bitcoin/esplora-api.interface.ts | 12 +++++ backend/src/api/bitcoin/esplora-api.ts | 8 ++++ 7 files changed, 131 insertions(+) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index c40019b10..7fdcc153f 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -19,9 +19,11 @@ export interface AbstractBitcoinApi { $getRawBlock(hash: string): Promise; $getAddress(address: string): Promise; $getAddressTransactions(address: string, lastSeenTxId: string): Promise; + $getAddressUtxos(address: string): Promise; $getAddressPrefix(prefix: string): string[]; $getScriptHash(scripthash: string): Promise; $getScriptHashTransactions(address: string, lastSeenTxId: string): Promise; + $getScriptHashUtxos(scripthash: string): Promise; $sendRawTransaction(rawTransaction: string): Promise; $testMempoolAccept(rawTransactions: string[], maxfeerate?: number): Promise; $submitPackage(rawTransactions: string[], maxfeerate?: number, maxburnamount?: number): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index bad34af02..76ccc5825 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -153,6 +153,10 @@ class BitcoinApi implements AbstractBitcoinApi { throw new Error('Method getAddressTransactions not supported by the Bitcoin RPC API.'); } + $getAddressUtxos(address: string): Promise { + throw new Error('Method getAddressUtxos not supported by the Bitcoin RPC API.'); + } + $getScriptHash(scripthash: string): Promise { throw new Error('Method getScriptHash not supported by the Bitcoin RPC API.'); } @@ -161,6 +165,10 @@ class BitcoinApi implements AbstractBitcoinApi { throw new Error('Method getScriptHashTransactions not supported by the Bitcoin RPC API.'); } + $getScriptHashUtxos(scripthash: string): Promise { + throw new Error('Method getScriptHashUtxos not supported by the Bitcoin RPC API.'); + } + $getRawMempool(): Promise { return this.bitcoindClient.getRawMemPool(); } diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 1cfb03215..334382a32 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -90,9 +90,11 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address', this.getAddress) .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs', this.getAddressTransactions) .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs/summary', this.getAddressTransactionSummary) + .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/utxo', this.getAddressUtxo) .get(config.MEMPOOL.API_URL_PREFIX + 'scripthash/:scripthash', this.getScriptHash) .get(config.MEMPOOL.API_URL_PREFIX + 'scripthash/:scripthash/txs', this.getScriptHashTransactions) .get(config.MEMPOOL.API_URL_PREFIX + 'scripthash/:scripthash/txs/summary', this.getScriptHashTransactionSummary) + .get(config.MEMPOOL.API_URL_PREFIX + 'scripthash/:scripthash/utxo', this.getScriptHashUtxo) .get(config.MEMPOOL.API_URL_PREFIX + 'address-prefix/:prefix', this.getAddressPrefix) ; } @@ -667,6 +669,28 @@ class BitcoinRoutes { } } + private async getAddressUtxo(req: Request, res: Response): Promise { + if (config.MEMPOOL.BACKEND === 'none') { + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); + return; + } + if (!ADDRESS_REGEX.test(req.params.address)) { + handleError(req, res, 501, `Invalid address`); + return; + } + + try { + const addressData = await bitcoinApi.$getAddressUtxos(req.params.address); + res.json(addressData); + } catch (e) { + if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { + handleError(req, res, 413, e.message); + return; + } + handleError(req, res, 500, 'Failed to get address'); + } + } + private async getAddressTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { handleError(req, res, 405, 'Address summary lookups require mempool/electrs backend.'); @@ -726,6 +750,30 @@ class BitcoinRoutes { } } + private async getScriptHashUtxo(req: Request, res: Response): Promise { + if (config.MEMPOOL.BACKEND === 'none') { + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); + return; + } + if (!SCRIPT_HASH_REGEX.test(req.params.scripthash)) { + handleError(req, res, 501, `Invalid scripthash`); + return; + } + + try { + // electrum expects scripthashes in little-endian + const electrumScripthash = req.params.scripthash.match(/../g)?.reverse().join('') ?? ''; + const addressData = await bitcoinApi.$getScriptHashUtxos(electrumScripthash); + res.json(addressData); + } catch (e) { + if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { + handleError(req, res, 413, e.message); + return; + } + handleError(req, res, 500, 'Failed to get script hash'); + } + } + private async getScriptHashTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { handleError(req, res, 405, 'Scripthash summary lookups require mempool/electrs backend.'); diff --git a/backend/src/api/bitcoin/electrum-api.interface.ts b/backend/src/api/bitcoin/electrum-api.interface.ts index 633de3cbc..8c10bc646 100644 --- a/backend/src/api/bitcoin/electrum-api.interface.ts +++ b/backend/src/api/bitcoin/electrum-api.interface.ts @@ -9,4 +9,11 @@ export namespace IElectrumApi { tx_hash: string; fee?: number; } + + export interface ScriptHashUtxos { + tx_pos: number; + value: number; + tx_hash: string; + height: number; + } } diff --git a/backend/src/api/bitcoin/electrum-api.ts b/backend/src/api/bitcoin/electrum-api.ts index 78d84c751..681efb7b0 100644 --- a/backend/src/api/bitcoin/electrum-api.ts +++ b/backend/src/api/bitcoin/electrum-api.ts @@ -160,6 +160,14 @@ class BitcoindElectrsApi extends BitcoinApi implements AbstractBitcoinApi { } } + async $getAddressUtxos(address: string): Promise { + const addressInfo = await this.bitcoindClient.validateAddress(address); + if (!addressInfo || !addressInfo.isvalid) { + return []; + } + return await this.$getScriptHashUtxos(addressInfo.scriptPubKey); + } + async $getScriptHashTransactions(scripthash: string, lastSeenTxId?: string): Promise { try { loadingIndicators.setProgress('address-' + scripthash, 0); @@ -197,6 +205,44 @@ class BitcoindElectrsApi extends BitcoinApi implements AbstractBitcoinApi { } } + async $getScriptHashUtxos(scripthash: string): Promise { + const utxos = await this.$getScriptHashUnspent(scripthash); + const result: IEsploraApi.UTXO[] = []; + for(let utxo of utxos) { + if(utxo.height===0) { + //Unconfirmed + result.push({ + txid: utxo.tx_hash, + vout: utxo.tx_pos, + status: { + confirmed: false + }, + value: utxo.value + }); + } else { + //Confirmed + const blockHash = await this.$getBlockHash(utxo.height); + const block = await this.$getBlock(blockHash); + result.push({ + txid: utxo.tx_hash, + vout: utxo.tx_pos, + status: { + confirmed: true, + block_height: utxo.height, + block_hash: blockHash, + block_time: block.timestamp + }, + value: utxo.value + }); + } + } + return result; + } + + private $getScriptHashUnspent(scriptHash: string): Promise { + return this.electrumClient.blockchainScripthash_listunspent(this.encodeScriptHash(scriptHash)); + } + async $getTransactionMerkleProof(txId: string): Promise { const tx = await this.$getRawTransaction(txId); return this.electrumClient.blockchainTransaction_getMerkle(txId, tx.status.block_height); diff --git a/backend/src/api/bitcoin/esplora-api.interface.ts b/backend/src/api/bitcoin/esplora-api.interface.ts index b60828367..6fa0bd59a 100644 --- a/backend/src/api/bitcoin/esplora-api.interface.ts +++ b/backend/src/api/bitcoin/esplora-api.interface.ts @@ -192,4 +192,16 @@ export namespace IEsploraApi { block_height: number; pos: number; } + + export interface UTXO { + txid: string; + vout: number; + status: { + confirmed: boolean; + block_height?: number; + block_hash?: string; + block_time?: number; + }, + value: number; + } } diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index d84d94ec4..b6bde0d10 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -441,6 +441,10 @@ class ElectrsApi implements AbstractBitcoinApi { throw new Error('Method getAddressTransactions not implemented.'); } + $getAddressUtxos(address: string): Promise { + return this.failoverRouter.$get('/address/' + address + '/utxo'); + } + $getScriptHash(scripthash: string): Promise { throw new Error('Method getScriptHash not implemented.'); } @@ -449,6 +453,10 @@ class ElectrsApi implements AbstractBitcoinApi { throw new Error('Method getScriptHashTransactions not implemented.'); } + $getScriptHashUtxos(scripthash: string): Promise { + throw new Error('Method getScriptHashUtxos not implemented.'); + } + $getAddressPrefix(prefix: string): string[] { throw new Error('Method not implemented.'); } From e7772bf73521182ab86c63093d510d64e2f9002a Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 9 Sep 2025 18:50:52 +0200 Subject: [PATCH 385/534] Improve tooltip message for number of scripts in Taproot tree --- .../taproot-address-scripts.component.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 6a59d7841..93ee54a31 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -326,9 +326,18 @@ export class TaprootAddressScriptsComponent implements OnChanges { let hiddenScriptsMessage = ''; if (node.tooltip[0].label === 'Hash') { + const remaining = 128 - (node.depth ?? 0); + let upperBoundHtml: string; + if (remaining === 0) { + upperBoundHtml = '1'; + } else if (remaining <= 39) { + upperBoundHtml = (2 ** remaining).toLocaleString(); + } else { + upperBoundHtml = `2${remaining}`; + } hiddenScriptsMessage = `
    - This node might commit to one or more scripts that have not been revealed yet. + This node might commit to ${upperBoundHtml === '1' ? 'exactly 1 script' : `at most ${upperBoundHtml} scripts`}.
    `; } From 1af6fefb7d79997a2a4a10fb321c857b5ff349e0 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 9 Sep 2025 17:46:09 +0200 Subject: [PATCH 386/534] Fix tx-list highlight overflow on small screens --- .../transactions-list/transactions-list.component.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 24e459d44..af208fa44 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -1,12 +1,18 @@ .col { &:first-child { padding-right: 0; + @media (max-width: 992px) { + padding-right: 15px; + } td:last-child { padding-right: calc(0.3em + 15px); } } &:last-child { padding-left: 0; + @media (max-width: 992px) { + padding-left: 15px; + } td:first-child { padding-left: calc(0.3em + 15px); } From 11df817c39207e873c48f1fed1949ee01490cde6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 08:54:00 +0000 Subject: [PATCH 387/534] Bump axios from 1.11.0 to 1.12.2 in /backend Bumps [axios](https://github.com/axios/axios) from 1.11.0 to 1.12.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.11.0...v1.12.2) --- updated-dependencies: - dependency-name: axios dependency-version: 1.12.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 14 +++++++------- backend/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 4429c4347..fe0174e8f 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.11.0", + "axios": "1.12.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", @@ -2275,9 +2275,9 @@ } }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -9534,9 +9534,9 @@ "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==" }, "axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", diff --git a/backend/package.json b/backend/package.json index b62190e6b..5ac9262d5 100644 --- a/backend/package.json +++ b/backend/package.json @@ -41,7 +41,7 @@ "dependencies": { "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "1.11.0", + "axios": "1.12.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.21.1", From f4854f9b8416fe66dd6c87bc7f8a6bc9ea65322e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:23:56 +0000 Subject: [PATCH 388/534] Bump start-server-and-test from 2.0.3 to 2.1.0 in /frontend Bumps [start-server-and-test](https://github.com/bahmutov/start-server-and-test) from 2.0.3 to 2.1.0. - [Release notes](https://github.com/bahmutov/start-server-and-test/releases) - [Commits](https://github.com/bahmutov/start-server-and-test/compare/v2.0.3...v2.1.0) --- updated-dependencies: - dependency-name: start-server-and-test dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 155 +++++++++++++++++++++++++------------ frontend/package.json | 2 +- 2 files changed, 107 insertions(+), 50 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b5fd3bd3..2ac14c8d5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -39,6 +39,7 @@ "ngx-infinite-scroll": "^17.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", + "start-server-and-test": "~2.1.0", "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", @@ -65,7 +66,7 @@ "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.0.0" + "start-server-and-test": "~2.1.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -4569,9 +4570,9 @@ } }, "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "optional": true, "dependencies": { "@hapi/hoek": "^9.0.0" @@ -11639,14 +11640,14 @@ } }, "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "optional": true, "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -16120,19 +16121,19 @@ } }, "node_modules/start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", + "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", "optional": true, "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.1", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "wait-on": "8.0.4" }, "bin": { "server-test": "src/bin/start.js", @@ -16149,6 +16150,29 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "optional": true }, + "node_modules/start-server-and-test/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/start-server-and-test/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "optional": true + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -17734,16 +17758,16 @@ } }, "node_modules/wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", + "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", "optional": true, "dependencies": { - "axios": "^1.6.1", - "joi": "^17.11.0", + "axios": "^1.11.0", + "joi": "^17.13.3", "lodash": "^4.17.21", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "bin": { "wait-on": "bin/wait-on" @@ -17753,13 +17777,13 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "optional": true, "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -17769,6 +17793,15 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "optional": true }, + "node_modules/wait-on/node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -21293,9 +21326,9 @@ } }, "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "optional": true, "requires": { "@hapi/hoek": "^9.0.0" @@ -26671,14 +26704,14 @@ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "optional": true, "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } @@ -30032,19 +30065,19 @@ } }, "start-server-and-test": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz", - "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", + "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", "optional": true, "requires": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.3.4", + "debug": "4.4.1", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "7.2.0" + "wait-on": "8.0.4" }, "dependencies": { "arg": { @@ -30052,6 +30085,21 @@ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "optional": true + }, + "debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "optional": true, + "requires": { + "ms": "^2.1.3" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "optional": true } } }, @@ -31057,26 +31105,26 @@ "peer": true }, "wait-on": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz", - "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", + "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", "optional": true, "requires": { - "axios": "^1.6.1", - "joi": "^17.11.0", + "axios": "^1.11.0", + "joi": "^17.13.3", "lodash": "^4.17.21", "minimist": "^1.2.8", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "dependencies": { "axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "optional": true, "requires": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, @@ -31085,6 +31133,15 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "optional": true + }, + "rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "optional": true, + "requires": { + "tslib": "^2.1.0" + } } } }, diff --git a/frontend/package.json b/frontend/package.json index 56a552195..868c8929c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -116,7 +116,7 @@ "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.0.0" + "start-server-and-test": "~2.1.0" }, "scarfSettings": { "enabled": false From 46055bacb9b83e54e220b479e2a8ee5412c60d84 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 20 Sep 2025 01:49:40 +0000 Subject: [PATCH 389/534] don't re-fetch quarter-epoch block unless it could have changed --- backend/src/api/blocks.ts | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index aa1fa9751..bf47a99c8 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -836,6 +836,7 @@ class Blocks { let fastForwarded = false; let handledBlocks = 0; + const lastBlockHeight = this.currentBlockHeight; const blockHeightTip = await bitcoinCoreApi.$getBlockHeightTip(); this.updateTimerProgress(timer, 'got block height tip'); @@ -844,16 +845,6 @@ class Blocks { } else { this.currentBlockHeight = this.blocks[this.blocks.length - 1].height; } - if (this.currentBlockHeight >= 503) { - try { - const quarterEpochBlockHash = await bitcoinApi.$getBlockHash(this.currentBlockHeight - 503); - const quarterEpochBlock = await bitcoinApi.$getBlock(quarterEpochBlockHash); - this.quarterEpochBlockTime = quarterEpochBlock?.timestamp; - } catch (e) { - this.quarterEpochBlockTime = null; - logger.warn('failed to update last epoch block time: ' + (e instanceof Error ? e.message : e)); - } - } if (blockHeightTip - this.currentBlockHeight > config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 2) { logger.info(`${blockHeightTip - this.currentBlockHeight} blocks since tip. Fast forwarding to the ${config.MEMPOOL.INITIAL_BLOCKS_AMOUNT} recent blocks`); @@ -892,12 +883,20 @@ class Blocks { } } + const heightChanged = lastBlockHeight !== this.currentBlockHeight; + // make sure to update the quarter epoch block time now if we won't do it inside the loop + if (this.currentBlockHeight >= blockHeightTip && (heightChanged || this.quarterEpochBlockTime == null)) { + await this.updateQuarterEpochBlockTime(); + } + while (this.currentBlockHeight < blockHeightTip) { if (this.currentBlockHeight === 0) { this.currentBlockHeight = blockHeightTip; + await this.updateQuarterEpochBlockTime(); } else { this.currentBlockHeight++; logger.debug(`New block found (#${this.currentBlockHeight})!`); + await this.updateQuarterEpochBlockTime(); // skip updating the orphan block cache if we've fallen behind the chain tip if (this.currentBlockHeight >= blockHeightTip - 2) { this.updateTimerProgress(timer, `getting orphaned blocks for ${this.currentBlockHeight}`); @@ -1098,6 +1097,19 @@ class Blocks { } } + private async updateQuarterEpochBlockTime(): Promise { + if (this.currentBlockHeight >= 503) { + try { + const quarterEpochBlockHash = await bitcoinApi.$getBlockHash(this.currentBlockHeight - 503); + const quarterEpochBlock = await bitcoinApi.$getBlock(quarterEpochBlockHash); + this.quarterEpochBlockTime = quarterEpochBlock?.timestamp; + } catch (e) { + this.quarterEpochBlockTime = null; + logger.warn('failed to update last epoch block time: ' + (e instanceof Error ? e.message : e)); + } + } + } + /** * Index a block if it's missing from the database. Returns the block after indexing */ From 974d8c3052ea94604f539feeb9d4f9eddd58960c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 20 Sep 2025 01:53:51 +0000 Subject: [PATCH 390/534] don't re-fetch genesis block --- backend/src/api/mining/mining.ts | 34 ++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 0e9dcf91a..2b007e9c5 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -30,6 +30,12 @@ class Mining { public reindexHashrateRequested = false; public reindexDifficultyAdjustmentRequested = false; + private genesisData: { + timestamp: number, + bits: number, + difficulty: number, + } | null = null; + /** * Get historical blocks health */ @@ -224,8 +230,8 @@ class Mining { try { const oldestConsecutiveBlockTimestamp = 1000 * (await BlocksRepository.$getOldestConsecutiveBlock()).timestamp; - const genesisBlock: IEsploraApi.Block = await bitcoinApi.$getBlock(await bitcoinApi.$getBlockHash(0)); - const genesisTimestamp = genesisBlock.timestamp * 1000; + const genesisData = await this.getGenesisData(); + const genesisTimestamp = genesisData.timestamp * 1000; const indexedTimestamp = await HashratesRepository.$getWeeklyHashrateTimestamps(); const hashrates: any[] = []; @@ -340,8 +346,8 @@ class Mining { const oldestConsecutiveBlockTimestamp = 1000 * (await BlocksRepository.$getOldestConsecutiveBlock()).timestamp; try { - const genesisBlock: IEsploraApi.Block = await bitcoinApi.$getBlock(await bitcoinApi.$getBlockHash(0)); - const genesisTimestamp = genesisBlock.timestamp * 1000; + const genesisData = await this.getGenesisData(); + const genesisTimestamp = genesisData.timestamp * 1000; const indexedTimestamp = (await HashratesRepository.$getRawNetworkDailyHashrate(null)).map(hashrate => hashrate.timestamp); const lastMidnight = this.getDateMidnight(new Date()); let toTimestamp = Math.round(lastMidnight.getTime()); @@ -450,14 +456,14 @@ class Mining { // gets {time, height, difficulty, bits} of blocks in ascending order of height const blocks: any = await BlocksRepository.$getBlocksDifficulty(); - const genesisBlock: IEsploraApi.Block = await bitcoinApi.$getBlock(await bitcoinApi.$getBlockHash(0)); - let currentDifficulty = genesisBlock.difficulty; - let currentBits = genesisBlock.bits; + const genesisData = await this.getGenesisData(); + let currentDifficulty = genesisData.difficulty; + let currentBits = genesisData.bits; let totalIndexed = 0; if (config.MEMPOOL.INDEXING_BLOCKS_AMOUNT === -1 && indexedHeights[0] !== true) { await DifficultyAdjustmentsRepository.$saveAdjustments({ - time: genesisBlock.timestamp, + time: genesisData.timestamp, height: 0, difficulty: currentDifficulty, adjustment: 0.0, @@ -694,6 +700,18 @@ class Mining { } return blocks[0]; } + + private async getGenesisData(): Promise<{timestamp: number, bits: number, difficulty: number}> { + if (this.genesisData == null) { + const genesisBlock: IEsploraApi.Block = await bitcoinApi.$getBlock(await bitcoinApi.$getBlockHash(0)); + this.genesisData = { + timestamp: genesisBlock.timestamp, + bits: genesisBlock.bits, + difficulty: genesisBlock.difficulty, + }; + } + return this.genesisData; + } } export default new Mining(); From 39020aa499f666b70fecc1ebc8167e47f6112e2a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 21 Sep 2025 12:00:36 +0000 Subject: [PATCH 391/534] fix chaintip lookup in $classifyBlocks --- backend/src/api/blocks.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index aa1fa9751..e21bc516b 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -582,8 +582,7 @@ class Blocks { return; } - const blockchainInfo = await bitcoinClient.getBlockchainInfo(); - const currentBlockHeight = blockchainInfo.blocks; + const currentBlockHeight = this.getCurrentBlockHeight(); const targetSummaryVersion: number = 1; const targetTemplateVersion: number = 1; From d2692c25b67e6f8ce54c4b0957a3a87ddd2181b0 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 21 Sep 2025 12:04:14 +0000 Subject: [PATCH 392/534] fix missing awaits --- backend/src/api/disk-cache.ts | 2 +- backend/src/repositories/AccelerationRepository.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/api/disk-cache.ts b/backend/src/api/disk-cache.ts index f2a1f2390..c6106429d 100644 --- a/backend/src/api/disk-cache.ts +++ b/backend/src/api/disk-cache.ts @@ -252,7 +252,7 @@ class DiskCache { } if (rbfData?.rbf) { - rbfCache.load({ + await rbfCache.load({ txs: rbfData.rbf.txs.map(([txid, entry]) => ({ value: entry })), trees: rbfData.rbf.trees, expiring: rbfData.rbf.expiring.map(([txid, value]) => ({ key: txid, value })), diff --git a/backend/src/repositories/AccelerationRepository.ts b/backend/src/repositories/AccelerationRepository.ts index 4c9896296..9c1ae2f90 100644 --- a/backend/src/repositories/AccelerationRepository.ts +++ b/backend/src/repositories/AccelerationRepository.ts @@ -256,7 +256,7 @@ class AccelerationRepository { try { while (!done) { // don't DDoS the services backend - Common.sleep$(500 + (Math.random() * 1000)); + await Common.sleep$(500 + (Math.random() * 1000)); const accelerations = await accelerationApi.$fetchAccelerationHistory(page); page++; if (!accelerations?.length) { From 0be9c63211faa9339353d8b1b1481407001a8def Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 21 Sep 2025 12:04:58 +0000 Subject: [PATCH 393/534] fix unnecessary async/awaits --- backend/src/api/mempool.ts | 2 +- backend/src/api/rbf-cache.ts | 4 ++-- backend/src/api/websocket-handler.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 87e7f10cd..894261d2f 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -411,7 +411,7 @@ class Mempool { } } - public async getNextCandidates(minFeeTransactions: string[], blockHeight: number, deletedTransactions: MempoolTransactionExtended[]): Promise { + public getNextCandidates(minFeeTransactions: string[], blockHeight: number, deletedTransactions: MempoolTransactionExtended[]): GbtCandidates | undefined { if (this.limitGBT) { const deletedTxsMap = {}; for (const tx of deletedTransactions) { diff --git a/backend/src/api/rbf-cache.ts b/backend/src/api/rbf-cache.ts index df6e10c77..edd22a582 100644 --- a/backend/src/api/rbf-cache.ts +++ b/backend/src/api/rbf-cache.ts @@ -484,7 +484,7 @@ class RbfCache { return deflated; } - async importTree(mempool, root, txid, deflated, txs: Map, mined: boolean = false): Promise { + importTree(mempool, root, txid, deflated, txs: Map, mined: boolean = false): RbfTree | void { const treeInfo = deflated[txid]; const replaces: RbfTree[] = []; @@ -503,7 +503,7 @@ class RbfCache { // recursively reconstruct child trees for (const childId of treeInfo.replaces) { - const replaced = await this.importTree(mempool, root, childId, deflated, txs, mined); + const replaced = this.importTree(mempool, root, childId, deflated, txs, mined); if (replaced) { this.replacedBy.set(replaced.tx.txid, txid); if (mempool[replaced.tx.txid]) { diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 09e56630a..57fd46730 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -1016,7 +1016,7 @@ class WebsocketHandler { } const _memPool = memPool.getMempool(); - const candidateTxs = await memPool.getMempoolCandidates(); + const candidateTxs = memPool.getMempoolCandidates(); let candidates: GbtCandidates | undefined = (memPool.limitGBT && candidateTxs) ? { txs: candidateTxs, added: [], removed: [] } : undefined; let transactionIds: string[] = (memPool.limitGBT) ? Object.keys(candidates?.txs || {}) : Object.keys(_memPool); @@ -1118,7 +1118,7 @@ class WebsocketHandler { if (memPool.limitGBT) { const minFeeMempool = memPool.limitGBT ? await bitcoinSecondClient.getRawMemPool() : null; const minFeeTip = memPool.limitGBT ? await bitcoinSecondClient.getBlockCount() : -1; - candidates = await memPool.getNextCandidates(minFeeMempool, minFeeTip, transactions); + candidates = memPool.getNextCandidates(minFeeMempool, minFeeTip, transactions); transactionIds = Object.keys(candidates?.txs || {}); } else { candidates = undefined; From e3afcf19db57877ec73dba2580bada6c737fd961 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 21 Sep 2025 12:06:13 +0000 Subject: [PATCH 394/534] fix unhandled promise rejections --- backend/src/database.ts | 11 ++++++++--- backend/src/indexer.ts | 6 +++++- .../tasks/lightning/network-sync.service.ts | 19 +++++++++---------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/backend/src/database.ts b/backend/src/database.ts index 595b88c78..6f59983ca 100644 --- a/backend/src/database.ts +++ b/backend/src/database.ts @@ -89,8 +89,9 @@ import { execSync } from 'child_process'; OkPacket[] | ResultSetHeader>(queries: { query, params }[], errorLogLevel: LogLevel | 'silent' = 'debug'): Promise<[T, FieldPacket[]][]> { const pool = await this.getPool(); - const connection = await pool.getConnection(); + let connection; try { + connection = await pool.getConnection(); await connection.beginTransaction(); const results: [T, FieldPacket[]][] = []; @@ -104,10 +105,14 @@ import { execSync } from 'child_process'; return results; } catch (e) { logger.warn('Could not complete db transaction, rolling back: ' + (e instanceof Error ? e.message : e)); - this.$rollbackAtomic(connection); + if (connection) { + await this.$rollbackAtomic(connection); + } throw e; } finally { - connection.release(); + if (connection) { + connection.release(); + } } } diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index d46fb14bc..d5f90dec1 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -138,7 +138,11 @@ class Indexer { case 'coinStatsIndex': { logger.debug(`Indexing coinStatsIndex now`); - await mining.$indexCoinStatsIndex(); + try { + await mining.$indexCoinStatsIndex(); + } catch (e) { + logger.debug(`failed to index coinstatsindex: ` + (e instanceof Error ? e.message : e)); + } } break; } diff --git a/backend/src/tasks/lightning/network-sync.service.ts b/backend/src/tasks/lightning/network-sync.service.ts index 7d6a40571..da4eba170 100644 --- a/backend/src/tasks/lightning/network-sync.service.ts +++ b/backend/src/tasks/lightning/network-sync.service.ts @@ -269,17 +269,16 @@ class NetworkSyncService { private async $scanForClosedChannels(): Promise { let currentBlockHeight = blocks.getCurrentBlockHeight(); - if (config.MEMPOOL.ENABLED === false) { // https://github.com/mempool/mempool/issues/3582 - currentBlockHeight = await bitcoinApi.$getBlockHeightTip(); - } - if (this.closedChannelsScanBlock === currentBlockHeight) { - logger.debug(`We've already scan closed channels for this block, skipping.`); - return; - } - - let progress = 0; - try { + if (config.MEMPOOL.ENABLED === false) { // https://github.com/mempool/mempool/issues/3582 + currentBlockHeight = await bitcoinApi.$getBlockHeightTip(); + } + if (this.closedChannelsScanBlock === currentBlockHeight) { + logger.debug(`We've already scan closed channels for this block, skipping.`); + return; + } + + let progress = 0; let log = `Starting closed channels scan`; if (this.closedChannelsScanBlock > 0) { log += `. Last scan was at block ${this.closedChannelsScanBlock}`; From 16df9293b0f18c55ffa0093e6d2fc6aef349bf38 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 24 Sep 2025 11:09:06 +0200 Subject: [PATCH 395/534] fix production readme electrs setup --- production/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/production/README.md b/production/README.md index 997020841..e6f2f2dcd 100644 --- a/production/README.md +++ b/production/README.md @@ -222,11 +222,11 @@ Start `elementsd` and wait for it to sync the Liquid blockchain. ### Electrs -Install [Electrs](https://github.com/Blockstream/electrs) from source: +Install [Electrs](https://github.com/mempool/electrs) from source: ``` -git clone https://github.com/Blockstream/electrs +git clone https://github.com/mempool/electrs cd electrs -git checkout new-index +git checkout mempool ``` You'll need one instance per network. Build and run them one at a time: From 53c428f0bc996ca95626bf39a7dc57f239a89686 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 20 Sep 2025 09:17:13 +0000 Subject: [PATCH 396/534] fix process exit codes overridden to zero --- backend/src/index.ts | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index b478115e0..8b8d3c20b 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -100,14 +100,20 @@ class Server { logger.notice(`Starting Mempool Server${worker ? ' (worker)' : ''}... (${backendInfo.getShortCommitHash()})`); // Register cleanup listeners for exit events - ['exit', 'SIGHUP', 'SIGINT', 'SIGTERM', 'SIGUSR1', 'SIGUSR2'].forEach(event => { - process.on(event, () => { this.onExit(event); }); + ['SIGHUP', 'SIGINT', 'SIGTERM', 'SIGUSR1', 'SIGUSR2'].forEach(event => { + process.on(event, () => { this.forceExit(event); }); + }); + process.on('exit', () => { + logger.debug(`'exit' event triggered`); + this.exitCleanup(); }); process.on('uncaughtException', (error) => { - this.onUnhandledException('uncaughtException', error); + console.error(`uncaughtException:`, error); + this.forceExit('uncaughtException', 1); }); process.on('unhandledRejection', (reason, promise) => { - this.onUnhandledException('unhandledRejection', reason); + console.error(`unhandledRejection:`, reason, promise); + this.forceExit('unhandledRejection', 1); }); if (config.MEMPOOL.BACKEND === 'esplora') { @@ -387,8 +393,16 @@ class Server { } } - onExit(exitEvent, code = 0): void { - logger.debug(`onExit for signal: ${exitEvent}`); + forceExit(exitEvent, code?: number): void { + logger.debug(`triggering exit for signal: ${exitEvent}`); + if (code != null) { + // override the default exit code + process.exitCode = code; + } + process.exit(); + } + + exitCleanup(): void { if (config.DATABASE.ENABLED) { DB.releasePidLock(); } @@ -398,12 +412,6 @@ class Server { if (this.wssUnixSocket) { this.wssUnixSocket.close(); } - process.exit(code); - } - - onUnhandledException(type, error): void { - console.error(`${type}:`, error); - this.onExit(type, 1); } } From 679181cf225aa6c02ea0924809143ad376b6cbc9 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 3 Oct 2025 03:32:17 +0000 Subject: [PATCH 397/534] bump unfurler tar-fs dependency to 2.1.4 --- unfurler/package-lock.json | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/unfurler/package-lock.json b/unfurler/package-lock.json index e02cf1590..c7ce36f4f 100644 --- a/unfurler/package-lock.json +++ b/unfurler/package-lock.json @@ -2156,7 +2156,7 @@ "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", - "tar-fs": "2.1.1", + "tar-fs": "2.1.4", "unbzip2-stream": "1.4.3", "ws": "8.8.0" }, @@ -2526,9 +2526,10 @@ } }, "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -4321,7 +4322,7 @@ "progress": "2.0.3", "proxy-from-env": "1.1.0", "rimraf": "3.0.2", - "tar-fs": "2.1.1", + "tar-fs": "2.1.4", "unbzip2-stream": "1.4.3", "ws": "8.8.0" } @@ -4568,9 +4569,9 @@ } }, "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", From 33614b12facc9b5c98351c8705ea591e8d105cc8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 04:09:24 +0000 Subject: [PATCH 398/534] fix address poisoning group construction --- .../transactions-list.component.ts | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 9b9604044..0b43d791c 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -404,8 +404,38 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { ]) { const similarity = checkedCompareAddressStrings(address, compareAddr.scriptpubkey_address, addressType as AddressType, this.stateService.network); if (similarity?.status === 'comparable' && similarity.score > ADDRESS_SIMILARITY_THRESHOLD) { - let group = similarityGroups.get(address) || lastGroup++; + // Get or create group numbers for both addresses + let group1 = similarityGroups.get(address); + let group2 = similarityGroups.get(compareAddr.scriptpubkey_address); + + let group: number; + if (group1 !== undefined && group2 !== undefined) { + // Both have groups - merge by using the lower group number + group = Math.min(group1, group2); + // Update all addresses with the higher group number to use the lower one + if (group1 !== group2) { + const higherGroup = Math.max(group1, group2); + for (const [addr, g] of similarityGroups.entries()) { + if (g === higherGroup) { + similarityGroups.set(addr, group); + } + } + } + } else if (group1 !== undefined) { + // Only first address has a group + group = group1; + } else if (group2 !== undefined) { + // Only second address has a group + group = group2; + } else { + // Neither has a group - create a new one + group = lastGroup++; + } + + // Assign the group to both addresses similarityGroups.set(address, group); + similarityGroups.set(compareAddr.scriptpubkey_address, group); + const bestVout = this.similarityMatches.get(tx.txid)?.get(address); if (!bestVout || bestVout.score < similarity.score) { this.similarityMatches.get(tx.txid)?.set(address, { score: similarity.score, match: similarity.left, group }); @@ -413,8 +443,6 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { // opportunistically update the entry for the compared address const bestCompare = this.similarityMatches.get(tx.txid)?.get(compareAddr.scriptpubkey_address); if (!bestCompare || bestCompare.score < similarity.score) { - group = similarityGroups.get(compareAddr.scriptpubkey_address) || lastGroup++; - similarityGroups.set(compareAddr.scriptpubkey_address, group); this.similarityMatches.get(tx.txid)?.set(compareAddr.scriptpubkey_address, { score: similarity.score, match: similarity.right, group }); } } From e93a8274125ed087482902f8cbc555f9c0f3f5e7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 04:09:52 +0000 Subject: [PATCH 399/534] adjust address poisoning threshold for birthday paradox --- .../transactions-list.component.ts | 25 ++++++++++++++++++- frontend/src/app/shared/address-utils.ts | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 0b43d791c..4316d6c09 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -392,6 +392,29 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { this.similarityMatches.set(tx.txid, new Map()); const comparableVouts = tx.vout.slice(0, 20).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type)); const comparableVins = tx.vin.slice(0, 20).map(v => v.prevout).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v?.scriptpubkey_type)); + + // Count unique addresses per type & position + const typeCount = new Map, vinAddrs: Set }>(); + for (const vout of comparableVouts) { + const count = typeCount.get(vout.scriptpubkey_type) || { voutAddrs: new Set(), vinAddrs: new Set() }; + count.voutAddrs.add(vout.scriptpubkey_address); + typeCount.set(vout.scriptpubkey_type, count); + } + for (const vin of comparableVins) { + const count = typeCount.get(vin.scriptpubkey_type!) || { voutAddrs: new Set(), vinAddrs: new Set() }; + count.vinAddrs.add(vin.scriptpubkey_address); + typeCount.set(vin.scriptpubkey_type!, count); + } + // We compare each vout to every distinct vin and every other vout address of the same type + let totalUniquePairs = 0; + for (const { voutAddrs, vinAddrs } of typeCount.values()) { + const V = voutAddrs.size; + const I = vinAddrs.size; + totalUniquePairs += (V * (V - 1)) / 2 + V * I; + } + // Adjust threshold to correct for the birthday paradox + const adjustedThreshold = totalUniquePairs > 0 ? ADDRESS_SIMILARITY_THRESHOLD * totalUniquePairs : ADDRESS_SIMILARITY_THRESHOLD; + for (const vout of comparableVouts) { const address = vout.scriptpubkey_address; const addressType = vout.scriptpubkey_type; @@ -403,7 +426,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { ...comparableVins.filter(v => v.scriptpubkey_type === addressType && v.scriptpubkey_address !== address) ]) { const similarity = checkedCompareAddressStrings(address, compareAddr.scriptpubkey_address, addressType as AddressType, this.stateService.network); - if (similarity?.status === 'comparable' && similarity.score > ADDRESS_SIMILARITY_THRESHOLD) { + if (similarity?.status === 'comparable' && similarity.score > adjustedThreshold) { // Get or create group numbers for both addresses let group1 = similarityGroups.get(address); let group2 = similarityGroups.get(compareAddr.scriptpubkey_address); diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 065837840..16fc452b7 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -264,7 +264,7 @@ export type AddressSimilarityResult = | { status: 'incomparable' } | AddressSimilarity; -export const ADDRESS_SIMILARITY_THRESHOLD = 10_000_000; // 1 false positive per ~10 million comparisons +export const ADDRESS_SIMILARITY_THRESHOLD = 1_000_000; // 1 false positive per ~1 million comparisons function fuzzyPrefixMatch(a: string, b: string, rtl: boolean = false): { score: number, matchA: string, matchB: string } { let score = 0; From 7758414505f012559afeb5d432b343a408bac6da Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 04:10:39 +0000 Subject: [PATCH 400/534] discount address similarity score for imperfect matches --- frontend/src/app/shared/address-utils.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 16fc452b7..de26fbd11 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -280,12 +280,18 @@ function fuzzyPrefixMatch(a: string, b: string, rtl: boolean = false): { score: b = b.split('').reverse().join(''); } + let discounted = false; while (ai < a.length && bi < b.length && !done) { if (a[ai] === b[bi]) { // matching characters prefixA += a[ai]; prefixB += b[bi]; - score++; + if (discounted) { + score += 0.5; + } else { + score ++; + } + discounted = false; ai++; bi++; } else if (!gap) { @@ -312,6 +318,7 @@ function fuzzyPrefixMatch(a: string, b: string, rtl: boolean = false): { score: bi++; } gap = true; + discounted = true; } else { done = true; } From b1d59ce4d73d9ab396d86641027161968aa324a2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 04:11:06 +0000 Subject: [PATCH 401/534] fix address similarity prefix length --- frontend/src/app/shared/address-utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index de26fbd11..f9fd24a0f 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -347,7 +347,7 @@ export function compareAddressInfo(a: AddressTypeInfo, b: AddressTypeInfo): Addr const left = fuzzyPrefixMatch(a.address, b.address); const right = fuzzyPrefixMatch(a.address, b.address, true); // depending on address type, some number of matching prefix characters are guaranteed - const prefixScore = isBase58 ? 1 : ADDRESS_PREFIXES[a.network || 'mainnet'].bech32.length; + const prefixScore = isBase58 ? 1 : (ADDRESS_PREFIXES[a.network || 'mainnet'].bech32.length + 1); // add the two scores together const totalScore = left.score + right.score - prefixScore; From 6c7673c97ffc0ba5b7872f9d91217e0d9fcb0d28 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 14:43:47 +0000 Subject: [PATCH 402/534] fix address overflow on long prefix match --- .../components/address-text/address-text.component.html | 6 +++--- .../components/address-text/address-text.component.ts | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/shared/components/address-text/address-text.component.html b/frontend/src/app/shared/components/address-text/address-text.component.html index ddcd8d751..ae8643349 100644 --- a/frontend/src/app/shared/components/address-text/address-text.component.html +++ b/frontend/src/app/shared/components/address-text/address-text.component.html @@ -2,9 +2,9 @@ @if (similarity) {
    - {{ similarity.match.prefix }} - {{ address.slice(similarity.match.prefix.length || 0, -similarity.match.postfix.length || undefined) }} - {{ similarity.match.postfix }} + {{ similarity.match.prefix.slice(0, 16) }} + {{ address.slice(min(similarity.match.prefix.length, 16) || 0, -min(similarity.match.postfix.length, 16) || undefined) }} + {{ similarity.match.postfix.slice(-16) }} diff --git a/frontend/src/app/shared/components/address-text/address-text.component.ts b/frontend/src/app/shared/components/address-text/address-text.component.ts index f618428aa..75a4851da 100644 --- a/frontend/src/app/shared/components/address-text/address-text.component.ts +++ b/frontend/src/app/shared/components/address-text/address-text.component.ts @@ -11,6 +11,8 @@ export class AddressTextComponent { @Input() info: AddressTypeInfo | null; @Input() similarity: { score: number, match: AddressMatch, group: number } | null; + min = Math.min; + groupColors: string[] = [ 'var(--primary)', 'var(--success)', From c871e1b1aff24f591c7d552042b78850597c3cc7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 14:47:03 +0000 Subject: [PATCH 403/534] exclude obvious fake scripthashes from address similarity scoring --- .../transactions-list/transactions-list.component.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 4316d6c09..32e00b177 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -390,8 +390,8 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { // Check for address poisoning similarity matches this.similarityMatches.set(tx.txid, new Map()); - const comparableVouts = tx.vout.slice(0, 20).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type)); - const comparableVins = tx.vin.slice(0, 20).map(v => v.prevout).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v?.scriptpubkey_type)); + const comparableVouts = tx.vout.slice(0, 20).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v.scriptpubkey_type) && !this.isFakeScripthash(v)); + const comparableVins = tx.vin.slice(0, 20).map(v => v.prevout).filter(v => ['p2pkh', 'p2sh', 'v0_p2wpkh', 'v0_p2wsh', 'v1_p2tr'].includes(v?.scriptpubkey_type) && !this.isFakeScripthash(v)); // Count unique addresses per type & position const typeCount = new Map, vinAddrs: Set }>(); @@ -474,6 +474,12 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { } } + // assume any address with 12 or more contiguous repeated substrings is fake + fakeScriptHashRegex = new RegExp(/(.+?)\1{11,}/); + isFakeScripthash(vout: Vout): boolean { + return this.fakeScriptHashRegex.test(vout.scriptpubkey_address); + } + onScroll(): void { this.loadMore.emit(); } From a4a44dee2d4cfd967d2882b93ac3f112a85d64a3 Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 4 Oct 2025 17:48:47 +0200 Subject: [PATCH 404/534] Add custom image to balance graph widget --- .../address-graph/address-graph.component.ts | 62 ++++++++++++------- .../custom-dashboard.component.html | 2 +- 2 files changed, 42 insertions(+), 22 deletions(-) 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 005c64e9f..1affc92c9 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -45,6 +45,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { @Input() left: number | string = 70; @Input() widget: boolean = false; @Input() label: string = ''; + @Input() image: string = ''; @Input() defaultFiat: boolean = false; @Input() showLegend: boolean = true; @Input() showYAxis: boolean = true; @@ -56,7 +57,6 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { hoverData: any[] = []; conversions: any; allowZoom: boolean = false; - labelGraphic: any; selected = { [$localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`]: true, 'Fiat': false }; @@ -87,18 +87,6 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { ngOnChanges(changes: SimpleChanges): void { this.isLoading = true; - this.labelGraphic = this.label ? { - type: 'text', - right: '36px', - bottom: '36px', - z: 100, - silent: true, - style: { - fill: '#fff', - text: this.label, - font: '24px sans-serif' - } - } : undefined; if (!this.addressSummary$ && (!this.address || !this.stats)) { return; } @@ -200,6 +188,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { this.adjustedRight = this.selected['Fiat'] ? +this.right + 40 : +this.right; this.adjustedLeft = this.selected[$localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`] ? +this.left : +this.left - 40; + const graphicElements = this.graphicElements(); this.chartOptions = { color: [ @@ -219,10 +208,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { right: this.adjustedRight, left: this.adjustedLeft, }, - graphic: this.labelGraphic ? [{ - ...this.labelGraphic, - right: this.adjustedRight + 22 + 'px', - }] : undefined, + graphic: graphicElements.length > 0 ? graphicElements : undefined, legend: (this.showLegend && !this.stateService.isAnyTestnet()) ? { data: [ { @@ -455,16 +441,14 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { this.selected = e.selected; this.adjustedRight = this.selected['Fiat'] ? +this.right + 40 : +this.right; this.adjustedLeft = this.selected[$localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`] ? +this.left : +this.left - 40; + const graphicElements = this.graphicElements(); this.chartOptions = { grid: { right: this.adjustedRight, left: this.adjustedLeft, }, - graphic: this.labelGraphic ? [{ - ...this.labelGraphic, - right: this.adjustedRight + 22 + 'px', - }] : undefined, + graphic: graphicElements.length > 0 ? graphicElements : undefined, legend: { selected: this.selected, }, @@ -526,4 +510,40 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { return extendedSummary; } + + graphicElements() { + const graphicElements = []; + + if (this.label) { + graphicElements.push({ + type: 'text', + right: this.adjustedRight + 22 + 'px', + bottom: '36px', + z: 100, + silent: true, + style: { + fill: '#fff', + text: this.label, + font: '24px sans-serif' + } + }); + } + + if (this.image) { + graphicElements.push({ + type: 'image', + style: { + image: this.image, + width: 120, + height: 80, + }, + right: this.adjustedRight + 22, + bottom: this.label ? 66 : 36, + z: 100, + silent: true, + }); + } + + return graphicElements; + } } 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 02c860cae..8c3dc0f79 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -272,7 +272,7 @@   - +
    From e2e992e47787ee44378a40a590b10c1cb3cd2ef1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 4 Oct 2025 17:49:23 +0200 Subject: [PATCH 405/534] Update custom dashboard config --- frontend/custom-sv-config.json | 3 +- frontend/src/resources/elsalvador-flag.svg | 593 +++++++++++++++++++++ 2 files changed, 595 insertions(+), 1 deletion(-) create mode 100644 frontend/src/resources/elsalvador-flag.svg diff --git a/frontend/custom-sv-config.json b/frontend/custom-sv-config.json index 820a300fa..237f6b3cf 100644 --- a/frontend/custom-sv-config.json +++ b/frontend/custom-sv-config.json @@ -35,7 +35,8 @@ "props": { "wallet": "ONBTC", "period": "1m", - "label": "bitcoin.gob.sv" + "label": "bitcoin.gob.sv", + "image": "/resources/elsalvador-flag.svg" } }, { diff --git a/frontend/src/resources/elsalvador-flag.svg b/frontend/src/resources/elsalvador-flag.svg new file mode 100644 index 000000000..3871872af --- /dev/null +++ b/frontend/src/resources/elsalvador-flag.svg @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 4e27e9e2340a462faaf581d0fca97ed34cf8e548 Mon Sep 17 00:00:00 2001 From: junderw Date: Sun, 5 Oct 2025 17:06:14 +0900 Subject: [PATCH 406/534] Remove FreeBSD hack for sysconf with Rust --- production/freebsd/sysconf.patch | 12 ------------ production/install | 17 ----------------- 2 files changed, 29 deletions(-) delete mode 100644 production/freebsd/sysconf.patch diff --git a/production/freebsd/sysconf.patch b/production/freebsd/sysconf.patch deleted file mode 100644 index 30a09baac..000000000 --- a/production/freebsd/sysconf.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/src/raw.rs 2020-10-22 05:59:43.747207000 +0000 -+++ b/src/raw2.rs 2020-10-22 06:00:04.016688000 +0000 -@@ -82,9 +82,6 @@ - Sc2CharTerm = sc!(_SC_2_CHAR_TERM), - Sc2CVersion = 96, // TODO(joshlf): Switch to a libc constant once it's added - Sc2Upe = sc!(_SC_2_UPE), -- ScXbs5Ilp32Off32 = sc!(_SC_XBS5_ILP32_OFF32), -- ScXbs5Ilp32Offbig = sc!(_SC_XBS5_ILP32_OFFBIG), -- ScXbs5LpbigOffbig = sc!(_SC_XBS5_LPBIG_OFFBIG), - } - - /// Query the system's configuration. diff --git a/production/install b/production/install index 47a4ca5ce..a39500dbb 100755 --- a/production/install +++ b/production/install @@ -1368,23 +1368,6 @@ if [ "${BITCOIN_ELECTRS_INSTALL}" = ON ];then ;; esac - echo "[*] Building Bitcoin Electrs release binary" - osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" || true - - case $OS in - FreeBSD*) - echo "[*] Patching Bitcoin Electrs code for FreeBSD" - SYSCONF_DIR=$(find "${BITCOIN_HOME}/.cargo/registry/src" -type d -name "sysconf-0.3.4" | head -n 1) - if [ -n "$SYSCONF_DIR" ]; then - osSudo "${BITCOIN_USER}" sh -c "cd \"$SYSCONF_DIR\" && patch -p1 < \"${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/freebsd/sysconf.patch\"" - else - echo "Warning: Could not find sysconf-0.3.4 directory" - fi - ;; - Debian) - ;; - esac - echo "[*] Building Bitcoin Electrs release binary" osSudo "${BITCOIN_USER}" sh -c "cd ${BITCOIN_ELECTRS_HOME} && cargo run --release --bin electrs -- --version" fi From a5d868f694df0ef4e5fb6442503d911b8bbe5dcd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 6 Oct 2025 09:03:14 +0000 Subject: [PATCH 407/534] center custom dashboard image --- .../address-graph/address-graph.component.ts | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) 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 1affc92c9..e4eb4dbf1 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -512,38 +512,48 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { } graphicElements() { - const graphicElements = []; - - if (this.label) { - graphicElements.push({ - type: 'text', - right: this.adjustedRight + 22 + 'px', - bottom: '36px', - z: 100, - silent: true, - style: { - fill: '#fff', - text: this.label, - font: '24px sans-serif' - } - }); - } + const children = []; if (this.image) { - graphicElements.push({ + children.push({ type: 'image', style: { image: this.image, width: 120, height: 80, }, - right: this.adjustedRight + 22, - bottom: this.label ? 66 : 36, + left: 'center', + top: 0, z: 100, - silent: true, }); } - return graphicElements; + if (this.label) { + children.push({ + type: 'text', + left: 'center', + top: this.image ? 90 : 0, + z: 100, + style: { + fill: '#fff', + text: this.label, + font: '24px sans-serif', + textAlign: 'center' + } + }); + } + + if (children.length) { + return [{ + type: 'group', + right: this.adjustedRight + 22, + bottom: '36px', + z: 100, + silent: true, + children: children + }]; + } else { + return []; + } } } From 78bbfbc6a9b9ba9a76b36e7d20d11540de31efbc Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 8 Oct 2025 16:14:28 -1000 Subject: [PATCH 408/534] Set lost = 0 for now --- .../components/treasuries/supply/treasuries-supply.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts index 9c36f6fbf..0adf52489 100644 --- a/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts +++ b/frontend/src/app/components/treasuries/supply/treasuries-supply.component.ts @@ -96,7 +96,7 @@ export class TreasuriesSupplyComponent implements OnInit, OnDestroy { } } - const lost = 1456206; // TODO: track this dynamically + const lost = 0; // TODO: track this dynamically const treasuryTotal = Object.values(this.walletBalance).reduce((acc, balance) => acc + balance, 0); const otherMined = mined - treasuryTotal - lost; const yetToBeMined = total - mined; From 4a5f8f396a566929ade4166d6297ce8b9ad1f808 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 9 Oct 2025 11:00:28 +0000 Subject: [PATCH 409/534] smaller custom dash image on mobile --- .../address-graph/address-graph.component.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 e4eb4dbf1..0f33bb955 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -513,14 +513,16 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { graphicElements() { const children = []; + const imgWidth = this.isMobile() ? 60 : 120; + const imgHeight = this.isMobile() ? 40 : 80; if (this.image) { children.push({ type: 'image', style: { image: this.image, - width: 120, - height: 80, + width: imgWidth, + height: imgHeight, }, left: 'center', top: 0, @@ -532,12 +534,12 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { children.push({ type: 'text', left: 'center', - top: this.image ? 90 : 0, + top: this.image ? imgHeight + 10 : 0, z: 100, style: { fill: '#fff', text: this.label, - font: '24px sans-serif', + font: this.isMobile() ? '18px sans-serif' : '24px sans-serif', textAlign: 'center' } }); @@ -546,7 +548,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { if (children.length) { return [{ type: 'group', - right: this.adjustedRight + 22, + right: this.adjustedRight + (this.isMobile() ? 10 : 22), bottom: '36px', z: 100, silent: true, From 2d8625e408d28c6f17aba0c6f10eefafda51f5cf Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 9 Oct 2025 11:07:19 +0000 Subject: [PATCH 410/534] don't hide accelerator modal for high-priority txs --- .../src/app/components/transaction/transaction.component.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 9b50b341f..12992084b 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -526,9 +526,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.miningStats = stats; }); } - if (!this.gotInitialPosition && txPosition.position?.block === 0 && txPosition.position?.vsize < 750_000) { - this.accelerationFlowCompleted = true; - } } } } From 5bb787cb580fd2150e958ca13cf0217241c52369 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 9 Oct 2025 11:24:45 +0000 Subject: [PATCH 411/534] wildcard for prod domains --- .../accelerate-checkout.component.ts | 2 +- frontend/src/app/services/state.service.ts | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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 9cb563a68..e19952d80 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -140,7 +140,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { private authService: AuthServiceMempool, private enterpriseService: EnterpriseService, ) { - this.isProdDomain = this.stateService.env.PROD_DOMAINS.indexOf(document.location.hostname) > -1; + this.isProdDomain = this.stateService.isProdDomain; // Check if Apple Pay available // https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/checking_for_apple_pay_availability#overview diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index cb98b6dc4..f4bed10af 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -138,6 +138,7 @@ export class StateService { referrer: string = ''; isBrowser: boolean = isPlatformBrowser(this.platformId); isMempoolSpaceBuild = window['isMempoolSpaceBuild'] ?? false; + isProdDomain: boolean; backend: 'esplora' | 'electrum' | 'none' = 'esplora'; network = ''; lightningNetworks = ['', 'mainnet', 'bitcoin', 'testnet', 'signet']; @@ -250,6 +251,8 @@ export class StateService { this.isTabHidden$ = new BehaviorSubject(false); } + this.isProdDomain = this.testIsProdDomain(this.env.PROD_DOMAINS); + this.router.events.subscribe((event) => { if (event instanceof NavigationStart) { this.setNetworkBasedonUrl(event.url); @@ -512,4 +515,11 @@ export class StateService { this.searchFocus$.next(true); } } + + private testIsProdDomain(prodDomains: string[]): boolean { + const hostname = document.location.hostname; + return prodDomains.some(domain => + hostname === domain || hostname.endsWith('.' + domain) + ); + } } From 72284751b256015b33517c8384204947619ac4e2 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 9 Oct 2025 15:35:39 +0200 Subject: [PATCH 412/534] Hide faq icon for older blocks --- .../blockchain-blocks/blockchain-blocks.component.html | 4 ++-- .../blockchain-blocks/blockchain-blocks.component.ts | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) 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 ed42a874f..6782804b1 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -57,8 +57,8 @@ 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 85fd031bc..4666683c3 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -432,7 +432,7 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { return 0; } - isEarlierThanParent(index: number): boolean { + showIsEarlierThanParent(index: number): boolean { const block = this.blocks[index]; const parent = this.blocks[index + 1]; @@ -440,6 +440,9 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { return false; } - return block.timestamp < parent.timestamp; + // Only show FAQ icon for blocks mined in the last 2 hours + const recentBlock = (Date.now() / 1000 - block.timestamp) < 7200; + + return recentBlock && block.timestamp < parent.timestamp; } } \ No newline at end of file From eca3911e365ed3cb5922f1f0f5f09e2ff31aab3a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 8 Sep 2025 09:01:08 +0000 Subject: [PATCH 413/534] Support stales in db blocks table --- backend/src/api/blocks.ts | 79 +++++++++- backend/src/api/database-migration.ts | 19 ++- backend/src/repositories/BlocksRepository.ts | 157 +++++++++++++------ backend/src/repositories/PoolsRepository.ts | 4 +- 4 files changed, 209 insertions(+), 50 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 87c6a5cb2..6c30ca334 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -267,7 +267,7 @@ class Blocks { extras.segwitTotalSize = 0; extras.segwitTotalWeight = 0; } else { - const stats: IBitcoinApi.BlockStats = await bitcoinClient.getBlockStats(block.id); + const stats: IBitcoinApi.BlockStats = await this.$getBlockStats(block, transactions); let feeStats = { medianFee: stats.feerate_percentiles[2], // 50th percentiles feeRange: [stats.minfeerate, stats.feerate_percentiles, stats.maxfeerate].flat(), @@ -368,6 +368,79 @@ class Blocks { return blk; } + private async $getBlockStats(block: IEsploraApi.Block, transactions: TransactionExtended[]): Promise { + if (!block.stale) { + return bitcoinClient.getBlockStats(block.id); + } + + // TODO: make these match the definitions used by the RPC response + const totalFee = transactions.reduce((acc, tx) => acc + tx.fee, 0); + const totalVsize = transactions.reduce((acc, tx) => acc + tx.vsize, 0); + const totalReward = transactions[0].vout.reduce((acc, vout) => acc + vout.value, 0); + const sortedByFee = transactions.sort((a, b) => a.fee - b.fee); + const sortedByVsize = transactions.sort((a, b) => a.vsize - b.vsize); + const sortedByFeerate = transactions.sort((a, b) => (a.fee / a.weight) - (b.fee / b.weight)); + const sortedFeerates = sortedByFeerate.map(tx => (tx.fee / (tx.weight / 4))); + const avgfee = totalFee / transactions.length; + const avgfeerate = totalFee / (block.weight / 4); + const avgtxsize = totalVsize / transactions.length; + const medianfee = sortedByFee[Math.floor(transactions.length / 2)].fee; + const mediantime = block.timestamp; + const mediantxsize = sortedByVsize[Math.floor(transactions.length / 2)].vsize; + const minfee = sortedByFee[0].fee; + const maxfee = sortedByFee[sortedByFee.length - 1].fee; + const minfeerate = sortedFeerates[0]; + const maxfeerate = sortedFeerates[sortedFeerates.length - 1]; + const mintxsize = sortedByVsize[0].vsize; + const maxtxsize = sortedByVsize[sortedByVsize.length - 1].vsize; + const ins = transactions.reduce((acc, tx) => acc + tx.vin.length, 0); + const outs = transactions.reduce((acc, tx) => acc + tx.vout.length, 0); + const subsidy = totalReward - totalFee; + const swtotal_size = 0; + const swtotal_weight = 0; + const swtxs = 0; + const time = block.timestamp; + const total_out = transactions.reduce((acc, tx) => acc + tx.vout.reduce((acc, vout) => acc + vout.value, 0), 0); + const total_size = block.size; + const total_weight = block.weight; + const totalfee = totalFee; + const txs = transactions.length; + const utxo_increase = 0; + const utxo_size_inc = 0; + + return { + avgfee, + avgfeerate, + avgtxsize, + blockhash: block.id, + feerate_percentiles: [minfeerate, sortedFeerates[Math.floor(transactions.length / 4)], medianfee, sortedFeerates[Math.floor(transactions.length * 3 / 4)], maxfeerate], + height: block.height, + ins, + maxfee, + maxfeerate, + maxtxsize, + medianfee, + mediantime, + mediantxsize, + minfee, + minfeerate, + mintxsize, + outs, + subsidy, + swtotal_size, + swtotal_weight, + swtxs, + time, + total_out, + total_size, + total_weight, + totalfee, + txs, + utxo_increase, + utxo_size_inc, + }; + } + /** * Try to find which miner found the block * @param txMinerInfo @@ -1476,7 +1549,7 @@ class Blocks { public async $getBlockDefinitionHashes(): Promise { try { - const [rows]: any = await database.query(`SELECT DISTINCT(definition_hash) FROM blocks`); + const [rows]: any = await database.query(`SELECT DISTINCT(definition_hash) FROM blocks WHERE stale = 0`); if (rows && Array.isArray(rows)) { return rows.map(r => r.definition_hash); } else { @@ -1491,7 +1564,7 @@ class Blocks { public async $getBlocksByDefinitionHash(definitionHash: string): Promise { try { - const [rows]: any = await database.query(`SELECT hash FROM blocks WHERE definition_hash = ?`, [definitionHash]); + const [rows]: any = await database.query(`SELECT hash FROM blocks WHERE definition_hash = ? AND stale = 0`, [definitionHash]); if (rows && Array.isArray(rows)) { return rows.map(r => r.hash); } else { diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 973dab7e1..51728ef2a 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 = 101; + private static currentVersion = 104; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -1166,6 +1166,17 @@ class DatabaseMigration { if (databaseSchemaVersion < 100) { await this.$executeQuery('ALTER TABLE `blocks` ADD index_version INT NOT NULL DEFAULT 0'); await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `index_version` (`index_version`)'); + await this.updateToSchemaVersion(100); + } + + if (databaseSchemaVersion < 102) { + await this.$executeQuery('ALTER TABLE `blocks` ADD stale BOOL NOT NULL DEFAULT 0'); + await this.updateToSchemaVersion(102); + } + + if (databaseSchemaVersion < 103) { + await this.$executeQuery('ALTER TABLE `blocks` ADD INDEX `stale` (`stale`)'); + await this.updateToSchemaVersion(103); } } @@ -1303,6 +1314,12 @@ class DatabaseMigration { queries.push(`DELETE FROM prices WHERE USD = -1`); } + if (version < 104) { + queries.push(`ALTER TABLE blocks DROP PRIMARY KEY`); + queries.push(`ALTER TABLE blocks ADD PRIMARY KEY (hash)`); + queries.push(`ALTER TABLE blocks ADD INDEX (height)`); + } + return queries; } diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 309cff2ce..0a3469665 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -60,6 +60,7 @@ interface DatabaseBlock { utxoSetSize: number; totalInputAmt: number; firstSeen: number; + stale: boolean; } const BLOCK_DB_FIELDS = ` @@ -104,7 +105,8 @@ const BLOCK_DB_FIELDS = ` blocks.utxoset_change AS utxoSetChange, blocks.utxoset_size AS utxoSetSize, blocks.total_input_amt AS totalInputAmt, - UNIX_TIMESTAMP(blocks.first_seen) AS firstSeen + UNIX_TIMESTAMP(blocks.first_seen) AS firstSeen, + blocks.stale `; class BlocksRepository { @@ -128,7 +130,8 @@ class BlocksRepository { coinbase_signature, utxoset_size, utxoset_change, avg_tx_size, total_inputs, total_outputs, total_input_amt, total_output_amt, fee_percentiles, segwit_total_txs, segwit_total_size, segwit_total_weight, - median_fee_amt, coinbase_signature_ascii, definition_hash, index_version + median_fee_amt, coinbase_signature_ascii, definition_hash, index_version, + stale ) VALUE ( ?, ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, @@ -139,7 +142,8 @@ class BlocksRepository { ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - ?, ?, ?, ? + ?, ?, ?, ?, + ? )`; const poolDbId = await PoolsRepository.$getPoolByUniqueId(block.extras.pool.id); @@ -187,13 +191,23 @@ class BlocksRepository { block.extras.medianFeeAmt, truncatedCoinbaseSignatureAscii, poolsUpdater.currentSha, - BlocksRepository.version + BlocksRepository.version, + (block.stale ? 1 : 0), ]; await DB.query(query, params); } catch (e: any) { - if (e.errno === 1062) { // ER_DUP_ENTRY - This scenario is possible upon node backend restart - logger.debug(`$saveBlockInDatabase() - Block ${block.height} has already been indexed, ignoring`, logger.tags.mining); + if (e.errno === 1062) { // ER_DUP_ENTRY - This scenario is possible upon node backend restart or if a stale block is reconnected + if (!block.stale) { + logger.debug(`$saveBlockInDatabase() - Block ${block.height} has already been indexed, setting as canonical`, logger.tags.mining); + try { + await this.$setCanonicalBlockAtHeight(block.id, block.height); + } catch (e: any) { + logger.err(`Cannot set canonical block at height ${block.height}. Reason: ` + (e instanceof Error ? e.message : e)); + } + } else { + logger.debug(`$saveBlockInDatabase() - Block ${block.height} has already been indexed, ignoring`, logger.tags.mining); + } } else { logger.err('Cannot save indexed block into db. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); throw e; @@ -266,7 +280,7 @@ class BlocksRepository { const [rows]: any[] = await DB.query(` SELECT height FROM blocks - WHERE height <= ? AND height >= ? + WHERE height <= ? AND height >= ? AND stale = 0 ORDER BY height DESC; `, [startHeight, endHeight]); @@ -292,7 +306,7 @@ class BlocksRepository { let query = `SELECT count(height) as count, pools.id as poolId FROM blocks JOIN pools on pools.id = blocks.pool_id - WHERE tx_count = 1`; + WHERE tx_count = 1 AND stale = 0`; if (poolId) { query += ` AND pool_id = ?`; @@ -335,20 +349,16 @@ class BlocksRepository { const params: any[] = []; let query = `SELECT count(height) as blockCount - FROM blocks`; + FROM blocks + WHERE stale = 0`; if (poolId) { - query += ` WHERE pool_id = ?`; + query += ` AND pool_id = ?`; params.push(poolId); } if (interval) { - if (poolId) { - query += ` AND`; - } else { - query += ` WHERE`; - } - query += ` blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } try { @@ -372,19 +382,15 @@ class BlocksRepository { let query = `SELECT count(height) as blockCount, max(height) as lastBlockHeight - FROM blocks`; + FROM blocks + WHERE stale = 0`; if (poolId) { - query += ` WHERE pool_id = ?`; + query += ` AND pool_id = ?`; params.push(poolId); } - if (poolId) { - query += ` AND`; - } else { - query += ` WHERE`; - } - query += ` blockTimestamp BETWEEN FROM_UNIXTIME('${from}') AND FROM_UNIXTIME('${to}')`; + query += ` AND blockTimestamp BETWEEN FROM_UNIXTIME('${from}') AND FROM_UNIXTIME('${to}')`; try { const [rows] = await DB.query(query, params); @@ -402,7 +408,7 @@ class BlocksRepository { const params: any[] = []; let query = `SELECT count(height) as blockCount FROM blocks - WHERE height <= ${startHeight} AND height >= ${endHeight}`; + WHERE height <= ${startHeight} AND height >= ${endHeight} AND stale = 0`; try { const [rows] = await DB.query(query, params); @@ -422,7 +428,7 @@ class BlocksRepository { SELECT AVG(blocks_audits.match_rate) AS avg_match_rate FROM blocks JOIN blocks_audits ON blocks.height = blocks_audits.height - WHERE blocks.pool_id = ? + WHERE blocks.pool_id = ? AND stale = 0 `; params.push(poolId); @@ -446,7 +452,7 @@ class BlocksRepository { const query = ` SELECT sum(reward) as total_reward FROM blocks - WHERE blocks.pool_id = ? + WHERE blocks.pool_id = ? AND stale = 0 `; params.push(poolId); @@ -468,6 +474,7 @@ class BlocksRepository { public async $oldestBlockTimestamp(): Promise { const query = `SELECT UNIX_TIMESTAMP(blockTimestamp) as blockTimestamp FROM blocks + WHERE stale = 0 ORDER BY height LIMIT 1;`; @@ -499,7 +506,7 @@ class BlocksRepository { SELECT ${BLOCK_DB_FIELDS} FROM blocks JOIN pools ON blocks.pool_id = pools.id - WHERE pool_id = ?`; + WHERE pool_id = ? AND stale = 0`; params.push(pool.id); if (startHeight !== undefined) { @@ -534,7 +541,7 @@ class BlocksRepository { SELECT ${BLOCK_DB_FIELDS} FROM blocks JOIN pools ON blocks.pool_id = pools.id - WHERE blocks.height = ?`, + WHERE blocks.height = ? AND stale = 0`, [height] ); @@ -549,12 +556,36 @@ class BlocksRepository { } } + /** + * Get one block by hash + */ + public async $getBlockByHash(hash: string): Promise { + try { + const [rows]: any[] = await DB.query(` + SELECT ${BLOCK_DB_FIELDS} + FROM blocks + JOIN pools ON blocks.pool_id = pools.id + WHERE blocks.hash = ?`, + [hash] + ); + + if (rows.length <= 0) { + return null; + } + + return await this.formatDbBlockIntoExtendedBlock(rows[0] as DatabaseBlock); + } catch (e) { + logger.err(`Cannot get indexed block ${hash}. Reason: ` + (e instanceof Error ? e.message : e)); + throw e; + } + } + /** * Return blocks difficulty */ public async $getBlocksDifficulty(): Promise { try { - const [rows]: any[] = await DB.query(`SELECT UNIX_TIMESTAMP(blockTimestamp) as time, height, difficulty, bits FROM blocks ORDER BY height ASC`); + const [rows]: any[] = await DB.query(`SELECT UNIX_TIMESTAMP(blockTimestamp) as time, height, difficulty, bits FROM blocks WHERE stale = 0 ORDER BY height ASC`); return rows; } catch (e) { logger.err('Cannot get blocks difficulty list from the db. Reason: ' + (e instanceof Error ? e.message : e)); @@ -573,7 +604,7 @@ class BlocksRepository { try { // Get first block at or after the given timestamp const query = `SELECT height, hash, blockTimestamp as timestamp FROM blocks - WHERE blockTimestamp <= FROM_UNIXTIME(?) + WHERE blockTimestamp <= FROM_UNIXTIME(?) AND stale = 0 ORDER BY blockTimestamp DESC LIMIT 1`; const params = [timestamp]; @@ -602,6 +633,7 @@ class BlocksRepository { SELECT MIN(height) as startBlock, MAX(height) as endBlock, SUM(reward) as totalReward, SUM(fees) as totalFee, SUM(tx_count) as totalTx FROM (SELECT height, reward, fees, tx_count FROM blocks + WHERE stale = 0 ORDER by height DESC LIMIT ?) as sub`; @@ -686,12 +718,13 @@ class BlocksRepository { FROM blocks JOIN blocks_prices on blocks_prices.height = blocks.height JOIN prices on prices.id = blocks_prices.price_id + WHERE stale = 0 `; if (interval !== null) { - query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } else if (timespan) { - query += ` WHERE blockTimestamp BETWEEN FROM_UNIXTIME(${timespan.from}) AND FROM_UNIXTIME(${timespan.to})`; + query += ` AND blockTimestamp BETWEEN FROM_UNIXTIME(${timespan.from}) AND FROM_UNIXTIME(${timespan.to})`; } query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`; @@ -717,10 +750,11 @@ class BlocksRepository { FROM blocks JOIN blocks_prices on blocks_prices.height = blocks.height JOIN prices on prices.id = blocks_prices.price_id + WHERE stale = 0 `; if (interval !== null) { - query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`; @@ -748,10 +782,11 @@ class BlocksRepository { CAST(AVG(JSON_EXTRACT(fee_span, '$[4]')) as INT) as avgFee_75, CAST(AVG(JSON_EXTRACT(fee_span, '$[5]')) as INT) as avgFee_90, CAST(AVG(JSON_EXTRACT(fee_span, '$[6]')) as INT) as avgFee_100 - FROM blocks`; + FROM blocks + WHERE stale = 0`; if (interval !== null) { - query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`; @@ -773,10 +808,11 @@ class BlocksRepository { CAST(AVG(height) as INT) as avgHeight, CAST(AVG(UNIX_TIMESTAMP(blockTimestamp)) as INT) as timestamp, CAST(AVG(size) as INT) as avgSize - FROM blocks`; + FROM blocks + WHERE stale = 0`; if (interval !== null) { - query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`; @@ -798,10 +834,11 @@ class BlocksRepository { CAST(AVG(height) as INT) as avgHeight, CAST(AVG(UNIX_TIMESTAMP(blockTimestamp)) as INT) as timestamp, CAST(AVG(weight) as INT) as avgWeight - FROM blocks`; + FROM blocks + WHERE stale = 0`; if (interval !== null) { - query += ` WHERE blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY UNIX_TIMESTAMP(blockTimestamp) DIV ${div}`; @@ -816,11 +853,12 @@ class BlocksRepository { /** * Get a list of blocks that have been indexed + * (includes stale blocks) */ - public async $getIndexedBlocks(): Promise<{ height: number, hash: string }[]> { + public async $getIndexedBlocks(): Promise<{ height: number, hash: string, stale: boolean }[]> { try { - const [rows] = await DB.query(`SELECT height, hash FROM blocks ORDER BY height DESC`) as RowDataPacket[][]; - return rows as { height: number, hash: string }[]; + const [rows] = await DB.query(`SELECT height, hash, stale FROM blocks ORDER BY height DESC`) as RowDataPacket[][]; + return rows as { height: number, hash: string, stale: boolean }[]; } catch (e) { logger.err('Cannot generate block size and weight history. Reason: ' + (e instanceof Error ? e.message : e)); throw e; @@ -865,7 +903,7 @@ class BlocksRepository { */ public async $getOldestConsecutiveBlock(): Promise { try { - const [rows]: any = await DB.query(`SELECT height, UNIX_TIMESTAMP(blockTimestamp) as timestamp, difficulty, bits FROM blocks ORDER BY height DESC`); + const [rows]: any = await DB.query(`SELECT height, UNIX_TIMESTAMP(blockTimestamp) as timestamp, difficulty, bits FROM blocks WHERE stale = 0 ORDER BY height DESC`); for (let i = 0; i < rows.length - 1; ++i) { if (rows[i].height - rows[i + 1].height > 1) { return rows[i]; @@ -929,7 +967,7 @@ class BlocksRepository { SELECT height, hash FROM blocks WHERE height >= ${minHeight} AND height <= ${maxHeight} AND - (utxoset_size IS NULL OR total_input_amt IS NULL) + (utxoset_size IS NULL OR total_input_amt IS NULL) AND stale = 0 `); return blocks; } catch (e) { @@ -940,6 +978,7 @@ class BlocksRepository { /** * Get all indexed blocks with missing coinbase addresses + * (includes stale blocks) */ public async $getBlocksWithoutCoinbaseAddresses(): Promise { try { @@ -1051,6 +1090,34 @@ class BlocksRepository { } } + /** + * Change which block at a height belongs to the canonical chain + * + * @param hash + * @param height + */ + public async $setCanonicalBlockAtHeight(hash: string | null, height: number): Promise { + try { + // do this first, so that we fail if the block hasn't actually been indexed yet + if (hash) { + await DB.query(` + UPDATE blocks SET stale = 0 + WHERE hash = ?`, + [hash] + ); + } + // all other blocks at this height must be stale + await DB.query(` + UPDATE blocks SET stale = 1 + WHERE height = ? AND hash != ?`, + [height, hash ?? ''] + ); + } catch (e) { + logger.err(`Cannot set canonical block at height. 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 diff --git a/backend/src/repositories/PoolsRepository.ts b/backend/src/repositories/PoolsRepository.ts index eda792bb3..d5e6da25d 100644 --- a/backend/src/repositories/PoolsRepository.ts +++ b/backend/src/repositories/PoolsRepository.ts @@ -45,10 +45,11 @@ class PoolsRepository { FROM blocks JOIN pools on pools.id = pool_id LEFT JOIN blocks_audits ON blocks_audits.height = blocks.height + WHERE blocks.stale = 0 `; if (interval) { - query += ` WHERE blocks.blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; + query += ` AND blocks.blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`; } query += ` GROUP BY pool_id @@ -70,6 +71,7 @@ class PoolsRepository { const query = `SELECT COUNT(height) as blockCount, pools.id as poolId, pools.name as poolName FROM pools LEFT JOIN blocks on pools.id = blocks.pool_id AND blocks.blockTimestamp BETWEEN FROM_UNIXTIME(?) AND FROM_UNIXTIME(?) + WHERE blocks.stale = 0 GROUP BY pools.id`; try { From de8875d05944dbb812432d395b8d590c42b03108 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 8 Sep 2025 09:06:41 +0000 Subject: [PATCH 414/534] index and serve stale blocks --- .../bitcoin/bitcoin-api-abstract-factory.ts | 4 +- backend/src/api/bitcoin/bitcoin-api.ts | 16 +++- backend/src/api/bitcoin/esplora-api.ts | 33 ++++++- backend/src/api/blocks.ts | 92 +++++++++---------- backend/src/api/chain-tips.ts | 17 +++- backend/src/api/pools-parser.ts | 6 +- backend/src/repositories/BlocksRepository.ts | 5 +- 7 files changed, 104 insertions(+), 69 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index c40019b10..e1aead616 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -11,8 +11,8 @@ export interface AbstractBitcoinApi { $getTransactionMerkleProof(txId: string): Promise; $getBlockHeightTip(): Promise; $getBlockHashTip(): Promise; - $getTxIdsForBlock(hash: string): Promise; - $getTxsForBlock(hash: string): Promise; + $getTxIdsForBlock(hash: string, fallbackToCore?: boolean): Promise; + $getTxsForBlock(hash: string, fallbackToCore?: boolean): Promise; $getBlockHash(height: number): Promise; $getBlockHeader(hash: string): Promise; $getBlock(hash: string): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index bad34af02..5d0acf9f3 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -107,16 +107,16 @@ class BitcoinApi implements AbstractBitcoinApi { return this.bitcoindClient.getBestBlockHash(); } - $getTxIdsForBlock(hash: string): Promise { + $getTxIdsForBlock(hash: string, fallbackToCore = false): Promise { return this.bitcoindClient.getBlock(hash, 1) .then((rpcBlock: IBitcoinApi.Block) => rpcBlock.tx); } - async $getTxsForBlock(hash: string): Promise { + async $getTxsForBlock(hash: string, fallbackToCore = false): Promise { const verboseBlock: IBitcoinApi.VerboseBlock = await this.bitcoindClient.getBlock(hash, 2); const transactions: IEsploraApi.Transaction[] = []; for (const tx of verboseBlock.tx) { - const converted = await this.$convertTransaction(tx, true); + const converted = await this.$convertTransaction(tx, true, false, verboseBlock.confirmations === -1); transactions.push(converted); } return transactions; @@ -269,7 +269,7 @@ class BitcoinApi implements AbstractBitcoinApi { return this.bitcoindClient.getNetworkHashPs(120, blockHeight); } - protected async $convertTransaction(transaction: IBitcoinApi.Transaction, addPrevout: boolean, lazyPrevouts = false): Promise { + protected async $convertTransaction(transaction: IBitcoinApi.Transaction, addPrevout: boolean, lazyPrevouts = false, allowMissingPrevouts = false): Promise { let esploraTransaction: IEsploraApi.Transaction = { txid: transaction.txid, version: transaction.version, @@ -318,7 +318,13 @@ class BitcoinApi implements AbstractBitcoinApi { } if (addPrevout) { - esploraTransaction = await this.$calculateFeeFromInputs(esploraTransaction, false, lazyPrevouts); + try { + esploraTransaction = await this.$calculateFeeFromInputs(esploraTransaction, false, lazyPrevouts); + } catch (e) { + if (!allowMissingPrevouts) { + throw e; + } + } } else if (!transaction.confirmations) { esploraTransaction = await this.$appendMempoolFeeData(esploraTransaction); } diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index d84d94ec4..8d2e088c1 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -8,6 +8,7 @@ import logger from '../../logger'; import { Common } from '../common'; import { SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; import os from 'os'; +import { bitcoinCoreApi } from './bitcoin-api-factory'; interface FailoverHost { host: string, rtts: number[], @@ -408,12 +409,36 @@ class ElectrsApi implements AbstractBitcoinApi { return this.failoverRouter.$get('/blocks/tip/hash'); } - $getTxIdsForBlock(hash: string): Promise { - return this.failoverRouter.$get('/block/' + hash + '/txids'); + async $getTxIdsForBlock(hash: string, fallbackToCore = false): Promise { + try { + const txids = await this.failoverRouter.$get('/block/' + hash + '/txids'); + return txids; + } catch (e) { + if (fallbackToCore && isAxiosError(e) && e.response?.status === 404) { + // might be a stale block, see if Core has it? + const coreBlock = await bitcoinCoreApi.$getBlock(hash); + if (coreBlock?.stale) { + return bitcoinCoreApi.$getTxIdsForBlock(hash); + } + } + throw e; + } } - $getTxsForBlock(hash: string): Promise { - return this.failoverRouter.$get('/internal/block/' + hash + '/txs'); + async $getTxsForBlock(hash: string, fallbackToCore = false): Promise { + try { + const txs = await this.failoverRouter.$get('/internal/block/' + hash + '/txs'); + return txs; + } catch (e) { + if (fallbackToCore && isAxiosError(e) && e.response?.status === 404) { + // might be a stale block, see if Core has it? + const coreBlock = await bitcoinCoreApi.$getBlock(hash); + if (coreBlock?.stale) { + return bitcoinCoreApi.$getTxsForBlock(hash); + } + } + throw e; + } } $getBlockHash(height: number): Promise { diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 6c30ca334..ae780c527 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -94,17 +94,19 @@ class Blocks { txIds: string[] | null = null, quiet: boolean = false, addMempoolData: boolean = false, + stale: boolean = false, ): Promise { const isEsplora = config.MEMPOOL.BACKEND === 'esplora'; const transactionMap: { [txid: string]: TransactionExtended } = {}; if (!txIds) { - txIds = await bitcoinApi.$getTxIdsForBlock(blockHash); + txIds = await bitcoinApi.$getTxIdsForBlock(blockHash, stale); } const mempool = memPool.getMempool(); let foundInMempool = 0; let totalFound = 0; + let missing = 0; // Copy existing transactions from the mempool if (!onlyCoinbase) { @@ -136,14 +138,17 @@ class Blocks { } catch (e) { const msg = `Cannot fetch coinbase tx ${txIds[0]}. Reason: ` + (e instanceof Error ? e.message : e); logger.err(msg); - throw new Error(msg); + // tolerate this error for stale blocks (the cb transaction won't be accessible via normal RPCs) + if (!stale) { + throw new Error(msg); + } } } // Fetch remaining txs in bulk - if (isEsplora && (txIds.length - totalFound > 500)) { + if ((isEsplora && (txIds.length - totalFound > 500)) || stale) { try { - const rawTransactions = await bitcoinApi.$getTxsForBlock(blockHash); + const rawTransactions = await bitcoinApi.$getTxsForBlock(blockHash, stale); for (const tx of rawTransactions) { if (!transactionMap[tx.txid]) { transactionMap[tx.txid] = addMempoolData ? transactionUtils.extendMempoolTransaction(tx) : transactionUtils.extendTransaction(tx); @@ -184,7 +189,6 @@ class Blocks { } // Require all transactions to be present - // (we should have thrown an error already if a tx request failed) if (txIds.some(txid => !transactionMap[txid])) { const msg = `Failed to fetch ${txIds.length - totalFound} transactions from block`; logger.err(msg); @@ -527,7 +531,7 @@ class Blocks { if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(block.hash)).map(tx => transactionUtils.extendMempoolTransaction(tx)); + const txs = (await bitcoinApi.$getTxsForBlock(block.hash, block.stale)).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 @@ -698,7 +702,7 @@ class Blocks { if (unclassifiedBlocks[height]) { const blockHash = unclassifiedBlocks[height]; // fetch transactions - txs = (await bitcoinApi.$getTxsForBlock(blockHash)).map(tx => transactionUtils.extendMempoolTransaction(tx)) || []; + txs = (await bitcoinApi.$getTxsForBlock(blockHash, true)).map(tx => transactionUtils.extendMempoolTransaction(tx)) || []; // add CPFP const cpfpSummary = calculateGoodBlockCpfp(height, txs, []); // classify @@ -876,7 +880,7 @@ class Blocks { } const blockHash = await bitcoinApi.$getBlockHash(blockHeight); const block: IEsploraApi.Block = await bitcoinApi.$getBlock(blockHash); - const transactions = await this.$getTransactionsExtended(blockHash, block.height, block.timestamp, true, null, true); + const transactions = await this.$getTransactionsExtended(blockHash, block.height, block.timestamp, !block.stale, null, true, block.stale); const blockExtended = await this.$getBlockExtended(block, transactions); newlyIndexed++; @@ -1182,21 +1186,39 @@ class Blocks { } } - /** - * Index a block if it's missing from the database. Returns the block after indexing - */ - public async $indexBlock(height: number): Promise { - if (Common.indexingEnabled()) { + public async $indexBlockByHeight(height: number, skipDb = false): Promise { + if (Common.indexingEnabled() && !skipDb) { const dbBlock = await blocksRepository.$getBlockByHeight(height); if (dbBlock !== null) { return dbBlock; } } + // not already indexed + const hash = await bitcoinApi.$getBlockHash(height); + return this.$indexBlock(hash); + } - const blockHash = await bitcoinApi.$getBlockHash(height); - const block: IEsploraApi.Block = await bitcoinApi.$getBlock(blockHash); - const transactions = await this.$getTransactionsExtended(blockHash, block.height, block.timestamp, true); + /** + * Index a block if it's missing from the database. Returns the block after indexing + */ + public async $indexBlock(hash: string, block?: IEsploraApi.Block, skipDb = false): Promise { + if (Common.indexingEnabled() && !skipDb) { + const dbBlock = await blocksRepository.$getBlockByHash(hash); + if (dbBlock !== null) { + return dbBlock; + } + } + + if (!block) { + // dont' bother trying to fetch orphan blocks from esplora + block = await (chainTips.isOrphaned(hash) ? bitcoinCoreApi.$getBlock(hash) : bitcoinApi.$getBlock(hash)); + } + + const transactions = await this.$getTransactionsExtended(hash, block.height, block.timestamp, !block.stale, null, false, false, block.stale); const blockExtended = await this.$getBlockExtended(block, transactions); + if (block.stale) { + blockExtended.canonical = await bitcoinApi.$getBlockHash(block.height); + } if (Common.indexingEnabled()) { await blocksRepository.$saveBlockInDatabase(blockExtended); @@ -1205,16 +1227,6 @@ class Blocks { return blockExtended; } - public async $indexStaleBlock(hash: string): Promise { - const block: IEsploraApi.Block = await bitcoinApi.$getBlock(hash); - const transactions = await this.$getTransactionsExtended(hash, block.height, block.timestamp, true); - const blockExtended = await this.$getBlockExtended(block, transactions); - - blockExtended.canonical = await bitcoinApi.$getBlockHash(block.height); - - return blockExtended; - } - /** * Get one block by its hash */ @@ -1231,12 +1243,7 @@ class Blocks { } // Bitcoin network, add our custom data on top - const block: IEsploraApi.Block = await bitcoinApi.$getBlock(hash); - if (block.stale) { - return await this.$indexStaleBlock(hash); - } else { - return await this.$indexBlock(block.height); - } + return await this.$indexBlock(hash); } public async $getStrippedBlockTransactions(hash: string, skipMemoryCache = false, @@ -1284,16 +1291,9 @@ class Blocks { }; summaryVersion = cpfpSummary.version; } else { - if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx)); - summary = this.summarizeBlockTransactions(hash, height || 0, txs); - summaryVersion = 1; - } else { - // Call Core RPC - const block = await bitcoinClient.getBlock(hash, 2); - summary = this.summarizeBlock(block); - height = block.height; - } + const txs = (await bitcoinApi.$getTxsForBlock(hash, true)).map(tx => transactionUtils.extendTransaction(tx)); + summary = this.summarizeBlockTransactions(hash, height || 0, txs); + summaryVersion = 1; } if (height == null) { const block = await bitcoinApi.$getBlock(hash); @@ -1344,7 +1344,7 @@ class Blocks { returnBlocks.push(block); } else { // Using indexing (find by height, index on the fly, save in database) - block = await this.$indexBlock(currentHeight); + block = await this.$indexBlockByHeight(currentHeight); returnBlocks.push(block); } currentHeight--; @@ -1369,7 +1369,7 @@ class Blocks { while (fromHeight <= toHeight) { let block: BlockExtended | null = await blocksRepository.$getBlockByHeight(fromHeight); if (!block) { - await this.$indexBlock(fromHeight); + await this.$indexBlockByHeight(fromHeight); block = await blocksRepository.$getBlockByHeight(fromHeight); if (!block) { continue; @@ -1426,7 +1426,7 @@ class Blocks { let summary; let summaryVersion = 0; if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(cleanBlock.hash)).map(tx => transactionUtils.extendTransaction(tx)); + const txs = (await bitcoinApi.$getTxsForBlock(cleanBlock.hash, cleanBlock.stale)).map(tx => transactionUtils.extendTransaction(tx)); summary = this.summarizeBlockTransactions(cleanBlock.hash, cleanBlock.height, txs); summaryVersion = 1; } else { @@ -1510,7 +1510,7 @@ class Blocks { let transactions = txs; if (!transactions) { if (config.MEMPOOL.BACKEND === 'esplora') { - transactions = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendMempoolTransaction(tx)); + transactions = (await bitcoinApi.$getTxsForBlock(hash, true)).map(tx => transactionUtils.extendMempoolTransaction(tx)); } if (!transactions) { const block = await bitcoinClient.getBlock(hash, 2); diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 2ed9403fc..a1aac40ac 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -1,4 +1,5 @@ import logger from '../logger'; +import { bitcoinCoreApi } from './bitcoin/bitcoin-api-factory'; import bitcoinClient from './bitcoin/bitcoin-client'; export interface ChainTip { @@ -17,6 +18,7 @@ export interface OrphanedBlock { class ChainTips { private chainTips: ChainTip[] = []; + private maybeOrphanedBlocks: { [hash: string]: boolean } = {}; private orphanedBlocks: { [hash: string]: OrphanedBlock } = {}; private blockCache: { [hash: string]: OrphanedBlock } = {}; private orphansByHeight: { [height: number]: OrphanedBlock[] } = {}; @@ -28,7 +30,7 @@ class ChainTips { const start = Date.now(); const breakAt = start + 10000; let newOrphans = 0; - this.orphanedBlocks = {}; + const newOrphanedBlocks = {}; for (const chain of this.chainTips) { if (chain.status === 'valid-fork' || chain.status === 'valid-headers') { @@ -37,12 +39,12 @@ class ChainTips { do { let orphan = this.blockCache[hash]; if (!orphan) { - const block = await bitcoinClient.getBlock(hash); - if (block && block.confirmations === -1) { + const block = await bitcoinCoreApi.$getBlock(hash); + if (block && block.stale) { newOrphans++; orphan = { height: block.height, - hash: block.hash, + hash: block.id, status: chain.status, prevhash: block.previousblockhash, }; @@ -55,7 +57,7 @@ class ChainTips { hash = orphan?.prevhash; } while (hash && (Date.now() < breakAt)); for (const orphan of orphans) { - this.orphanedBlocks[orphan.hash] = orphan; + newOrphanedBlocks[orphan.hash] = orphan; } } if (Date.now() >= breakAt) { @@ -65,6 +67,7 @@ class ChainTips { } this.orphansByHeight = {}; + this.orphanedBlocks = newOrphanedBlocks; const allOrphans = Object.values(this.orphanedBlocks); for (const orphan of allOrphans) { if (!this.orphansByHeight[orphan.height]) { @@ -90,6 +93,10 @@ class ChainTips { public getChainTips(): ChainTip[] { return this.chainTips; } + + public isOrphaned(hash: string): boolean { + return !!this.orphanedBlocks[hash] || this.blockCache[hash]?.status === 'valid-fork' || this.blockCache[hash]?.status === 'valid-headers'; + } } export default new ChainTips(); \ No newline at end of file diff --git a/backend/src/api/pools-parser.ts b/backend/src/api/pools-parser.ts index 2895da5a5..4b4ebb739 100644 --- a/backend/src/api/pools-parser.ts +++ b/backend/src/api/pools-parser.ts @@ -122,10 +122,8 @@ class PoolsParser { // refresh the in-memory block cache with the reindexed data if (clearCache) { for (const block of blocks.getBlocks()) { - const reindexedBlock = await blocks.$indexBlock(block.height); - if (reindexedBlock.id === block.id) { - block.extras.pool = reindexedBlock.extras.pool; - } + const reindexedBlock = await blocks.$indexBlock(block.id); + block.extras.pool = reindexedBlock.extras.pool; } // update persistent cache with the reindexed data diskCache.$saveCacheToDisk(); diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 0a3469665..938d13a64 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -1,4 +1,4 @@ -import bitcoinApi from '../api/bitcoin/bitcoin-api-factory'; +import bitcoinApi, { bitcoinCoreApi } from '../api/bitcoin/bitcoin-api-factory'; import { BlockExtended, BlockExtension, BlockPrice, EffectiveFeeStats } from '../mempool.interfaces'; import DB from '../database'; import logger from '../logger'; @@ -1201,11 +1201,10 @@ class BlocksRepository { { extras.feePercentiles = await BlocksSummariesRepository.$getFeePercentilesByBlockId(dbBlk.id); if (extras.feePercentiles === null) { - let summary; let summaryVersion = 0; if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(dbBlk.id)).map(tx => transactionUtils.extendTransaction(tx)); + const txs = (await bitcoinApi.$getTxsForBlock(dbBlk.id, dbBlk.stale)).map(tx => transactionUtils.extendTransaction(tx)); summary = blocks.summarizeBlockTransactions(dbBlk.id, dbBlk.height, txs); summaryVersion = 1; } else { From cd2119e89b2fecc6609b30cd44985ab58b4b7465 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 8 Sep 2025 09:07:51 +0000 Subject: [PATCH 415/534] improve reorg handling and avoid deleting stale blocks --- backend/src/api/blocks.ts | 114 ++++++++++++------- backend/src/api/chain-tips.ts | 13 +++ backend/src/repositories/BlocksRepository.ts | 91 +++++++++------ 3 files changed, 143 insertions(+), 75 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index ae780c527..50a03646f 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -972,12 +972,6 @@ class Blocks { } else { this.currentBlockHeight++; logger.debug(`New block found (#${this.currentBlockHeight})!`); - await this.updateQuarterEpochBlockTime(); - // skip updating the orphan block cache if we've fallen behind the chain tip - if (this.currentBlockHeight >= blockHeightTip - 2) { - this.updateTimerProgress(timer, `getting orphaned blocks for ${this.currentBlockHeight}`); - await chainTips.updateOrphanedBlocks(); - } } this.updateTimerProgress(timer, `getting block data for ${this.currentBlockHeight}`); @@ -1006,38 +1000,7 @@ class Blocks { if (Common.indexingEnabled()) { if (!fastForwarded) { - const lastBlock = await blocksRepository.$getBlockByHeight(blockExtended.height - 1); - this.updateTimerProgress(timer, `got block by height for ${this.currentBlockHeight}`); - if (lastBlock !== null && blockExtended.previousblockhash !== lastBlock.id) { - logger.warn(`Chain divergence detected at block ${lastBlock.height}, re-indexing most recent data`, logger.tags.mining); - // We assume there won't be a reorg with more than 10 block depth - this.updateTimerProgress(timer, `rolling back diverged chain from ${this.currentBlockHeight}`); - await BlocksRepository.$deleteBlocksFrom(lastBlock.height - 10); - await HashratesRepository.$deleteLastEntries(); - await cpfpRepository.$deleteClustersFrom(lastBlock.height - 10); - await AccelerationRepository.$deleteAccelerationsFrom(lastBlock.height - 10); - this.blocks = this.blocks.slice(0, -10); - this.updateTimerProgress(timer, `rolled back chain divergence from ${this.currentBlockHeight}`); - for (let i = 10; i >= 0; --i) { - const newBlock = await this.$indexBlock(lastBlock.height - i); - this.blocks.push(newBlock); - this.updateTimerProgress(timer, `reindexed block`); - let newCpfpSummary; - if (config.MEMPOOL.CPFP_INDEXING) { - newCpfpSummary = await this.$indexCPFP(newBlock.id, lastBlock.height - i); - this.updateTimerProgress(timer, `reindexed block cpfp`); - } - await this.$getStrippedBlockTransactions(newBlock.id, true, true, newCpfpSummary, newBlock.height); - this.updateTimerProgress(timer, `reindexed block summary`); - } - await mining.$indexDifficultyAdjustments(); - await DifficultyAdjustmentsRepository.$deleteLastAdjustment(); - this.updateTimerProgress(timer, `reindexed difficulty adjustments`); - logger.info(`Re-indexed 10 blocks and summaries. Also re-indexed the last difficulty adjustments. Will re-index latest hashrates in a few seconds.`, logger.tags.mining); - indexer.reindex(); - - websocketHandler.handleReorg(); - } + await this.$handleReorgs(blockExtended, timer); } await blocksRepository.$saveBlockInDatabase(blockExtended); @@ -1109,6 +1072,12 @@ class Blocks { this.currentBits = block.bits; } + // skip updating the orphan block cache if we've fallen behind the chain tip + if (this.currentBlockHeight >= blockHeightTip - 2) { + this.updateTimerProgress(timer, `getting orphaned blocks for ${this.currentBlockHeight}`); + await chainTips.updateOrphanedBlocks(); + } + // wait for pending async callbacks to finish this.updateTimerProgress(timer, `waiting for async callbacks to complete for ${this.currentBlockHeight}`); await Promise.all(callbackPromises); @@ -1198,6 +1167,75 @@ class Blocks { return this.$indexBlock(hash); } + private async $handleReorgs(blockExtended: BlockExtended, timer: any): Promise { + let forkTail = blockExtended; + let currentlyIndexed = await blocksRepository.$getBlockByHeight(forkTail.height - 1); + this.updateTimerProgress(timer, `got block by height at previous tip ${forkTail.height - 1}`); + + // previous blockhash is not what we expected: there has been a reorg + if (currentlyIndexed !== null && forkTail.previousblockhash !== currentlyIndexed.id) { + logger.warn(`Chain divergence detected at block ${blockExtended.height}, re-indexing most recent data`, logger.tags.mining); + this.updateTimerProgress(timer, `reconnecting diverged chain from ${this.currentBlockHeight}`); + const newBlocks: BlockExtended[] = []; + // walk back along the chain until we reach the fork point + while (currentlyIndexed !== null && forkTail.previousblockhash !== currentlyIndexed.id) { + const newBlock = await this.$indexBlock(forkTail.previousblockhash); + await blocksRepository.$setCanonicalBlockAtHeight(newBlock.id, newBlock.height); + newBlocks.push(newBlock); + this.updateTimerProgress(timer, `reindexed block at ${newBlock.height} (${newBlock.id})`); + let newCpfpSummary; + if (config.MEMPOOL.CPFP_INDEXING) { + newCpfpSummary = await this.$indexCPFP(newBlock.id, newBlock.height); + this.updateTimerProgress(timer, `reindexed block cpfp`); + } + await this.$getStrippedBlockTransactions(newBlock.id, true, true, newCpfpSummary, newBlock.height); + this.updateTimerProgress(timer, `reindexed block summary`); + + forkTail = newBlock; + currentlyIndexed = await blocksRepository.$getBlockByHeight(forkTail.height - 1); + this.updateTimerProgress(timer, `got block by height for ${forkTail.height - 1}`); + } + + // rebuild the block cache + let currentBlock = forkTail; + const cachedBlocksByHash = {}; + for (const cached of this.blocks) { + cachedBlocksByHash[cached.id] = cached; + } + while (currentBlock.height > 0 && newBlocks.length < (config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4)) { + const newBlock = cachedBlocksByHash[currentBlock.previousblockhash] || await blocksRepository.$getBlockByHash(currentBlock.previousblockhash); + if (newBlock) { + newBlocks.push(newBlock); + currentBlock = newBlock; + } else { + break; + } + } + this.updateTimerProgress(timer, `rebuilt block cache`); + + // force re-indexing of block-related data + await HashratesRepository.$deleteHashratesFromTimestamp(forkTail.timestamp - 604800); + await DifficultyAdjustmentsRepository.$deleteAdjustementsFromHeight(forkTail.height); + await cpfpRepository.$deleteClustersFrom(forkTail.height); + await AccelerationRepository.$deleteAccelerationsFrom(forkTail.height); + chainTips.clearOrphanCacheAboveHeight(forkTail.height); + this.updateTimerProgress(timer, `deleted stale block data`); + + this.blocks = newBlocks; + if (this.blocks.length > config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4) { + this.blocks = this.blocks.slice(-config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4); + } + this.updateTimerProgress(timer, `connected new best chain from ${forkTail.height} to ${this.currentBlockHeight}`); + + await mining.$indexDifficultyAdjustments(); + this.updateTimerProgress(timer, `reindexed difficulty adjustments`); + logger.info(`Re-indexed ${this.currentBlockHeight - forkTail.height} blocks and summaries. Also re-indexed the last difficulty adjustments. Will re-index latest hashrates in a few seconds.`, logger.tags.mining); + indexer.reindex(); + + websocketHandler.handleReorg(); + } + } + /** * Index a block if it's missing from the database. Returns the block after indexing */ diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index a1aac40ac..63990bce5 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -94,6 +94,19 @@ class ChainTips { return this.chainTips; } + clearOrphanCacheAboveHeight(height: number): void { + for (const h in this.orphansByHeight) { + if (Number(h) > height) { + const orphans = this.orphansByHeight[h]; + delete this.orphansByHeight[h]; + for (const o of orphans) { + delete this.orphanedBlocks[o.hash]; + delete this.blockCache[o.hash]; + } + } + } + } + public isOrphaned(hash: string): boolean { return !!this.orphanedBlocks[hash] || this.blockCache[hash]?.status === 'valid-fork' || this.blockCache[hash]?.status === 'valid-headers'; } diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 938d13a64..445bb147f 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -647,44 +647,74 @@ class BlocksRepository { } /** - * Check if the chain of block hash is valid and delete data from the stale branch if needed + * Check if the canonical chain of blocks is valid and fix it if needed */ public async $validateChain(): Promise { try { const start = new Date().getTime(); + const tip = await bitcoinApi.$getBlockHashTip(); + let firstBadBlockHeight: number | null = null; const [blocks]: any[] = await DB.query(` SELECT height, hash, previous_block_hash, - UNIX_TIMESTAMP(blockTimestamp) AS timestamp + UNIX_TIMESTAMP(blockTimestamp) AS timestamp, + stale FROM blocks - ORDER BY height + ORDER BY height DESC `); - - let partialMsg = false; - let idx = 1; - while (idx < blocks.length) { - if (blocks[idx].height - 1 !== blocks[idx - 1].height) { - if (partialMsg === false) { - logger.info('Some blocks are not indexed, skipping missing blocks during chain validation'); - partialMsg = true; - } - ++idx; - continue; + const blocksByHash = {}; + const blocksByHeight = {}; + let minHeight = Infinity; + for (const block of blocks) { + blocksByHash[block.hash] = block; + if (!blocksByHeight[block.height]) { + blocksByHeight[block.height] = [block]; + } else { + blocksByHeight[block.height].push(block); } - - if (blocks[idx].previous_block_hash !== blocks[idx - 1].hash) { - logger.warn(`Chain divergence detected at block ${blocks[idx - 1].height}`); - await this.$deleteBlocksFrom(blocks[idx - 1].height); - await HashratesRepository.$deleteHashratesFromTimestamp(blocks[idx - 1].timestamp - 604800); - await DifficultyAdjustmentsRepository.$deleteAdjustementsFromHeight(blocks[idx - 1].height); - return false; - } - ++idx; + minHeight = block.height; } - logger.debug(`${idx} blocks hash validated in ${new Date().getTime() - start} ms`); + // ensure that indexed blocks are correctly classified as stale or canonical + // iterate back to genesis, resetting canonical status where necessary + let hash = tip; + const tipHeight = blocksByHash[hash].height || (await bitcoinApi.$getBlock(hash))?.height; + for (let height = tipHeight; height > 0; height--) { + const block = blocksByHash[hash]; + if (!block) { + // block hasn't been indexed + // mark any other blocks at this height as stale + if (blocksByHeight[height]?.length > 1) { + await this.$setCanonicalBlockAtHeight(null, height); + } + } else if (block.stale) { + // block is marked stale, but shouldn't be + await this.$setCanonicalBlockAtHeight(block.hash, height); + firstBadBlockHeight = height; + } + hash = block?.previous_block_hash; + if (!hash) { + if (height < minHeight) { + // we haven't indexed anything below this height anyway + height = -1; + break; + } else { + logger.info('Some blocks are not indexed, looking up prevhashes directly for chain validation'); + hash = await bitcoinApi.$getBlockHash(height - 1); + } + } + } + + if (firstBadBlockHeight != null) { + logger.warn(`Chain divergence detected at block ${firstBadBlockHeight}`); + await HashratesRepository.$deleteHashratesFromTimestamp(blocksByHash[firstBadBlockHeight].timestamp - 604800); + await DifficultyAdjustmentsRepository.$deleteAdjustementsFromHeight(firstBadBlockHeight); + return false; + } + + logger.debug(`validated best chain of ${tipHeight} blocks in ${new Date().getTime() - start} ms`); return true; } catch (e) { logger.err('Cannot validate chain of block hash. Reason: ' + (e instanceof Error ? e.message : e)); @@ -692,19 +722,6 @@ class BlocksRepository { } } - /** - * Delete blocks from the database from blockHeight - */ - public async $deleteBlocksFrom(blockHeight: number) { - logger.info(`Delete newer blocks from height ${blockHeight} from the database`, logger.tags.mining); - - try { - await DB.query(`DELETE FROM blocks where height >= ${blockHeight}`); - } catch (e) { - logger.err('Cannot delete indexed blocks. Reason: ' + (e instanceof Error ? e.message : e)); - } - } - /** * Get the historical averaged block fees */ From b17c2462263c34c20bcadbcb0f605789c2fe8b40 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 11 Sep 2025 10:05:52 +0000 Subject: [PATCH 416/534] fix tx status in converted block txs --- backend/src/api/bitcoin/bitcoin-api.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 5d0acf9f3..5c5691c35 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -117,6 +117,12 @@ class BitcoinApi implements AbstractBitcoinApi { const transactions: IEsploraApi.Transaction[] = []; for (const tx of verboseBlock.tx) { const converted = await this.$convertTransaction(tx, true, false, verboseBlock.confirmations === -1); + converted.status = { + confirmed: true, + block_height: verboseBlock.height, + block_hash: hash, + block_time: verboseBlock.time, + }; transactions.push(converted); } return transactions; From 88e6708dcbc102b5276bee9629a9b05ad98201bd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 3 Oct 2025 04:30:12 +0000 Subject: [PATCH 417/534] avoid failed lookup for orphan block height --- backend/src/api/blocks.ts | 10 ++++++++-- backend/src/api/chain-tips.ts | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 50a03646f..151dec8c4 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1334,8 +1334,14 @@ class Blocks { summaryVersion = 1; } if (height == null) { - const block = await bitcoinApi.$getBlock(hash); - height = block.height; + // If the block is orphaned, use the height from the chaintips cache + const orphanedBlock = chainTips.getOrphanedBlock(hash); + if (orphanedBlock) { + height = orphanedBlock.height; + } else { + const block = await bitcoinApi.$getBlock(hash); + height = block.height; + } } // Index the response if needed diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 63990bce5..046f57aee 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -18,7 +18,6 @@ export interface OrphanedBlock { class ChainTips { private chainTips: ChainTip[] = []; - private maybeOrphanedBlocks: { [hash: string]: boolean } = {}; private orphanedBlocks: { [hash: string]: OrphanedBlock } = {}; private blockCache: { [hash: string]: OrphanedBlock } = {}; private orphansByHeight: { [height: number]: OrphanedBlock[] } = {}; @@ -110,6 +109,10 @@ class ChainTips { public isOrphaned(hash: string): boolean { return !!this.orphanedBlocks[hash] || this.blockCache[hash]?.status === 'valid-fork' || this.blockCache[hash]?.status === 'valid-headers'; } + + public getOrphanedBlock(hash: string): OrphanedBlock | undefined { + return this.orphanedBlocks[hash] || this.blockCache[hash]; + } } export default new ChainTips(); \ No newline at end of file From 9973c35f180db57f86e7c809dadef1dc32b40e7c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 3 Oct 2025 05:37:54 +0000 Subject: [PATCH 418/534] fix block cache order on reorg --- backend/src/api/blocks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 151dec8c4..2c1fffec8 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -1221,7 +1221,7 @@ class Blocks { chainTips.clearOrphanCacheAboveHeight(forkTail.height); this.updateTimerProgress(timer, `deleted stale block data`); - this.blocks = newBlocks; + this.blocks = newBlocks.reverse(); if (this.blocks.length > config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4) { this.blocks = this.blocks.slice(-config.MEMPOOL.INITIAL_BLOCKS_AMOUNT * 4); } From 5236f79358c818906e8f305f31d6b7b568023a9b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 15 Sep 2025 11:00:33 +0000 Subject: [PATCH 419/534] stale vs winning block comparison feature --- .../block-overview-graph/tx-view.ts | 4 +- .../components/block-overview-graph/utils.ts | 6 + .../block-overview-tooltip.component.html | 2 + .../app/components/block/block.component.html | 149 +++++++++-- .../app/components/block/block.component.scss | 6 + .../app/components/block/block.component.ts | 252 ++++++++++++++++-- .../src/app/interfaces/node-api.interface.ts | 4 +- 7 files changed, 370 insertions(+), 53 deletions(-) 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 53ce684ed..541d83dc9 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -33,8 +33,8 @@ export default class TxView implements TransactionStripped { flags: number; bigintFlags?: bigint | null = 0b00000100_00000000_00000000_00000000n; time?: number; - status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; - context?: 'projected' | 'actual'; + status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated' | 'matched' | 'unmatched'; + context?: 'projected' | 'actual' | 'stale' | 'canonical'; scene?: BlockScene; initialised: boolean; diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index 985751b4a..47677c4f1 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -171,6 +171,12 @@ export function defaultColorFunction( } else { return levelColor; } + case 'unmatched': + if (tx.context === 'stale') { + return auditColors.censored; + } else { + return auditColors.added; + } default: if (tx.acc) { return auditColors.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 f8fb3c89d..d97e3d02c 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 @@ -87,6 +87,8 @@ Marginal fee rate Conflict Accelerated + Match + No Match
    +
    + @if (block?.stale) { + + } @else { + + }
    -

    Expected Block

    + @if (block?.stale && !showAudit) { +

    + Stale Block + @if (block?.extras?.pool) { + + {{ block?.extras?.pool.name }} + } +

    + } @else { +

    Expected Block

    + }
    - + @if (block?.stale && !showAudit) { + + } @else { + + }
    -

    Actual Block

    +

    + @if (block?.stale) { + @if (showAudit) { + Stale Block + } @else { + Winning Block + @if (canonicalBlock?.extras?.pool) { + + {{ canonicalBlock?.extras?.pool.name }} + } + } + } @else { + Actual Block + + } +

    - + @if (block?.stale && !showAudit) { + + } @else { + + }
    @@ -333,7 +379,9 @@
    @defer (on viewport) { + @if (!block?.stale) { + } } @placeholder {
    @@ -447,6 +495,61 @@
    + + + + + + + + + + + + + + + + +
    Total fees + +
    Weight
    Transactions{{ staleStats.txCount || 0 }}
    +
    + + + + + + + + + + + + + + + + + +
    Total fees + + + {{ canonicalStats.feeDelta > 0 ? '+' : '' }}{{ (canonicalStats.feeDelta * 100) | amountShortener: 2 }}% + +
    Weight + + + {{ canonicalStats.weightDelta > 0 ? '+' : '' }}{{ (canonicalStats.weightDelta * 100) | amountShortener: 2 }}% + +
    Transactions + {{ canonicalStats.txCount || 0 }} + + {{ canonicalStats.txDelta > 0 ? '+' : '' }}{{ (canonicalStats.txDelta * 100) | amountShortener: 2 }}% + +
    +
    + diff --git a/frontend/src/app/components/block/block.component.scss b/frontend/src/app/components/block/block.component.scss index 945d61366..77e5bead1 100644 --- a/frontend/src/app/components/block/block.component.scss +++ b/frontend/src/app/components/block/block.component.scss @@ -92,6 +92,12 @@ h1 { position: relative; top: -1px; margin-right: 2px; + + &.large { + width: 30px; + height: 30px; + margin: 0 0.3em; + } } .row { diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 779739ddc..57cc44ab5 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -19,6 +19,15 @@ import { ServicesApiServices } from '@app/services/services-api.service'; import { PreloadService } from '@app/services/preload.service'; import { identifyPrioritizedTransactions } from '@app/shared/transaction.utils'; +interface ComparisonStats { + totalFees: number; + totalWeight: number; + txCount: number; + feeDelta: number; + weightDelta: number; + txDelta: number; +} + @Component({ selector: 'app-block', templateUrl: './block.component.html', @@ -67,10 +76,11 @@ export class BlockComponent implements OnInit, OnDestroy { numMissing: number = 0; paginationMaxSize = window.matchMedia('(max-width: 670px)').matches ? 3 : 5; numUnexpected: number = 0; - mode: 'projected' | 'actual' = 'projected'; + mode: 'projected' | 'actual' | 'stale' = 'projected'; currentQueryParams: Params; overviewSubscription: Subscription; + canonicalSubscription: Subscription; accelerationsSubscription: Subscription; keyNavigationSubscription: Subscription; blocksSubscription: Subscription; @@ -85,6 +95,11 @@ export class BlockComponent implements OnInit, OnDestroy { oobSubscription: Subscription; priceSubscription: Subscription; blockConversion: Price; + canonicalBlock: BlockExtended; + canonicalTransactions: TransactionStripped[]; + staleTransactions: TransactionStripped[]; + staleStats: ComparisonStats | null = null; + canonicalStats: ComparisonStats | null = null; @ViewChildren('blockGraphProjected') blockGraphProjected: QueryList; @ViewChildren('blockGraphActual') blockGraphActual: QueryList; @@ -108,6 +123,10 @@ export class BlockComponent implements OnInit, OnDestroy { this.webGlEnabled = this.stateService.isBrowser && detectWebGL(); } + get showComparison() { + return this.showAudit || this.block?.stale; + } + ngOnInit(): void { this.websocketService.want(['blocks', 'mempool-blocks']); this.network = this.stateService.network; @@ -122,14 +141,16 @@ export class BlockComponent implements OnInit, OnDestroy { this.isAuditEnabledSubscription = this.isAuditEnabledFromParam().subscribe(auditParam => { if (this.auditParamEnabled) { this.auditModeEnabled = auditParam; - } else { - this.auditPrefSubscription = this.stateService.hideAudit.subscribe(hide => { - this.auditModeEnabled = !hide; - this.showAudit = this.auditAvailable && this.auditModeEnabled; - }); } }); } + this.auditPrefSubscription = this.stateService.hideAudit.subscribe((hide) => { + this.auditModeEnabled = !hide; + this.showAudit = this.auditSupported && this.auditAvailable && this.auditModeEnabled; + if (this.block?.stale) { + this.setupBlockGraphs(); + } + }); this.cacheBlocksSubscription = this.cacheService.loadedBlocks$.subscribe((block) => { this.loadedCacheBlock(block); @@ -154,6 +175,7 @@ export class BlockComponent implements OnInit, OnDestroy { } else if (block.height === this.block?.height) { this.block.stale = true; this.block.canonical = block.id; + this.fetchCanonicalBlock(); } } }); @@ -270,15 +292,17 @@ export class BlockComponent implements OnInit, OnDestroy { if (block?.extras?.reward !== undefined) { this.fees = block.extras.reward / 100000000 - this.blockSubsidy; } - this.stateService.markBlock$.next({ blockHeight: this.blockHeight }); this.isLoadingOverview = true; this.overviewError = null; - const cachedBlock = this.cacheService.getCachedBlock(block.height); - if (!cachedBlock) { - this.cacheService.loadBlock(block.height); - } else { - this.loadedCacheBlock(cachedBlock); + if (!block.stale) { + this.stateService.markBlock$.next({ blockHeight: this.blockHeight }); + const cachedBlock = this.cacheService.getCachedBlock(block.height); + if (!cachedBlock) { + this.cacheService.loadBlock(block.height); + } else { + this.loadedCacheBlock(cachedBlock); + } } }), throttleTime(300, asyncScheduler, { leading: true, trailing: true }), @@ -288,6 +312,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.overviewSubscription = this.block$.pipe( switchMap((block) => { return forkJoin([ + of(block), this.apiService.getStrippedBlockTransactions$(block.id) .pipe( catchError((err) => { @@ -301,11 +326,36 @@ export class BlockComponent implements OnInit, OnDestroy { this.overviewError = err; return of(null); }) - ) + ), + block.stale ? this.electrsApiService.getBlockHashFromHeight$(block.height) + .pipe( + switchMap((hash) => { + return forkJoin([ + this.apiService.getBlock$(hash).pipe( + catchError((err) => { + console.error('Error fetching canonical block:', err); + this.overviewError = err; + return of(null); + }) + ), + this.apiService.getStrippedBlockTransactions$(hash).pipe( + catchError((err) => { + console.error('Error fetching canonical transactions:', err); + this.overviewError = err; + return of(null); + }) + ) + ]); + }), + catchError((err) => { + console.error('Error fetching canonical block:', err); + return of([null, null]); + }) + ) : of([null, null]), ]); }) ) - .subscribe(([transactions, blockAudit]) => { + .subscribe(([block, transactions, blockAudit, [canonicalBlock, canonicalTransactions]]) => { if (transactions) { this.strippedTransactions = transactions; } else { @@ -313,6 +363,20 @@ export class BlockComponent implements OnInit, OnDestroy { } this.blockAudit = blockAudit; + // Handle canonical block data from the overviewSubscription (when block.stale is true from backend) + if (block.stale && canonicalBlock && canonicalTransactions) { + this.canonicalBlock = canonicalBlock; + this.canonicalTransactions = canonicalTransactions; + this.staleTransactions = JSON.parse(JSON.stringify(transactions)); + this.setupStaleComparison(); + this.setAuditMode(false); + } else if (!block.stale) { + // Clear stale-related data when viewing a non-stale block + this.staleTransactions = null; + this.canonicalBlock = null; + this.canonicalTransactions = null; + } + this.setupBlockAudit(); this.isLoadingOverview = false; }); @@ -370,10 +434,16 @@ export class BlockComponent implements OnInit, OnDestroy { } else { this.showDetails = false; } - if (params.view === 'projected') { - this.mode = 'projected'; - } else { - this.mode = 'actual'; + switch (params.view) { + case 'stale': + this.mode = 'stale'; + break; + case 'projected': + this.mode = 'projected'; + break; + default: + this.mode = 'actual'; + break; } this.setupBlockGraphs(); }); @@ -416,6 +486,7 @@ export class BlockComponent implements OnInit, OnDestroy { ngOnDestroy(): void { this.stateService.markBlock$.next({}); this.overviewSubscription?.unsubscribe(); + this.canonicalSubscription?.unsubscribe(); this.accelerationsSubscription?.unsubscribe(); this.keyNavigationSubscription?.unsubscribe(); this.blocksSubscription?.unsubscribe(); @@ -504,6 +575,120 @@ export class BlockComponent implements OnInit, OnDestroy { } } + fetchCanonicalBlock(): void { + if (!this.block?.stale || !this.block?.height) { + return; + } + + this.electrsApiService.getBlockHashFromHeight$(this.block.height) + .pipe( + switchMap((hash) => { + return forkJoin([ + this.apiService.getBlock$(hash).pipe( + catchError((err) => { + console.error('Error fetching canonical block:', err); + this.overviewError = err; + return of(null); + }) + ), + this.apiService.getStrippedBlockTransactions$(hash).pipe( + catchError((err) => { + console.error('Error fetching canonical transactions:', err); + this.overviewError = err; + return of(null); + }) + ) + ]); + }), + catchError((err) => { + console.error('Error fetching canonical block hash:', err); + return of([null, null]); + }) + ) + .subscribe(([canonicalBlock, canonicalTransactions]) => { + this.canonicalBlock = canonicalBlock; + this.canonicalTransactions = canonicalTransactions; + + if (canonicalBlock && canonicalTransactions && this.strippedTransactions) { + this.staleTransactions = JSON.parse(JSON.stringify(this.strippedTransactions)); + this.setupStaleComparison(); + this.setAuditMode(false); + this.setupBlockGraphs(); + } + }); + } + + setupStaleComparison(): void { + this.staleStats = { + totalFees: 0, + totalWeight: 0, + txCount: 0, + feeDelta: 0, + weightDelta: 0, + txDelta: 0, + }; + this.canonicalStats = { + totalFees: 0, + totalWeight: 0, + txCount: 0, + feeDelta: 0, + weightDelta: 0, + txDelta: 0, + }; + const staleTransactions = this.staleTransactions || []; + const canonicalTransactions = this.canonicalTransactions || []; + + const inStale = {}; + const inCanonical = {}; + + for (const tx of staleTransactions) { + inStale[tx.txid] = tx; + this.staleStats.totalFees += tx.fee; + this.staleStats.totalWeight += tx.vsize * 4; + this.staleStats.txCount++; + } + for (const tx of canonicalTransactions) { + inCanonical[tx.txid] = tx; + this.canonicalStats.totalFees += tx.fee; + this.canonicalStats.totalWeight += tx.vsize * 4; + this.canonicalStats.txCount++; + } + + for (const tx of staleTransactions) { + tx.context = 'stale'; + if (inCanonical[tx.txid]) { + tx.status = 'matched'; + // opportunistically fix missing timestamps + if (inCanonical[tx.txid].time && (!tx.time || tx.time > inCanonical[tx.txid].time)) { + tx.time = inCanonical[tx.txid].time; + } + } else { + tx.status = 'unmatched'; + } + } + + for (const tx of canonicalTransactions) { + tx.context = 'canonical'; + if (inStale[tx.txid]) { + tx.status = 'matched'; + // opportunistically fix missing timestamps + if (inStale[tx.txid].time && (!tx.time || tx.time > inStale[tx.txid].time)) { + tx.time = inStale[tx.txid].time; + } + } else { + tx.status = 'unmatched'; + } + } + + this.staleStats.feeDelta = this.staleStats.totalFees > 0 ? (this.staleStats.totalFees - this.canonicalStats.totalFees) / this.staleStats.totalFees : 0; + this.staleStats.weightDelta = this.staleStats.totalWeight > 0 ? (this.staleStats.totalWeight - this.canonicalStats.totalWeight) / this.staleStats.totalWeight : 0; + this.staleStats.txDelta = this.staleStats.txCount > 0 ? (this.staleStats.txCount - this.canonicalStats.txCount) / this.staleStats.txCount : 0; + + this.canonicalStats.feeDelta = this.canonicalStats.totalFees > 0 ? (this.canonicalStats.totalFees - this.staleStats.totalFees) / this.canonicalStats.totalFees : 0; + this.canonicalStats.weightDelta = this.canonicalStats.totalWeight > 0 ? (this.canonicalStats.totalWeight - this.staleStats.totalWeight) / this.canonicalStats.totalWeight : 0; + this.canonicalStats.txDelta = this.canonicalStats.txCount > 0 ? (this.canonicalStats.txCount - this.staleStats.txCount) / this.canonicalStats.txCount : 0; + } + setupBlockAudit(): void { const transactions = this.strippedTransactions || []; const blockAudit = this.blockAudit; @@ -682,7 +867,20 @@ export class BlockComponent implements OnInit, OnDestroy { } setupBlockGraphs(): void { - if (this.blockAudit || this.strippedTransactions) { + if (this.block?.stale && !this.showAudit && this.staleTransactions && this.canonicalTransactions) { + this.blockGraphProjected.forEach(graph => { + graph.destroy(); + if (this.isMobile && this.mode === 'actual') { + graph.setup(this.canonicalTransactions || []); + } else { + graph.setup(this.staleTransactions || []); + } + }); + this.blockGraphActual.forEach(graph => { + graph.destroy(); + graph.setup(this.canonicalTransactions || []); + }); + } else if (this.blockAudit || this.strippedTransactions) { this.blockGraphProjected.forEach(graph => { graph.destroy(); if (this.isMobile && this.mode === 'actual') { @@ -710,7 +908,7 @@ export class BlockComponent implements OnInit, OnDestroy { } } - changeMode(mode: 'projected' | 'actual'): void { + changeMode(mode: 'projected' | 'actual' | 'stale'): void { this.router.navigate([], { relativeTo: this.route, queryParams: { showDetails: this.showDetails, view: mode }, @@ -753,13 +951,14 @@ export class BlockComponent implements OnInit, OnDestroy { newUrl += '?' + queryString; } this.location.replaceState(newUrl); + } - // avoid duplicate subscriptions - this.auditPrefSubscription?.unsubscribe(); - this.auditPrefSubscription = this.stateService.hideAudit.subscribe((hide) => { - this.auditModeEnabled = !hide; - this.showAudit = this.auditAvailable && this.auditModeEnabled; - }); + setAuditMode(mode: boolean): void { + this.auditModeEnabled = mode; + this.showAudit = this.auditAvailable && this.auditModeEnabled; + if (this.block?.stale) { + this.setupBlockGraphs(); + } } updateAuditAvailableFromBlockHeight(blockHeight: number): void { @@ -824,6 +1023,7 @@ export class BlockComponent implements OnInit, OnDestroy { if (this.block && block.height === this.block.height && block.id !== this.block.id) { this.block.stale = true; this.block.canonical = block.id; + this.fetchCanonicalBlock(); } } diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index d697a8f65..acbff96d3 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -244,8 +244,8 @@ export interface TransactionStripped { acc?: boolean; flags?: number | null; time?: number; - status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; - context?: 'projected' | 'actual'; + status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated' | 'matched' | 'unmatched'; + context?: 'projected' | 'actual' | 'stale' | 'canonical'; } export interface RbfTransaction extends TransactionStripped { From f094fd5be2146c69af82622d3c774d7ca8cb352e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 3 Oct 2025 09:34:22 +0000 Subject: [PATCH 420/534] proactively index stale blocks --- backend/src/api/blocks.ts | 29 ++++++++------- backend/src/api/chain-tips.ts | 35 +++++++++++++++++++ .../repositories/BlocksSummariesRepository.ts | 14 ++++++++ 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 2c1fffec8..977c32aea 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -529,16 +529,7 @@ class Blocks { indexedThisRun = 0; } - - if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(block.hash, block.stale)).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 - } - } else { - await this.$getStrippedBlockTransactions(block.hash, true, true); // This will index the block summary - } + await this.$indexBlockSummary(block.hash, block.height, block.stale); // Logging indexedThisRun++; @@ -556,6 +547,18 @@ class Blocks { } } + public async $indexBlockSummary(hash: string, height: number, stale?: boolean): Promise { + if (config.MEMPOOL.BACKEND === 'esplora') { + const txs = (await bitcoinApi.$getTxsForBlock(hash, stale)).map(tx => transactionUtils.extendMempoolTransaction(tx)); + const cpfpSummary = await this.$indexCPFP(hash, height, txs, stale); + if (cpfpSummary) { + await this.$getStrippedBlockTransactions(hash, true, true, cpfpSummary, height); // This will index the block summary + } + } else { + await this.$getStrippedBlockTransactions(hash, true, true); // This will index the block summary + } + } + /** * [INDEXING] Index transaction CPFP data for all blocks */ @@ -1550,7 +1553,7 @@ class Blocks { return this.currentBlockHeight; } - public async $indexCPFP(hash: string, height: number, txs?: MempoolTransactionExtended[]): Promise { + public async $indexCPFP(hash: string, height: number, txs?: MempoolTransactionExtended[], stale?: boolean): Promise { let transactions = txs; if (!transactions) { if (config.MEMPOOL.BACKEND === 'esplora') { @@ -1568,7 +1571,9 @@ class Blocks { if (transactions?.length != null) { const summary = calculateFastBlockCpfp(height, transactions); - await this.$saveCpfp(hash, height, summary); + if (!stale) { + await this.$saveCpfp(hash, height, summary); + } const effectiveFeeStats = Common.calcEffectiveFeeStatistics(summary.transactions); await blocksRepository.$saveEffectiveFeeStats(hash, effectiveFeeStats); diff --git a/backend/src/api/chain-tips.ts b/backend/src/api/chain-tips.ts index 046f57aee..0b16f6f9f 100644 --- a/backend/src/api/chain-tips.ts +++ b/backend/src/api/chain-tips.ts @@ -1,6 +1,10 @@ import logger from '../logger'; +import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository'; import { bitcoinCoreApi } from './bitcoin/bitcoin-api-factory'; import bitcoinClient from './bitcoin/bitcoin-client'; +import { IEsploraApi } from './bitcoin/esplora-api.interface'; +import blocks from './blocks'; +import { Common } from './common'; export interface ChainTip { height: number; @@ -21,6 +25,8 @@ class ChainTips { private orphanedBlocks: { [hash: string]: OrphanedBlock } = {}; private blockCache: { [hash: string]: OrphanedBlock } = {}; private orphansByHeight: { [height: number]: OrphanedBlock[] } = {}; + private indexingOrphanedBlocks = false; + private indexingQueue: IEsploraApi.Block[] = []; public async updateOrphanedBlocks(): Promise { try { @@ -48,6 +54,7 @@ class ChainTips { prevhash: block.previousblockhash, }; this.blockCache[hash] = orphan; + this.indexingQueue.push(block); } } if (orphan) { @@ -75,12 +82,40 @@ class ChainTips { this.orphansByHeight[orphan.height].push(orphan); } + // index new orphaned blocks in the background + void this.$indexOrphanedBlocks(); + logger.debug(`Updated orphaned blocks cache. Fetched ${newOrphans} new orphaned blocks. Total ${allOrphans.length}`); } catch (e) { logger.err(`Cannot get fetch orphaned blocks. Reason: ${e instanceof Error ? e.message : e}`); } } + private async $indexOrphanedBlocks(): Promise { + if (this.indexingOrphanedBlocks) { + return; + } + this.indexingOrphanedBlocks = true; + while (this.indexingQueue.length > 0) { + const block = this.indexingQueue.shift(); + if (!block) { + continue; + } + try { + const alreadyIndexed = await BlocksSummariesRepository.$isSummaryIndexed(block.id); + if (!alreadyIndexed) { + await blocks.$indexBlock(block.id, block, true); + await blocks.$indexBlockSummary(block.id, block.height, true); + } + } catch (e) { + logger.err(`Failed to index orphaned block ${block.id} at height ${block.height}. Reason: ${e instanceof Error ? e.message : e}`); + } + // don't DDOS core by indexing too fast + await Common.sleep$(5000); + } + this.indexingOrphanedBlocks = false; + } + public getOrphanedBlocksAtHeight(height: number | undefined): OrphanedBlock[] { if (height === undefined) { return []; diff --git a/backend/src/repositories/BlocksSummariesRepository.ts b/backend/src/repositories/BlocksSummariesRepository.ts index 0268424f2..d0e3db848 100644 --- a/backend/src/repositories/BlocksSummariesRepository.ts +++ b/backend/src/repositories/BlocksSummariesRepository.ts @@ -1,4 +1,5 @@ import { RowDataPacket } from 'mysql2'; +import { Common } from '../api/common'; import DB from '../database'; import logger from '../logger'; import { BlockSummary, TransactionClassified } from '../mempool.interfaces'; @@ -192,6 +193,19 @@ class BlocksSummariesRepository { return null; } } + + public async $isSummaryIndexed(id: string): Promise { + if (!Common.blocksSummariesIndexingEnabled()) { + return false; + } + try { + const [rows]: any[] = await DB.query(`SELECT id from blocks_summaries WHERE id = ?`, [id]); + return rows.length > 0; + } catch (e) { + logger.err(`Cannot check if block summary is indexed. Reason: ` + (e instanceof Error ? e.message : e)); + } + return false; + } } export default new BlocksSummariesRepository(); From 8ac507b58a72987db8f958adacbbfe04e2863d96 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 4 Oct 2025 01:53:07 +0000 Subject: [PATCH 421/534] link to stale blocks from /block page --- .../app/components/block/block.component.html | 18 ++++++++++++++++ .../app/components/block/block.component.scss | 21 +++++++++++++++++++ .../src/app/interfaces/node-api.interface.ts | 6 ++++++ 3 files changed, 45 insertions(+) diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 67e1ee8d1..efe825351 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -360,6 +360,24 @@ + @if (!block?.stale && block?.extras?.orphans?.length > 0) { +
    +
    + + @if (block.extras.orphans.length === 1) { + There is a stale block at this height + } @else { + There are {{ block.extras.orphans.length }} stale blocks at this height + } + +
      + @for (orphan of block.extras.orphans; track orphan.height) { +
    • + } +
    +
    + } +
    - + - +
    Total fees - + {{ canonicalStats.feeDelta > 0 ? '+' : '' }}{{ (canonicalStats.feeDelta * 100) | amountShortener: 2 }}% From 87c94020fce759cd3fa2ba55835c44d5601d23ec Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 13 Oct 2025 09:04:43 +0000 Subject: [PATCH 438/534] bound stale block total weight for sanity --- frontend/src/app/components/block/block.component.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 57cc44ab5..65b0c64d2 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -22,6 +22,7 @@ import { identifyPrioritizedTransactions } from '@app/shared/transaction.utils'; interface ComparisonStats { totalFees: number; totalWeight: number; + totalVsize: number; txCount: number; feeDelta: number; weightDelta: number; @@ -622,6 +623,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.staleStats = { totalFees: 0, totalWeight: 0, + totalVsize: 0, txCount: 0, feeDelta: 0, weightDelta: 0, @@ -630,6 +632,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.canonicalStats = { totalFees: 0, totalWeight: 0, + totalVsize: 0, txCount: 0, feeDelta: 0, weightDelta: 0, @@ -645,12 +648,14 @@ export class BlockComponent implements OnInit, OnDestroy { inStale[tx.txid] = tx; this.staleStats.totalFees += tx.fee; this.staleStats.totalWeight += tx.vsize * 4; + this.staleStats.totalVsize += tx.vsize; this.staleStats.txCount++; } for (const tx of canonicalTransactions) { inCanonical[tx.txid] = tx; this.canonicalStats.totalFees += tx.fee; this.canonicalStats.totalWeight += tx.vsize * 4; + this.canonicalStats.totalVsize += tx.vsize; this.canonicalStats.txCount++; } @@ -680,6 +685,10 @@ export class BlockComponent implements OnInit, OnDestroy { } } + // if vsize was rounded, the total weight we calculated isn't exact and can exceed the 4MB limit + this.staleStats.totalWeight = Math.min(this.staleStats.totalWeight, 4_000_000); + this.canonicalStats.totalWeight = Math.min(this.canonicalStats.totalWeight, 4_000_000); + this.staleStats.feeDelta = this.staleStats.totalFees > 0 ? (this.staleStats.totalFees - this.canonicalStats.totalFees) / this.staleStats.totalFees : 0; this.staleStats.weightDelta = this.staleStats.totalWeight > 0 ? (this.staleStats.totalWeight - this.canonicalStats.totalWeight) / this.staleStats.totalWeight : 0; this.staleStats.txDelta = this.staleStats.txCount > 0 ? (this.staleStats.txCount - this.canonicalStats.txCount) / this.staleStats.txCount : 0; From e5b6b56fb724a20c12ed6884633184aedae2291d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 13 Oct 2025 09:22:02 +0000 Subject: [PATCH 439/534] more legible stale block relative stats --- .../app/components/block/block.component.html | 48 ++++++++++++++----- .../app/components/block/block.component.ts | 12 ++--- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 660084d85..0c78081ed 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -525,15 +525,33 @@ Total fees + @if (staleStats.feeDelta && (canonicalStats.feeDelta >= 100 || canonicalStats.feeDelta <= -100)) { + + {{ staleStats.feeDelta > 0 ? '+' : '' }}{{ (staleStats.feeDelta * 100) | amountShortener: 2 }}% + + }
    Weight + + @if (staleStats.weightDelta && (canonicalStats.weightDelta >= 100 || canonicalStats.weightDelta <= -100)) { + + {{ staleStats.weightDelta > 0 ? '+' : '' }}{{ (staleStats.weightDelta * 100) | amountShortener: 2 }}% + + } +
    Transactions{{ staleStats.txCount || 0 }}{{ staleStats.txCount || 0 }} + @if (staleStats.txDelta && (canonicalStats.txDelta >= 100 || canonicalStats.txDelta <= -100)) { + + {{ staleStats.txDelta > 0 ? '+' : '' }}{{ (staleStats.txDelta * 100) | amountShortener: 2 }}% + + } +
    @@ -546,27 +564,33 @@
    Total fees - - {{ canonicalStats.feeDelta > 0 ? '+' : '' }}{{ (canonicalStats.feeDelta * 100) | amountShortener: 2 }}% - + @if (canonicalStats.feeDelta && canonicalStats.feeDelta < 100 && canonicalStats.feeDelta > -100) { + + {{ canonicalStats.feeDelta > 0 ? '+' : '' }}{{ (canonicalStats.feeDelta * 100) | amountShortener: 2 }}% + + }
    Weight + - - {{ canonicalStats.weightDelta > 0 ? '+' : '' }}{{ (canonicalStats.weightDelta * 100) | amountShortener: 2 }}% - + @if (canonicalStats.weightDelta && canonicalStats.weightDelta < 100 && canonicalStats.weightDelta > -100) { + + {{ canonicalStats.weightDelta > 0 ? '+' : '' }}{{ (canonicalStats.weightDelta * 100) | amountShortener: 2 }}% + + }
    Transactions {{ canonicalStats.txCount || 0 }} - - {{ canonicalStats.txDelta > 0 ? '+' : '' }}{{ (canonicalStats.txDelta * 100) | amountShortener: 2 }}% - + @if (canonicalStats.txDelta && canonicalStats.txDelta < 100 && canonicalStats.txDelta > -100) { + + {{ canonicalStats.txDelta > 0 ? '+' : '' }}{{ (canonicalStats.txDelta * 100) | amountShortener: 2 }}% + + }
    Fee {{ (tx.fee | number) ?? '-' }} sats - @if (isAcceleration && accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { + @if (isAcceleration && (accelerationInfo?.bidBoost ?? tx.feeDelta > 0)) { +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats } diff --git a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts index 1cb6bdb30..a040a85b8 100644 --- a/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts +++ b/frontend/src/app/components/treasuries/treasuries-graph/treasuries-graph.component.ts @@ -5,7 +5,7 @@ import { tap } from 'rxjs/operators'; import { AddressTxSummary } from '@interfaces/electrs.interface'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { StateService } from '@app/services/state.service'; -import { SeriesOption } from 'echarts'; +import { SeriesOption } from 'echarts/types/dist/echarts'; import { WalletStats } from '@app/shared/wallet-stats'; import { originalChartColors as chartColors } from '@app/app.constants'; import { Treasury } from '@interfaces/node-api.interface'; diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.html b/frontend/src/app/docs/api-docs/api-docs-nav.component.html index 3dab114cf..3df1940dc 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.html +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.html @@ -1,6 +1,6 @@

    Get higher API limits with Mempool Enterprise®

    - More Info + More Info

    {{ item.title }}

    diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.scss b/frontend/src/app/docs/api-docs/api-docs-nav.component.scss index 4609ed2fd..2bd1b9651 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.scss +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.scss @@ -31,3 +31,6 @@ a { display: inline-block; } +fa-icon { + font-size: 12px; +} \ No newline at end of file diff --git a/frontend/src/app/docs/api-docs/api-docs.component.html b/frontend/src/app/docs/api-docs/api-docs.component.html index 396c8b3ac..778db044a 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.html +++ b/frontend/src/app/docs/api-docs/api-docs.component.html @@ -43,7 +43,7 @@

    Get higher API limits with Mempool Enterprise®

    @@ -120,7 +120,7 @@

    Get higher API limits with Mempool Enterprise®

    diff --git a/frontend/src/app/docs/api-docs/api-docs.component.scss b/frontend/src/app/docs/api-docs/api-docs.component.scss index 0d5ff93f1..56e94f9c8 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.scss +++ b/frontend/src/app/docs/api-docs/api-docs.component.scss @@ -487,4 +487,8 @@ pre { white-space: break-spaces; word-break: break-all; } +} + +fa-icon { + font-size: 12px; } \ No newline at end of file From 9f6cdc1a0dda4148c839bbde83c57360838f873b Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 3 Nov 2025 21:10:13 +0800 Subject: [PATCH 479/534] eslint fixes --- frontend/cypress/support/PageIdleDetector.ts | 10 +- frontend/eslint.config.js | 92 +++++++++++++++++++ frontend/generate-config.js | 8 +- frontend/proxy.conf.parameterized.js | 4 +- .../accelerator-dashboard.component.ts | 1 - .../custom-dashboard.component.ts | 1 - .../mempool-block/mempool-block.component.ts | 2 - .../src/app/dashboard/dashboard.component.ts | 2 +- .../directives/browser-only.directive.ts | 2 +- .../directives/server-only.directive.ts | 2 +- .../src/app/shared/pipes/bytes-pipe/utils.ts | 2 +- frontend/sync-assets.js | 1 - frontend/update-config.js | 12 +-- 13 files changed, 108 insertions(+), 31 deletions(-) create mode 100644 frontend/eslint.config.js diff --git a/frontend/cypress/support/PageIdleDetector.ts b/frontend/cypress/support/PageIdleDetector.ts index 3bfa2da3d..ba0cd222f 100644 --- a/frontend/cypress/support/PageIdleDetector.ts +++ b/frontend/cypress/support/PageIdleDetector.ts @@ -1,7 +1,7 @@ // source: chrisp_68 @ https://stackoverflow.com/questions/50525143/how-do-you-reliably-wait-for-page-idle-in-cypress-io-test export class PageIdleDetector { - defaultOptions: Object = { timeout: 60000 }; + defaultOptions: object = { timeout: 60000 }; public WaitForPageToBeIdle(): void { @@ -11,7 +11,7 @@ export class PageIdleDetector this.WaitForAnimationsToStop(); } - public WaitForPageToLoad(options: Object = this.defaultOptions): void + public WaitForPageToLoad(options: object = this.defaultOptions): void { cy.document(options).should((myDocument: any) => { @@ -19,7 +19,7 @@ export class PageIdleDetector }); } - public WaitForAngularRequestsToComplete(options: Object = this.defaultOptions): void + public WaitForAngularRequestsToComplete(options: object = this.defaultOptions): void { cy.window(options).should((myWindow: any) => { @@ -30,7 +30,7 @@ export class PageIdleDetector }); } - public WaitForAngularDigestCycleToComplete(options: Object = this.defaultOptions): void + public WaitForAngularDigestCycleToComplete(options: object = this.defaultOptions): void { cy.window(options).should((myWindow: any) => { @@ -41,7 +41,7 @@ export class PageIdleDetector }); } - public WaitForAnimationsToStop(options: Object = this.defaultOptions): void + public WaitForAnimationsToStop(options: object = this.defaultOptions): void { cy.get(":animated", options).should("not.exist"); } diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 000000000..56cd1f02f --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,92 @@ +import js from '@eslint/js'; +import tsParser from '@typescript-eslint/parser'; +import tsPlugin from '@typescript-eslint/eslint-plugin'; + +// Flat config migrated from legacy .eslintrc +export default [ + { + ignores: [ + 'node_modules/**', + 'dist/**', + 'src/resources/**', + // Keep parity with legacy .eslintignore + 'frontend/**', + 'server.run.js', + ], + }, + js.configs.recommended, + // Node globals for local JS utility scripts in this package + { + // Apply to all JS files in this package (including nested ones) + files: ['**/*.js', '**/*.cjs', '**/*.mjs'], + languageOptions: { + globals: { + require: 'readonly', + module: 'readonly', + process: 'readonly', + __dirname: 'readonly', + __filename: 'readonly', + Buffer: 'readonly', + console: 'readonly', + InitWally: 'readonly', + document: 'readonly', + window: 'readonly', + }, + }, + }, + { + files: ['**/*.ts'], + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + // Make common browser globals available in TS as well + globals: { + document: 'readonly', + window: 'readonly', + }, + }, + plugins: { + '@typescript-eslint': tsPlugin, + }, + rules: { + // Adjust base recommended rules for TypeScript (matches legacy extends: plugin:@typescript-eslint/eslint-recommended) + ...tsPlugin.configs['eslint-recommended']?.overrides?.[0]?.rules, + // Start from @typescript-eslint's recommended rules + ...tsPlugin.configs.recommended.rules, + + // Project-specific rules migrated from .eslintrc + '@typescript-eslint/ban-ts-comment': 'warn', + '@typescript-eslint/no-empty-function': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-inferrable-types': 'off', + '@typescript-eslint/no-namespace': 'warn', + '@typescript-eslint/no-this-alias': 'warn', + '@typescript-eslint/no-var-requires': 'warn', + '@typescript-eslint/explicit-function-return-type': 'warn', + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/no-unused-expressions': 'warn', + '@typescript-eslint/no-require-imports': 'warn', + '@typescript-eslint/no-unsafe-function-type': 'warn', + 'no-case-declarations': 'warn', + 'no-console': 'warn', + 'no-constant-condition': 'warn', + 'no-dupe-else-if': 'warn', + 'no-empty': 'warn', + 'no-extra-boolean-cast': 'warn', + 'no-prototype-builtins': 'warn', + 'no-self-assign': 'warn', + 'no-useless-catch': 'warn', + 'no-var': 'warn', + 'prefer-const': 'warn', + 'prefer-rest-params': 'warn', + 'quotes': ['warn', 'single', { allowTemplateLiterals: true }], + 'semi': 'warn', + 'curly': ['warn', 'all'], + 'eqeqeq': 'warn', + 'no-trailing-spaces': 'warn', + }, + }, +]; diff --git a/frontend/generate-config.js b/frontend/generate-config.js index 89d7143fd..3ae3870e5 100644 --- a/frontend/generate-config.js +++ b/frontend/generate-config.js @@ -29,7 +29,7 @@ if (configContent && configContent.CUSTOMIZATION) { try { customConfig = readConfig(configContent.CUSTOMIZATION); customConfigContent = JSON.parse(customConfig); - } catch (e) { + } catch { console.log(`failed to load customization config from ${configContent.CUSTOMIZATION}`); } } @@ -54,7 +54,7 @@ try { throw new Error(e); } -for (setting in configContent) { +for (const setting in configContent) { settings.push({ key: setting, value: configContent[setting] @@ -98,7 +98,7 @@ function readConfig(path) { try { const currentConfig = fs.readFileSync(path).toString().trim(); return currentConfig; - } catch (e) { + } catch { return false; } } @@ -136,13 +136,11 @@ writeConfig(GENERATED_CUSTOMIZATION_FILE_NAME, customConfigJs); if (currentConfig && currentConfig === newConfig) { console.log(`No configuration updates, skipping ${GENERATED_CONFIG_FILE_NAME} file update`); - return; } else if (!currentConfig) { console.log(`${GENERATED_CONFIG_FILE_NAME} file not found, creating new config file`); console.log('CONFIG: ', newConfig); writeConfig(GENERATED_CONFIG_FILE_NAME, newConfig); console.log(`${GENERATED_CONFIG_FILE_NAME} file saved`); - return; } else { console.log(`Configuration changes detected, updating ${GENERATED_CONFIG_FILE_NAME} file`); console.log('OLD CONFIG: ', currentConfig); diff --git a/frontend/proxy.conf.parameterized.js b/frontend/proxy.conf.parameterized.js index eee9bf1f7..95ec26ddc 100644 --- a/frontend/proxy.conf.parameterized.js +++ b/frontend/proxy.conf.parameterized.js @@ -1,8 +1,6 @@ -const fs = require('fs'); - const PROXY_CONFIG = require('./proxy.conf'); -const addApiKeyHeader = (proxyReq, req, res) => { +const addApiKeyHeader = (proxyReq) => { if (process.env.MEMPOOL_CI_API_KEY) { proxyReq.setHeader('X-Mempool-Auth', process.env.MEMPOOL_CI_API_KEY); } 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 c1a53ea3c..5fb7209fc 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 @@ -52,7 +52,6 @@ export class AcceleratorDashboardComponent implements OnInit, OnDestroy { private serviceApiServices: ServicesApiServices, private audioService: AudioService, private stateService: StateService, - @Inject(PLATFORM_ID) private platformId: Object, ) { this.webGlEnabled = this.stateService.isBrowser && detectWebGL(); this.seoService.setTitle($localize`:@@6b867dc61c6a92f3229f1950f9f2d414790cce95:Accelerator Dashboard`); 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 bce4338a5..ba955c21c 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -90,7 +90,6 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni private websocketService: WebsocketService, private seoService: SeoService, private cd: ChangeDetectorRef, - @Inject(PLATFORM_ID) private platformId: Object, ) { this.webGlEnabled = this.stateService.isBrowser && detectWebGL(); this.widgets = this.stateService.env.customize?.dashboard.widgets || []; diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.ts b/frontend/src/app/components/mempool-block/mempool-block.component.ts index 6b6bfc758..259f6232e 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.ts +++ b/frontend/src/app/components/mempool-block/mempool-block.component.ts @@ -31,8 +31,6 @@ export class MempoolBlockComponent implements OnInit, OnDestroy { public stateService: StateService, private seoService: SeoService, private websocketService: WebsocketService, - private cd: ChangeDetectorRef, - @Inject(PLATFORM_ID) private platformId: Object, ) { this.webGlEnabled = this.stateService.isBrowser && detectWebGL(); } diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index d1fc4cf78..2e57e6f81 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -93,7 +93,7 @@ export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { private apiService: ApiService, private websocketService: WebsocketService, private seoService: SeoService, - @Inject(PLATFORM_ID) private platformId: Object, + @Inject(PLATFORM_ID) private platformId: object, ) { this.webGlEnabled = this.stateService.isBrowser && detectWebGL(); } diff --git a/frontend/src/app/shared/directives/browser-only.directive.ts b/frontend/src/app/shared/directives/browser-only.directive.ts index a8bbeafd7..db9886ef4 100644 --- a/frontend/src/app/shared/directives/browser-only.directive.ts +++ b/frontend/src/app/shared/directives/browser-only.directive.ts @@ -9,7 +9,7 @@ export class BrowserOnlyDirective { constructor( private templateRef: TemplateRef, private viewContainer: ViewContainerRef, - @Inject(PLATFORM_ID) private platformId: Object + @Inject(PLATFORM_ID) private platformId: object ) { if (isPlatformBrowser(this.platformId)) { this.viewContainer.createEmbeddedView(this.templateRef); diff --git a/frontend/src/app/shared/directives/server-only.directive.ts b/frontend/src/app/shared/directives/server-only.directive.ts index 1a4ac9878..7adba2a3a 100644 --- a/frontend/src/app/shared/directives/server-only.directive.ts +++ b/frontend/src/app/shared/directives/server-only.directive.ts @@ -9,7 +9,7 @@ export class ServerOnlyDirective { constructor( private templateRef: TemplateRef, private viewContainer: ViewContainerRef, - @Inject(PLATFORM_ID) private platformId: Object + @Inject(PLATFORM_ID) private platformId: object ) { if (isPlatformServer(this.platformId)) { this.viewContainer.createEmbeddedView(this.templateRef); diff --git a/frontend/src/app/shared/pipes/bytes-pipe/utils.ts b/frontend/src/app/shared/pipes/bytes-pipe/utils.ts index 138218a43..26d2ed999 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/utils.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/utils.ts @@ -62,7 +62,7 @@ export function upperFirst(value: string): string { return value.slice(0, 1).toUpperCase() + value.slice(1); } -export function createRound(method: string): Function { +export function createRound(method: string) { // Math to suppress error const func: any = (Math)[method]; return function (value: number, precision: number = 0) { diff --git a/frontend/sync-assets.js b/frontend/sync-assets.js index e988bcb77..447557a51 100644 --- a/frontend/sync-assets.js +++ b/frontend/sync-assets.js @@ -1,5 +1,4 @@ const https = require('https'); -const fs = require('fs').promises; const fsSync = require('fs'); const crypto = require('crypto'); const path = require('node:path'); diff --git a/frontend/update-config.js b/frontend/update-config.js index 92facefa1..f602c4a45 100644 --- a/frontend/update-config.js +++ b/frontend/update-config.js @@ -32,6 +32,7 @@ function parseGeneratedFile() { if (generatedConfig) { const configContents = generatedConfig.toString(); const regexp = new RegExp(/window.__env.(\w+) = '(.*)'/,'g'); + let match; while ((match = regexp.exec(configContents)) !== null) { // Do not add setting if it's the git hash or package json version if (!packageSettings.includes(match[1])) { @@ -46,8 +47,10 @@ function parseGeneratedFile() { function saveSettingsJson() { settings.forEach(setting => { + // eslint-disable-next-line no-prototype-builtins if (configContent.hasOwnProperty(setting['key']) && normalizedValue(configContent[setting['key']]) !== normalizedValue(setting['value'])) { console.log(setting['key'] + " updated from " + configContent[setting['key']] + " to " + setting['value']); + // eslint-disable-next-line no-prototype-builtins } else if (configContent.hasOwnProperty(setting['key']) && normalizedValue(configContent[setting['key']]) === normalizedValue(setting['value'])) { console.log(setting['key'] + " unchanged, skipping"); } else { @@ -58,15 +61,6 @@ function saveSettingsJson() { fs.writeFileSync(CONFIG_FILE_NAME, JSON.stringify(configContent)); } -function configToJson() { - for (setting in configContent) { - settings.push({ - key: setting, - value: configContent[setting] - }); - } -} - try { const rawConfig = fs.readFileSync(CONFIG_FILE_NAME); configContent = JSON.parse(rawConfig); From 6f847a1563d9c5eff8b1aa6a7eaa6091ca3c509b Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 4 Nov 2025 16:11:22 +0800 Subject: [PATCH 480/534] fix injection error --- frontend/src/app/app.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index bcb0fb431..0d2280aaa 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -67,7 +67,8 @@ const providers = [ ], providers: [ provideHttpClient(withInterceptorsFromDi()), - DatePipe + DatePipe, + ...providers ] }) export class AppModule { } From 47eafc7c0571afaff128af739fc2364a6f1618e6 Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 4 Nov 2025 19:09:47 +0800 Subject: [PATCH 481/534] downgrading echarts to match echarts-gl --- frontend/package-lock.json | 30 +++++++++++++++--------------- frontend/package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f3e656fcf..11559ca90 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -33,7 +33,7 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~6.0.0", + "echarts": "~5.4.0", "esbuild": "^0.25.8", "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", @@ -11346,13 +11346,13 @@ } }, "node_modules/echarts": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz", - "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", "license": "Apache-2.0", "dependencies": { "tslib": "2.3.0", - "zrender": "6.0.0" + "zrender": "5.4.4" } }, "node_modules/echarts/node_modules/tslib": { @@ -21030,9 +21030,9 @@ "license": "MIT" }, "node_modules/zrender": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz", - "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", "license": "BSD-3-Clause", "dependencies": { "tslib": "2.3.0" @@ -28082,12 +28082,12 @@ } }, "echarts": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz", - "integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", "requires": { "tslib": "2.3.0", - "zrender": "6.0.0" + "zrender": "5.4.4" }, "dependencies": { "tslib": { @@ -34874,9 +34874,9 @@ "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==" }, "zrender": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz", - "integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", "requires": { "tslib": "2.3.0" }, diff --git a/frontend/package.json b/frontend/package.json index 1d3a2d58e..29a78cb08 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -84,7 +84,7 @@ "browserify": "^17.0.0", "clipboard": "^2.0.11", "domino": "^2.1.6", - "echarts": "~6.0.0", + "echarts": "~5.4.0", "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", From c1001a8d0c953126157b12941d8beb69d7d79108 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 15 Nov 2025 10:48:25 +0000 Subject: [PATCH 482/534] resolve package merge conflicts --- frontend/package-lock.json | 1012 ++++++++++++++++++------------------ 1 file changed, 498 insertions(+), 514 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 11559ca90..3eb4a1054 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -60,12 +60,11 @@ }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "@types/cypress": "^1.1.3", - "cypress": "^13.17.0", - "cypress-fail-on-console-error": "~5.1.0", - "cypress-wait-until": "^2.0.1", + "cypress": "^15.6.0", + "cypress-fail-on-console-error": "~5.1.1", + "cypress-wait-until": "^3.0.1", "mock-socket": "~9.3.1", - "start-server-and-test": "~2.1.0" + "start-server-and-test": "~2.1.2" } }, "node_modules/@algolia/abtesting": { @@ -359,23 +358,6 @@ } } }, - "node_modules/@angular-devkit/architect/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@angular-devkit/architect/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -400,7 +382,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -610,23 +591,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -709,7 +673,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -836,23 +799,6 @@ } } }, - "node_modules/@angular-devkit/schematics/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -877,7 +823,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -900,6 +845,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1218,6 +1164,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -1318,6 +1265,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -1569,23 +1517,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@angular/cli/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@angular/cli/node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -1666,6 +1597,7 @@ "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", "license": "MIT", + "peer": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -1761,7 +1693,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -1924,6 +1855,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1940,6 +1872,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1952,6 +1885,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -2140,6 +2074,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2165,6 +2100,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2193,6 +2129,7 @@ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -2345,6 +2282,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2385,6 +2323,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -2405,6 +2344,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2423,6 +2363,7 @@ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2466,6 +2407,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -4141,9 +4083,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", - "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -4153,14 +4095,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "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.13.1", + "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -4171,13 +4113,13 @@ } }, "node_modules/@cypress/request/node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "optional": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -4888,19 +4830,58 @@ "ms": "^2.1.1" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "optional": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@hapi/hoek": "^11.0.2" } }, "node_modules/@humanfs/core": { @@ -5207,6 +5188,7 @@ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", "license": "MIT", + "peer": true, "dependencies": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -7229,23 +7211,6 @@ } } }, - "node_modules/@schematics/angular/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@schematics/angular/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -7270,7 +7235,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -7288,27 +7252,6 @@ "node": ">= 12" } }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "optional": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "optional": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "optional": true - }, "node_modules/@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", @@ -7433,6 +7376,13 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "license": "MIT", + "optional": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -7595,16 +7545,6 @@ "@types/node": "*" } }, - "node_modules/@types/cypress": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", - "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", - "deprecated": "This is a stub types definition for cypress (https://cypress.io). cypress provides its own type definitions, so you don't need @types/cypress installed!", - "optional": true, - "dependencies": { - "cypress": "*" - } - }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -7686,6 +7626,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -7783,6 +7724,13 @@ "@types/node": "*" } }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "license": "MIT", + "optional": true + }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", @@ -7837,6 +7785,7 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -8250,6 +8199,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8595,12 +8545,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "optional": true - }, "node_modules/async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -8614,6 +8558,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT", "optional": true }, "node_modules/at-least-node": { @@ -9082,6 +9027,7 @@ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, + "peer": true, "dependencies": { "browser-sync-client": "^3.0.3", "browser-sync-ui": "^3.0.3", @@ -9556,6 +9502,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -9884,9 +9831,10 @@ "optional": true }, "node_modules/chai": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", - "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "license": "MIT", "optional": true, "dependencies": { "assertion-error": "^1.1.0", @@ -9895,12 +9843,22 @@ "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" }, "engines": { "node": ">=4" } }, + "node_modules/chai/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -10067,9 +10025,10 @@ } }, "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", + "license": "MIT", "optional": true, "dependencies": { "string-width": "^4.2.0" @@ -10078,7 +10037,7 @@ "node": "10.* || >= 12.*" }, "optionalDependencies": { - "@colors/colors": "1.5.0" + "colors": "1.4.0" } }, "node_modules/cli-truncate": { @@ -10163,6 +10122,16 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -10196,6 +10165,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "optional": true, "dependencies": { "delayed-stream": "~1.0.0" @@ -10731,31 +10701,30 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true, - "peer": true + "optional": true }, "node_modules/cypress": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", - "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", + "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", "hasInstallScript": true, "license": "MIT", "optional": true, "dependencies": { - "@cypress/request": "^3.0.6", + "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", + "ci-info": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", + "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -10767,9 +10736,8 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "getos": "^3.2.1", + "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -10779,9 +10747,10 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.5.3", + "semver": "^7.7.1", "supports-color": "^8.1.1", - "tmp": "~0.2.3", + "systeminformation": "5.27.7", + "tmp": "~0.2.4", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" @@ -10790,13 +10759,14 @@ "cypress": "bin/cypress" }, "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + "node": "^20.1.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/cypress-fail-on-console-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", - "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", + "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", + "license": "MIT", "optional": true, "dependencies": { "chai": "^4.3.10", @@ -10806,9 +10776,10 @@ } }, "node_modules/cypress-wait-until": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", - "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", + "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", + "license": "MIT", "optional": true }, "node_modules/cypress/node_modules/commander": { @@ -10930,7 +10901,6 @@ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "optional": true, - "peer": true, "engines": { "node": ">=4.0" } @@ -11054,6 +11024,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=0.4.0" @@ -11152,8 +11123,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true, - "peer": true + "optional": true }, "node_modules/diff": { "version": "4.0.2", @@ -11201,7 +11171,6 @@ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "optional": true, - "peer": true, "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -11504,24 +11473,11 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "optional": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true, - "peer": true + "optional": true }, "node_modules/entities": { "version": "4.5.0", @@ -11618,6 +11574,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "optional": true, "dependencies": { "es-errors": "^1.3.0", @@ -11831,6 +11788,7 @@ "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -13022,6 +12980,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", "optional": true, "dependencies": { "asynckit": "^0.4.0", @@ -13092,7 +13051,6 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "optional": true, - "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -13229,15 +13187,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "optional": true, - "dependencies": { - "async": "^3.2.0" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -13503,6 +13452,33 @@ "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -14260,7 +14236,6 @@ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "optional": true, - "peer": true, "engines": { "node": ">= 8.0.0" }, @@ -14362,21 +14337,28 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "peer": true, "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", + "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" + }, + "engines": { + "node": ">= 20" } }, "node_modules/jquery": { @@ -14540,7 +14522,6 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -14587,7 +14568,6 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "optional": true, - "peer": true, "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -14603,7 +14583,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -14613,7 +14592,6 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "optional": true, - "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -14632,7 +14610,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -14641,8 +14618,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true, - "peer": true + "optional": true }, "node_modules/karma/node_modules/tmp": { "version": "0.2.5", @@ -14650,7 +14626,6 @@ "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "optional": true, - "peer": true, "engines": { "node": ">=14.14" } @@ -14707,6 +14682,7 @@ "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", "license": "Apache-2.0", + "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -15004,7 +14980,6 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "optional": true, - "peer": true, "dependencies": { "date-format": "^4.0.3", "debug": "^4.3.3", @@ -15223,7 +15198,6 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "optional": true, - "peer": true, "bin": { "mime": "cli.js" }, @@ -15523,7 +15497,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "optional": true, - "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -17144,6 +17117,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -17429,7 +17403,6 @@ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "optional": true, - "peer": true, "engines": { "node": ">=0.9" } @@ -17804,7 +17777,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, - "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -17949,6 +17921,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -17968,6 +17941,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -18088,6 +18062,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -18911,19 +18886,20 @@ } }, "node_modules/start-server-and-test": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", - "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", + "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", + "license": "MIT", "optional": true, "dependencies": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.1", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.4" + "wait-on": "8.0.5" }, "bin": { "server-test": "src/bin/start.js", @@ -18941,9 +18917,10 @@ "optional": true }, "node_modules/start-server-and-test/node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.3" @@ -18961,6 +18938,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true }, "node_modules/statuses": { @@ -19036,7 +19014,6 @@ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "optional": true, - "peer": true, "dependencies": { "date-format": "^4.0.3", "debug": "^4.1.1", @@ -19168,6 +19145,33 @@ "acorn-node": "^1.2.0" } }, + "node_modules/systeminformation": { + "version": "5.27.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", + "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -19268,6 +19272,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -19422,6 +19427,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -19489,22 +19495,22 @@ } }, "node_modules/tldts": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", - "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "license": "MIT", "optional": true, "dependencies": { - "tldts-core": "^6.1.70" + "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", - "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "license": "MIT", "optional": true }, @@ -19565,9 +19571,9 @@ } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "license": "BSD-3-Clause", "optional": true, "dependencies": { @@ -19742,7 +19748,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tuf-js": { "version": "3.1.0", @@ -19880,6 +19887,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19903,7 +19911,6 @@ } ], "optional": true, - "peer": true, "engines": { "node": "*" } @@ -20198,19 +20205,19 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "optional": true, - "peer": true, "engines": { "node": ">=0.10.0" } }, "node_modules/wait-on": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", - "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", + "license": "MIT", "optional": true, "dependencies": { - "axios": "^1.11.0", - "joi": "^17.13.3", + "axios": "^1.12.1", + "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" @@ -20223,9 +20230,10 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", "optional": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -20237,6 +20245,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT", "optional": true }, "node_modules/watchpack": { @@ -20273,6 +20282,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -20362,6 +20372,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "license": "MIT", + "peer": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -20672,6 +20683,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -20887,7 +20899,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "optional": true, - "peer": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -20918,7 +20929,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "optional": true, - "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -20930,7 +20940,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "optional": true, - "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20948,7 +20957,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", "optional": true, - "peer": true, "engines": { "node": ">=10" } @@ -20958,7 +20966,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "optional": true, - "peer": true, "engines": { "node": ">=10" } @@ -21010,6 +21017,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -21027,7 +21035,8 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/zrender": { "version": "5.4.4", @@ -21246,16 +21255,6 @@ "ajv": "^8.0.0" } }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "optional": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -21267,11 +21266,9 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true, - "peer": true + "optional": true }, "source-map": { "version": "0.7.6", @@ -21374,16 +21371,6 @@ "ajv": "^8.0.0" } }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "optional": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -21431,11 +21418,9 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true, - "peer": true + "optional": true }, "semver": { "version": "7.7.2", @@ -21502,16 +21487,6 @@ "ajv": "^8.0.0" } }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "optional": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -21523,11 +21498,9 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true, - "peer": true + "optional": true }, "source-map": { "version": "0.7.6", @@ -21540,6 +21513,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -21695,7 +21669,8 @@ "picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "peer": true }, "restore-cursor": { "version": "5.1.0", @@ -21747,6 +21722,7 @@ "version": "7.1.11", "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "peer": true, "requires": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -21863,16 +21839,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "optional": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -21924,6 +21890,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "peer": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -21978,11 +21945,9 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true, - "peer": true + "optional": true }, "restore-cursor": { "version": "5.1.0", @@ -22074,6 +22039,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22082,6 +22048,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22090,6 +22057,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", + "peer": true, "requires": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -22196,6 +22164,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22204,6 +22173,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22218,6 +22188,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", + "peer": true, "requires": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -22307,6 +22278,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22323,6 +22295,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", + "peer": true, "requires": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -22332,6 +22305,7 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22340,6 +22314,7 @@ "version": "20.3.8", "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", + "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22363,6 +22338,7 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -23438,9 +23414,9 @@ } }, "@cypress/request": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", - "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.9.tgz", + "integrity": "sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==", "optional": true, "requires": { "aws-sign2": "~0.7.0", @@ -23449,14 +23425,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~4.0.0", + "form-data": "~4.0.4", "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.13.1", + "qs": "6.14.0", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", @@ -23464,12 +23440,12 @@ }, "dependencies": { "qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "optional": true, "requires": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" } } } @@ -23839,19 +23815,46 @@ } } }, + "@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "optional": true, + "requires": { + "@hapi/hoek": "^11.0.2" + } + }, + "@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "optional": true + }, "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "optional": true + }, + "@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "optional": true + }, + "@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", "optional": true }, "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", "optional": true, "requires": { - "@hapi/hoek": "^9.0.0" + "@hapi/hoek": "^11.0.2" } }, "@humanfs/core": { @@ -24006,6 +24009,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", + "peer": true, "requires": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -25043,16 +25047,6 @@ "ajv": "^8.0.0" } }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "optional": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -25064,11 +25058,9 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true, - "peer": true + "optional": true }, "source-map": { "version": "0.7.6", @@ -25077,27 +25069,6 @@ } } }, - "@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "optional": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "optional": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "optional": true - }, "@sigstore/bundle": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", @@ -25200,6 +25171,12 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", "devOptional": true }, + "@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "optional": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -25342,15 +25319,6 @@ "@types/node": "*" } }, - "@types/cypress": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/cypress/-/cypress-1.1.3.tgz", - "integrity": "sha512-OXe0Gw8LeCflkG1oPgFpyrYWJmEKqYncBsD/J0r17r0ETx/TnIGDNLwXt/pFYSYuYTpzcq1q3g62M9DrfsBL4g==", - "optional": true, - "requires": { - "cypress": "*" - } - }, "@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -25423,6 +25391,7 @@ "version": "24.9.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", + "peer": true, "requires": { "undici-types": "~7.16.0" } @@ -25515,6 +25484,12 @@ "@types/node": "*" } }, + "@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "optional": true + }, "@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", @@ -25554,6 +25529,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, + "peer": true, "requires": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -25840,7 +25816,8 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -26088,12 +26065,6 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "optional": true }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "optional": true - }, "async-each-series": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", @@ -26431,6 +26402,7 @@ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, + "peer": true, "requires": { "browser-sync-client": "^3.0.3", "browser-sync-ui": "^3.0.3", @@ -26815,6 +26787,7 @@ "version": "4.27.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "peer": true, "requires": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -27030,9 +27003,9 @@ "optional": true }, "chai": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.0.tgz", - "integrity": "sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "optional": true, "requires": { "assertion-error": "^1.1.0", @@ -27041,7 +27014,15 @@ "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" + }, + "dependencies": { + "type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "optional": true + } } }, "chalk": { @@ -27142,12 +27123,12 @@ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" }, "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "optional": true, "requires": { - "@colors/colors": "1.5.0", + "colors": "1.4.0", "string-width": "^4.2.0" } }, @@ -27214,6 +27195,12 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "optional": true + }, "combine-source-map": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", @@ -27622,29 +27609,28 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true, - "peer": true + "optional": true }, "cypress": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", - "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", + "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", "optional": true, "requires": { - "@cypress/request": "^3.0.6", + "@cypress/request": "^3.0.9", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", + "@types/tmp": "^0.2.3", "arch": "^2.2.0", "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", "cachedir": "^2.3.0", "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "ci-info": "^4.0.0", + "ci-info": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", + "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", @@ -27656,9 +27642,8 @@ "extract-zip": "2.0.1", "figures": "^3.2.0", "fs-extra": "^9.1.0", - "getos": "^3.2.1", + "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", "listr2": "^3.8.3", "lodash": "^4.17.21", "log-symbols": "^4.0.0", @@ -27668,9 +27653,10 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.5.3", + "semver": "^7.7.1", "supports-color": "^8.1.1", - "tmp": "~0.2.3", + "systeminformation": "5.27.7", + "tmp": "~0.2.4", "tree-kill": "1.2.2", "untildify": "^4.0.0", "yauzl": "^2.10.0" @@ -27738,9 +27724,9 @@ } }, "cypress-fail-on-console-error": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.0.tgz", - "integrity": "sha512-u/AXLE9obLd9KcGHkGJluJVZeOj1EEOFOs0URxxca4FrftUDJQ3u+IoNfjRUjsrBKmJxgM4vKd0G10D+ZT1uIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/cypress-fail-on-console-error/-/cypress-fail-on-console-error-5.1.1.tgz", + "integrity": "sha512-JGpHxvwuSxDDT32cUflo0x7yJBFdhYsv5MVBPmNv/kulavQcl0cSguDtSpwWXhBXr1oBSzYUsQkxGnAN4EDqWA==", "optional": true, "requires": { "chai": "^4.3.10", @@ -27750,9 +27736,9 @@ } }, "cypress-wait-until": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-2.0.1.tgz", - "integrity": "sha512-+IyVnYNiaX1+C+V/LazrJWAi/CqiwfNoRSrFviECQEyolW1gDRy765PZosL2alSSGK8V10Y7BGfOQyZUDgmnjQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz", + "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", "optional": true }, "d": { @@ -27782,8 +27768,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", - "optional": true, - "peer": true + "optional": true }, "dayjs": { "version": "1.11.9", @@ -27930,8 +27915,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true, - "peer": true + "optional": true }, "diff": { "version": "4.0.2", @@ -27974,7 +27958,6 @@ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "optional": true, - "peer": true, "requires": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -28222,21 +28205,11 @@ "tapable": "^2.2.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "optional": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true, - "peer": true + "optional": true }, "entities": { "version": "4.5.0", @@ -28474,6 +28447,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, + "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -29353,7 +29327,6 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "optional": true, - "peer": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -29442,15 +29415,6 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "optional": true }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "optional": true, - "requires": { - "async": "^3.2.0" - } - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -29629,6 +29593,24 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "optional": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "optional": true + } + } + }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -30122,8 +30104,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "optional": true, - "peer": true + "optional": true }, "isexe": { "version": "2.0.0", @@ -30190,19 +30171,22 @@ "jiti": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "peer": true }, "joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "18.0.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.1.tgz", + "integrity": "sha512-IiQpRyypSnLisQf3PwuN2eIHAsAIGZIrLZkd4zdvIar2bDyhM91ubRjy8a3eYablXsh9BeI/c7dmPYHca5qtoA==", "optional": true, "requires": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" } }, "jquery": { @@ -30326,7 +30310,6 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "optional": true, - "peer": true, "requires": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -30359,7 +30342,6 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "optional": true, - "peer": true, "requires": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -30372,7 +30354,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, - "peer": true, "requires": { "ms": "2.0.0" } @@ -30384,7 +30365,6 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "optional": true, - "peer": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -30400,7 +30380,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, - "peer": true, "requires": { "ms": "2.0.0" } @@ -30411,15 +30390,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true, - "peer": true + "optional": true }, "tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "optional": true, - "peer": true + "optional": true } } }, @@ -30473,6 +30450,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", + "peer": true, "requires": { "copy-anything": "^2.0.1", "errno": "^0.1.1", @@ -30676,7 +30654,6 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "optional": true, - "peer": true, "requires": { "date-format": "^4.0.3", "debug": "^4.3.3", @@ -30845,8 +30822,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "optional": true, - "peer": true + "optional": true }, "mime-db": { "version": "1.52.0", @@ -31058,7 +31034,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "optional": true, - "peer": true, "requires": { "minimist": "^1.2.5" } @@ -32196,6 +32171,7 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "peer": true, "requires": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -32379,8 +32355,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "optional": true, - "peer": true + "optional": true }, "qrcode": { "version": "1.5.1", @@ -32663,7 +32638,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, - "peer": true, "requires": { "glob": "^7.1.3" } @@ -32758,6 +32732,7 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "peer": true, "requires": { "tslib": "^2.1.0" } @@ -32776,6 +32751,7 @@ "version": "1.90.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", + "peer": true, "requires": { "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", @@ -32832,6 +32808,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "peer": true, "requires": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -33445,19 +33422,19 @@ } }, "start-server-and-test": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.0.tgz", - "integrity": "sha512-yJg/GR9z7+8qxhZqDPmCEKbU/BO/zpyXUZGLmY1Nv4rmJJDC89NnzIEUWXEG4e1J4MRFoDF50eJK8bGHKrSdlg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.1.2.tgz", + "integrity": "sha512-OIjfo3G6QV9Sh6IlMqj58oZwVhPVuU/l6uVACG7YNE9kAfDvcYoPThtb0NNT3tZMMC3wOYbXnC15yiCSNFkdRg==", "optional": true, "requires": { "arg": "^5.0.2", "bluebird": "3.7.2", "check-more-types": "2.24.0", - "debug": "4.4.1", + "debug": "4.4.3", "execa": "5.1.1", "lazy-ass": "1.6.0", "ps-tree": "1.2.0", - "wait-on": "8.0.4" + "wait-on": "8.0.5" }, "dependencies": { "arg": { @@ -33467,9 +33444,9 @@ "optional": true }, "debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "optional": true, "requires": { "ms": "^2.1.3" @@ -33540,7 +33517,6 @@ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "optional": true, - "peer": true, "requires": { "date-format": "^4.0.3", "debug": "^4.1.1", @@ -33633,6 +33609,12 @@ "acorn-node": "^1.2.0" } }, + "systeminformation": { + "version": "5.27.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", + "integrity": "sha512-saaqOoVEEFaux4v0K8Q7caiauRwjXC4XbD2eH60dxHXbpKxQ8kH9Rf7Jh+nryKpOUSEFxtCdBlSUx0/lO6rwRg==", + "optional": true + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -33704,6 +33686,7 @@ "version": "5.43.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "peer": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -33795,7 +33778,8 @@ "picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "peer": true } } }, @@ -33852,18 +33836,18 @@ } }, "tldts": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", - "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", "optional": true, "requires": { - "tldts-core": "^6.1.70" + "tldts-core": "^6.1.86" } }, "tldts-core": { - "version": "6.1.70", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", - "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", "optional": true }, "tlite": { @@ -33902,9 +33886,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", "optional": true, "requires": { "tldts": "^6.1.32" @@ -34008,7 +33992,8 @@ "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "peer": true }, "tuf-js": { "version": "3.1.0", @@ -34108,14 +34093,14 @@ "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "peer": true }, "ua-parser-js": { "version": "0.7.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "optional": true, - "peer": true + "optional": true }, "umd": { "version": "3.0.3", @@ -34324,26 +34309,25 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "optional": true, - "peer": true + "optional": true }, "wait-on": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.4.tgz", - "integrity": "sha512-8f9LugAGo4PSc0aLbpKVCVtzayd36sSCp4WLpVngkYq6PK87H79zt77/tlCU6eKCLqR46iFvcl0PU5f+DmtkwA==", + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-8.0.5.tgz", + "integrity": "sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==", "optional": true, "requires": { - "axios": "^1.11.0", - "joi": "^17.13.3", + "axios": "^1.12.1", + "joi": "^18.0.1", "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" }, "dependencies": { "axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "optional": true, "requires": { "follow-redirects": "^1.15.6", @@ -34386,6 +34370,7 @@ "version": "5.101.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", + "peer": true, "requires": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -34417,7 +34402,8 @@ "acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "peer": true }, "acorn-import-phases": { "version": "1.0.4", @@ -34454,6 +34440,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "peer": true, "requires": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -34771,7 +34758,6 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "optional": true, - "peer": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -34787,7 +34773,6 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "optional": true, - "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -34799,7 +34784,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "optional": true, - "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -34810,15 +34794,13 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", - "optional": true, - "peer": true + "optional": true }, "yargs-parser": { "version": "20.2.7", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "optional": true, - "peer": true + "optional": true } } }, @@ -34860,7 +34842,8 @@ "zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "peer": true }, "zod-to-json-schema": { "version": "3.24.6", @@ -34871,7 +34854,8 @@ "zone.js": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", - "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==" + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", + "peer": true }, "zrender": { "version": "5.4.4", From ee2394430f5ee3547dd60f5751c250b74042ade3 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 15 Nov 2025 11:06:53 +0000 Subject: [PATCH 483/534] resync package-locks --- backend/package-lock.json | 6 +- frontend/package-lock.json | 382 ++++++++++++++++++++++++++----------- 2 files changed, 274 insertions(+), 114 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index fe0174e8f..fac723c86 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -7829,7 +7829,11 @@ } }, "rust-gbt": { - "version": "0.0.1" + "name": "gbt", + "version": "3.0.1", + "engines": { + "node": ">= 12" + } } }, "dependencies": { diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 3eb4a1054..c1e4f2ebe 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -358,6 +358,23 @@ } } }, + "node_modules/@angular-devkit/architect/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular-devkit/architect/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -382,6 +399,7 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -591,6 +609,23 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -673,6 +708,7 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -799,6 +835,23 @@ } } }, + "node_modules/@angular-devkit/schematics/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular-devkit/schematics/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -823,6 +876,7 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -845,7 +899,6 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1164,7 +1217,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1265,7 +1317,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -1517,6 +1568,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/@angular/cli/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular/cli/node_modules/cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -1597,7 +1665,6 @@ "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", "license": "MIT", - "peer": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -1693,6 +1760,7 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -1855,7 +1923,6 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1872,7 +1939,6 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -1885,7 +1951,6 @@ "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -2074,7 +2139,6 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2100,7 +2164,6 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2129,7 +2192,6 @@ "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", "license": "MIT", - "peer": true, "dependencies": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -2282,7 +2344,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2323,7 +2384,6 @@ "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -2344,7 +2404,6 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2363,7 +2422,6 @@ "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", "license": "MIT", - "peer": true, "dependencies": { "tslib": "^2.3.0" }, @@ -2407,7 +2465,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -4066,6 +4123,7 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "optional": true, + "peer": true, "engines": { "node": ">=0.1.90" } @@ -5188,7 +5246,6 @@ "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", "license": "MIT", - "peer": true, "dependencies": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -7211,6 +7268,23 @@ } } }, + "node_modules/@schematics/angular/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@schematics/angular/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -7235,6 +7309,7 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -7626,7 +7701,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -7785,7 +7859,6 @@ "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -8199,7 +8272,6 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -9027,7 +9099,6 @@ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, - "peer": true, "dependencies": { "browser-sync-client": "^3.0.3", "browser-sync-ui": "^3.0.3", @@ -9502,7 +9573,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -10701,7 +10771,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true + "optional": true, + "peer": true }, "node_modules/cypress": { "version": "15.6.0", @@ -10901,6 +10972,7 @@ "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", "optional": true, + "peer": true, "engines": { "node": ">=4.0" } @@ -11123,7 +11195,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true + "optional": true, + "peer": true }, "node_modules/diff": { "version": "4.0.2", @@ -11171,6 +11244,7 @@ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "optional": true, + "peer": true, "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -11473,11 +11547,26 @@ "node": ">=10.13.0" } }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true + "optional": true, + "peer": true }, "node_modules/entities": { "version": "4.5.0", @@ -11788,7 +11877,6 @@ "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -13051,6 +13139,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "optional": true, + "peer": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -14236,6 +14325,7 @@ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "optional": true, + "peer": true, "engines": { "node": ">= 8.0.0" }, @@ -14337,7 +14427,6 @@ "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "peer": true, "bin": { "jiti": "bin/jiti.js" } @@ -14522,6 +14611,7 @@ "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -14568,6 +14658,7 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "optional": true, + "peer": true, "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -14583,6 +14674,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -14592,6 +14684,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "optional": true, + "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -14610,6 +14703,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -14618,7 +14712,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true + "optional": true, + "peer": true }, "node_modules/karma/node_modules/tmp": { "version": "0.2.5", @@ -14626,6 +14721,7 @@ "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=14.14" } @@ -14682,7 +14778,6 @@ "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", "license": "Apache-2.0", - "peer": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -14980,6 +15075,7 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "optional": true, + "peer": true, "dependencies": { "date-format": "^4.0.3", "debug": "^4.3.3", @@ -15198,6 +15294,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "optional": true, + "peer": true, "bin": { "mime": "cli.js" }, @@ -15497,6 +15594,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "optional": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -17117,7 +17215,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -17403,6 +17500,7 @@ "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "optional": true, + "peer": true, "engines": { "node": ">=0.9" } @@ -17777,6 +17875,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, + "peer": true, "dependencies": { "glob": "^7.1.3" }, @@ -17921,7 +18020,6 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", - "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -17941,7 +18039,6 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -18062,7 +18159,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -19014,6 +19110,7 @@ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "optional": true, + "peer": true, "dependencies": { "date-format": "^4.0.3", "debug": "^4.1.1", @@ -19272,7 +19369,6 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "license": "BSD-2-Clause", - "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -19427,7 +19523,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -19748,8 +19843,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "peer": true + "license": "0BSD" }, "node_modules/tuf-js": { "version": "3.1.0", @@ -19887,7 +19981,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19911,6 +20004,7 @@ } ], "optional": true, + "peer": true, "engines": { "node": "*" } @@ -20205,6 +20299,7 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -20282,7 +20377,6 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -20372,7 +20466,6 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "license": "MIT", - "peer": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -20683,7 +20776,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -20899,6 +20991,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "optional": true, + "peer": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -20929,6 +21022,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "optional": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -20940,6 +21034,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "optional": true, + "peer": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20957,6 +21052,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", "optional": true, + "peer": true, "engines": { "node": ">=10" } @@ -20966,6 +21062,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "optional": true, + "peer": true, "engines": { "node": ">=10" } @@ -21017,7 +21114,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -21035,8 +21131,7 @@ "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/zrender": { "version": "5.4.4", @@ -21255,6 +21350,16 @@ "ajv": "^8.0.0" } }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -21266,9 +21371,11 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true + "optional": true, + "peer": true }, "source-map": { "version": "0.7.6", @@ -21371,6 +21478,16 @@ "ajv": "^8.0.0" } }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -21418,9 +21535,11 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true + "optional": true, + "peer": true }, "semver": { "version": "7.7.2", @@ -21487,6 +21606,16 @@ "ajv": "^8.0.0" } }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -21498,9 +21627,11 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true + "optional": true, + "peer": true }, "source-map": { "version": "0.7.6", @@ -21513,7 +21644,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -21669,8 +21799,7 @@ "picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "peer": true + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "restore-cursor": { "version": "5.1.0", @@ -21722,7 +21851,6 @@ "version": "7.1.11", "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", - "peer": true, "requires": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -21839,6 +21967,16 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==" }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "cli-cursor": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", @@ -21890,7 +22028,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", - "peer": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -21945,9 +22082,11 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true + "optional": true, + "peer": true }, "restore-cursor": { "version": "5.1.0", @@ -22039,7 +22178,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22048,7 +22186,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22057,7 +22194,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", - "peer": true, "requires": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -22164,7 +22300,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22173,7 +22308,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22188,7 +22322,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", - "peer": true, "requires": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -22278,7 +22411,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22295,7 +22427,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", - "peer": true, "requires": { "tslib": "^2.3.0", "xhr2": "^0.2.0" @@ -22305,7 +22436,6 @@ "version": "20.3.9", "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22314,7 +22444,6 @@ "version": "20.3.8", "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", - "peer": true, "requires": { "tslib": "^2.3.0" } @@ -22338,7 +22467,6 @@ "version": "7.28.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", - "peer": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -23402,7 +23530,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true + "optional": true, + "peer": true }, "@cspotcode/source-map-support": { "version": "0.8.1", @@ -24009,7 +24138,6 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.2.tgz", "integrity": "sha512-nqhDw2ZcAUrKNPwhjinJny903bRhI0rQhiDz1LksjeRxqa36i3l75+4iXbOy0rlDpLJGxqtgoPavQjmmyS5UJw==", - "peer": true, "requires": { "@inquirer/checkbox": "^4.2.1", "@inquirer/confirm": "^5.1.14", @@ -25047,6 +25175,16 @@ "ajv": "^8.0.0" } }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "optional": true, + "peer": true, + "requires": { + "readdirp": "^4.0.1" + } + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -25058,9 +25196,11 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" }, "readdirp": { - "version": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "optional": true + "optional": true, + "peer": true }, "source-map": { "version": "0.7.6", @@ -25391,7 +25531,6 @@ "version": "24.9.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", - "peer": true, "requires": { "undici-types": "~7.16.0" } @@ -25529,7 +25668,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", "dev": true, - "peer": true, "requires": { "@typescript-eslint/scope-manager": "8.46.2", "@typescript-eslint/types": "8.46.2", @@ -25816,8 +25954,7 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "peer": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { "version": "5.3.2", @@ -26402,7 +26539,6 @@ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, - "peer": true, "requires": { "browser-sync-client": "^3.0.3", "browser-sync-ui": "^3.0.3", @@ -26787,7 +26923,6 @@ "version": "4.27.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", - "peer": true, "requires": { "baseline-browser-mapping": "^2.8.19", "caniuse-lite": "^1.0.30001751", @@ -27609,7 +27744,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "optional": true + "optional": true, + "peer": true }, "cypress": { "version": "15.6.0", @@ -27768,7 +27904,8 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.3.tgz", "integrity": "sha512-7P3FyqDcfeznLZp2b+OMitV9Sz2lUnsT87WaTat9nVwqsBkTzPG3lPLNwW3en6F4pHUiWzr6vb8CLhjdK9bcxQ==", - "optional": true + "optional": true, + "peer": true }, "dayjs": { "version": "1.11.9", @@ -27915,7 +28052,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "optional": true + "optional": true, + "peer": true }, "diff": { "version": "4.0.2", @@ -27958,6 +28096,7 @@ "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "optional": true, + "peer": true, "requires": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -28205,11 +28344,22 @@ "tapable": "^2.2.0" } }, + "enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "optional": true, + "requires": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + } + }, "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "optional": true + "optional": true, + "peer": true }, "entities": { "version": "4.5.0", @@ -28447,7 +28597,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -29327,6 +29476,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "optional": true, + "peer": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -30104,7 +30254,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "optional": true + "optional": true, + "peer": true }, "isexe": { "version": "2.0.0", @@ -30171,8 +30322,7 @@ "jiti": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "peer": true + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" }, "joi": { "version": "18.0.1", @@ -30310,6 +30460,7 @@ "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "optional": true, + "peer": true, "requires": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -30342,6 +30493,7 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "optional": true, + "peer": true, "requires": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -30354,6 +30506,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -30365,6 +30518,7 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "optional": true, + "peer": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -30380,6 +30534,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "optional": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -30390,13 +30545,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true + "optional": true, + "peer": true }, "tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "optional": true + "optional": true, + "peer": true } } }, @@ -30450,7 +30607,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", - "peer": true, "requires": { "copy-anything": "^2.0.1", "errno": "^0.1.1", @@ -30654,6 +30810,7 @@ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.1.tgz", "integrity": "sha512-iUiYnXqAmNKiIZ1XSAitQ4TmNs8CdZYTAWINARF3LjnsLN8tY5m0vRwd6uuWj/yNY0YHxeZodnbmxKFUOM2rMg==", "optional": true, + "peer": true, "requires": { "date-format": "^4.0.3", "debug": "^4.3.3", @@ -30822,7 +30979,8 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "optional": true + "optional": true, + "peer": true }, "mime-db": { "version": "1.52.0", @@ -31034,6 +31192,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "optional": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -32171,7 +32330,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "peer": true, "requires": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -32355,7 +32513,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "optional": true + "optional": true, + "peer": true }, "qrcode": { "version": "1.5.1", @@ -32638,6 +32797,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "optional": true, + "peer": true, "requires": { "glob": "^7.1.3" } @@ -32732,7 +32892,6 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "peer": true, "requires": { "tslib": "^2.1.0" } @@ -32751,7 +32910,6 @@ "version": "1.90.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", - "peer": true, "requires": { "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", @@ -32808,7 +32966,6 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "peer": true, "requires": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -33517,6 +33674,7 @@ "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.2.tgz", "integrity": "sha512-ur6y5S5dopOaRXBuRIZ1u6GC5bcEXHRZKgfBjfCglMhmIf+roVCECjvkEYzNQOXIN2/JPnkMPW/8B3CZoKaEPA==", "optional": true, + "peer": true, "requires": { "date-format": "^4.0.3", "debug": "^4.1.1", @@ -33686,7 +33844,6 @@ "version": "5.43.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", - "peer": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -33778,8 +33935,7 @@ "picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "peer": true + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" } } }, @@ -33992,8 +34148,7 @@ "tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "peer": true + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "tuf-js": { "version": "3.1.0", @@ -34093,14 +34248,14 @@ "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "peer": true + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" }, "ua-parser-js": { "version": "0.7.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "optional": true + "optional": true, + "peer": true }, "umd": { "version": "3.0.3", @@ -34309,7 +34464,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "optional": true + "optional": true, + "peer": true }, "wait-on": { "version": "8.0.5", @@ -34370,7 +34526,6 @@ "version": "5.101.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", - "peer": true, "requires": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -34402,8 +34557,7 @@ "acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "peer": true + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" }, "acorn-import-phases": { "version": "1.0.4", @@ -34440,7 +34594,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", - "peer": true, "requires": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -34758,6 +34911,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "optional": true, + "peer": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -34773,6 +34927,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "optional": true, + "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -34784,6 +34939,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "optional": true, + "peer": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -34794,13 +34950,15 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.6.tgz", "integrity": "sha512-PlVX4Y0lDTN6E2V4ES2tEdyvXkeKzxa8c/vo0pxPr/TqbztddTP0yn7zZylIyiAuxerqj0Q5GhpJ1YJCP8LaZQ==", - "optional": true + "optional": true, + "peer": true }, "yargs-parser": { "version": "20.2.7", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "optional": true + "optional": true, + "peer": true } } }, @@ -34842,8 +35000,7 @@ "zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "peer": true + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" }, "zod-to-json-schema": { "version": "3.24.6", @@ -34854,8 +35011,7 @@ "zone.js": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", - "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", - "peer": true + "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==" }, "zrender": { "version": "5.4.4", From 2d1dfb471f639adfab218112dec55c02c45782b6 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 15 Nov 2025 14:54:32 -0800 Subject: [PATCH 484/534] Update workflow to tag with the short sha when the docker label is used --- .github/workflows/on-tag.yml | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/on-tag.yml index cbebb2cb4..31ca326c6 100644 --- a/.github/workflows/on-tag.yml +++ b/.github/workflows/on-tag.yml @@ -10,12 +10,18 @@ on: tags: - v[0-9]+.[0-9]+.[0-9]+ - v[0-9]+.[0-9]+.[0-9]+-* + pull_request: + types: [opened, synchronize, reopened, labeled] permissions: contents: read jobs: build: + # Run on tag pushes OR on PRs that have the "docker" label + if: | + github.event_name == 'push' || + (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'docker')) strategy: matrix: service: @@ -56,15 +62,13 @@ jobs: sudo systemctl restart docker sudo df -h | grep docker - - name: Set env variables + # Only for tag pushes: use the Git tag as TAG + - name: Set TAG from pushed tag + if: github.event_name == 'push' run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV - - name: Show set environment variables - run: | - printf " TAG: %s\n" "$TAG" - - name: Add SHORT_SHA env property with commit short sha - run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV + run: echo "SHORT_SHA=$(echo ${GITHUB_SHA} | cut -c1-8)" >> $GITHUB_ENV - name: Login to Docker for building run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin @@ -72,6 +76,18 @@ jobs: - name: Checkout project uses: actions/checkout@v4 + # For PRs: use package.json version + short sha as TAG + - name: Set TAG from package.json for pull requests + if: github.event_name == 'pull_request' + run: | + VERSION=$(jq -r '.version' backend/package.json) + echo "TAG=${VERSION}-${SHORT_SHA}" >> $GITHUB_ENV + + - name: Show set environment variables + run: | + printf " TAG: %s\n" "$TAG" + printf " SHORT_SHA: %s\n" "$SHORT_SHA" + - name: Init repo for Dockerization run: docker/init.sh "$TAG" @@ -117,7 +133,8 @@ jobs: tag-latest: needs: build - if: ${{ needs.build.result == 'success' && !contains(github.ref_name, '-') }} + # Only for successful *tag pushes* and only for "plain" versions (no '-') + if: ${{ needs.build.result == 'success' && github.event_name == 'push' && !contains(github.ref_name, '-') }} runs-on: ubuntu-latest timeout-minutes: 30 name: Tag release build as latest From c3ec9bff470419145b95377872d225e396f920bf Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 15 Nov 2025 14:55:27 -0800 Subject: [PATCH 485/534] Rename workflow file --- .github/workflows/{on-tag.yml => docker.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{on-tag.yml => docker.yml} (100%) diff --git a/.github/workflows/on-tag.yml b/.github/workflows/docker.yml similarity index 100% rename from .github/workflows/on-tag.yml rename to .github/workflows/docker.yml From 6d749b71bcb05bc5ee75824a5a9207ad5860b01a Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 17 Nov 2025 17:14:48 +0100 Subject: [PATCH 486/534] Prevent stacking of scheduled indexing runs --- backend/src/indexer.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index b3bfd2521..cdb4654ae 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -26,6 +26,7 @@ class Indexer { private indexerRunning = false; private tasksRunning: { [key in TaskName]?: boolean; } = {}; private tasksScheduled: { [key in TaskName]?: NodeJS.Timeout; } = {}; + private reindexTimeout: NodeJS.Timeout | undefined; private coreIndexes: CoreIndex[] = []; public indexerIsRunning(): boolean { @@ -76,10 +77,24 @@ class Indexer { public reindex(): void { if (Common.indexingEnabled()) { + if (this.reindexTimeout) { + clearTimeout(this.reindexTimeout); + this.reindexTimeout = undefined; + } this.runIndexer = true; } } + private scheduleNextRun(timeout: number): void { + if (this.reindexTimeout) { // Only one future run should be planned, so always replace existing timer + clearTimeout(this.reindexTimeout); + } + this.reindexTimeout = setTimeout(() => { + this.reindexTimeout = undefined; + this.reindex(); + }, timeout); + } + /** * schedules a single task to run in `timeout` ms * only one task of each type may be scheduled @@ -182,7 +197,7 @@ class Indexer { if (chainValid === false) { // Chain of block hash was invalid, so we need to reindex. Stop here and continue at the next iteration logger.warn(`The chain of block hash is invalid, re-indexing invalid data in 10 seconds.`, logger.tags.mining); - setTimeout(() => this.reindex(), 10000); + this.scheduleNextRun(10000); this.indexerRunning = false; return; } @@ -205,7 +220,7 @@ class Indexer { } catch (e) { this.indexerRunning = false; logger.err(`Indexer failed, trying again in 10 seconds. Reason: ` + (e instanceof Error ? e.message : e)); - setTimeout(() => this.reindex(), 10000); + this.scheduleNextRun(10000); this.indexerRunning = false; return; } @@ -214,7 +229,7 @@ class Indexer { const runEvery = 1000 * 3600; // 1 hour logger.debug(`Indexing completed. Next run planned at ${new Date(new Date().getTime() + runEvery).toUTCString()}`); - setTimeout(() => this.reindex(), runEvery); + this.scheduleNextRun(runEvery); } } From 548bdd4caa69df635d5e59056e1e57cc1ca2b8b4 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Mon, 17 Nov 2025 22:09:04 -0300 Subject: [PATCH 487/534] Add the missing version prefix --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 31ca326c6..d351fad39 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -81,7 +81,7 @@ jobs: if: github.event_name == 'pull_request' run: | VERSION=$(jq -r '.version' backend/package.json) - echo "TAG=${VERSION}-${SHORT_SHA}" >> $GITHUB_ENV + echo "TAG=v${VERSION}-${SHORT_SHA}" >> $GITHUB_ENV - name: Show set environment variables run: | From a260e541ede301ebafcc3ccb44113f023d5f0e73 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 19 Nov 2025 16:53:12 +0100 Subject: [PATCH 488/534] Allow pushdata numbers in multisig parser --- frontend/src/app/shared/script.utils.ts | 76 ++++++++++++++++++------- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/shared/script.utils.ts b/frontend/src/app/shared/script.utils.ts index dcd81b899..682974521 100644 --- a/frontend/src/app/shared/script.utils.ts +++ b/frontend/src/app/shared/script.utils.ts @@ -272,6 +272,56 @@ export function detectScriptTemplate(type: ScriptType, script_asm: string, witne return; } +/** Returns the last push of a script as a number, the push can be OP_0, OP_PUSHNUM_<1-16>, or OP_PUSHBYTES_<1-75> */ +function popScriptNumberOperand(ops: string[]): number | undefined { + if (!ops.length) { + return; + } + + const token = ops.pop(); + if (!token) { + return; + } + + if (token === 'OP_0') { + return 0; + } + + if (token.startsWith('OP_PUSHNUM_')) { + const digits = token.match(/[0-9]+/); + if (!digits) { + return; + } + return parseInt(digits[0], 10); + } + + if (!token.startsWith('OP_')) { + const pushOp = ops.pop(); + const pushBytes = pushOp?.match(/^OP_PUSHBYTES_(\d+)$/); + if (!pushBytes) { + return; + } + + const byteCount = parseInt(pushBytes[1], 10); + if (!byteCount || !/^[0-9a-fA-F]+$/.test(token) || token.length !== byteCount * 2) { + return; + } + + let value = 0; + for (let i = 0; i < byteCount; i++) { + const byteHex = token.slice(i * 2, i * 2 + 2); + const byte = parseInt(byteHex, 16); + if (Number.isNaN(byte)) { + return; + } + value |= byte << (8 * i); + } + return value; + } + + return; +} + /** extracts m and n from a multisig script (asm), returns nothing if it is not a multisig script */ export function parseMultisigScript(script: string): undefined | { m: number, n: number } { if (!script) { @@ -281,14 +331,10 @@ export function parseMultisigScript(script: string): undefined | { m: number, n: if (ops.length < 3 || ops.pop() !== 'OP_CHECKMULTISIG') { return; } - const opN = ops.pop(); - if (!opN) { + const n = popScriptNumberOperand(ops); + if (n === undefined) { return; } - if (opN !== 'OP_0' && !opN.startsWith('OP_PUSHNUM_')) { - return; - } - const n = parseInt(opN.match(/[0-9]+/)?.[0] || '', 10); if (ops.length < n * 2 + 1) { return; } @@ -301,14 +347,10 @@ export function parseMultisigScript(script: string): undefined | { m: number, n: return; } } - const opM = ops.pop(); - if (!opM) { + const m = popScriptNumberOperand(ops); + if (m === undefined) { return; } - if (opM !== 'OP_0' && !opM.startsWith('OP_PUSHNUM_')) { - return; - } - const m = parseInt(opM.match(/[0-9]+/)?.[0] || '', 10); if (ops.length) { return; @@ -333,14 +375,8 @@ export function parseTapscriptMultisig(script: string): undefined | { m: number, return; } - let m: number; - if (['OP_PUSHBYTES_1', 'OP_PUSHBYTES_2'].includes(ops[ops.length - 2])) { - const data = ops.pop(); - ops.pop(); - m = parseInt(data.match(/../g).reverse().join(''), 16); - } else if (ops[ops.length - 1].startsWith('OP_PUSHNUM_') || ops[ops.length - 1] === 'OP_0') { - m = parseInt(ops.pop().match(/[0-9]+/)?.[0], 10); - } else { + let m = popScriptNumberOperand(ops); + if (m === undefined) { return; } From 7f00ed886f2f35a592b0df3a4a40a36db8cf5f93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 02:02:01 +0000 Subject: [PATCH 489/534] Bump cypress from 15.6.0 to 15.7.0 in /frontend Bumps [cypress](https://github.com/cypress-io/cypress) from 15.6.0 to 15.7.0. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md) - [Commits](https://github.com/cypress-io/cypress/compare/v15.6.0...v15.7.0) --- updated-dependencies: - dependency-name: cypress dependency-version: 15.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 18 ++++++++---------- frontend/package.json | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c1e4f2ebe..005f4e31a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "bootstrap": "~4.6.2", "browserify": "^17.0.0", "clipboard": "^2.0.11", + "cypress": "^15.7.0", "domino": "^2.1.6", "echarts": "~5.4.0", "esbuild": "^0.25.8", @@ -60,7 +61,7 @@ }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "cypress": "^15.6.0", + "cypress": "^15.7.0", "cypress-fail-on-console-error": "~5.1.1", "cypress-wait-until": "^3.0.1", "mock-socket": "~9.3.1", @@ -10775,11 +10776,10 @@ "peer": true }, "node_modules/cypress": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", - "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.7.0.tgz", + "integrity": "sha512-1C81zKxnQckYm2XGi37rPV4rN0bzUoWhydhKdOyshJn5gJKszEx5as9VLSZI0jp0ye49QxmnbU4TtMpcD+OmGQ==", "hasInstallScript": true, - "license": "MIT", "optional": true, "dependencies": { "@cypress/request": "^3.0.9", @@ -10818,7 +10818,6 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", "supports-color": "^8.1.1", "systeminformation": "5.27.7", "tmp": "~0.2.4", @@ -27748,9 +27747,9 @@ "peer": true }, "cypress": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.6.0.tgz", - "integrity": "sha512-Vqo66GG1vpxZ7H1oDX9umfmzA3nF7Wy80QAc3VjwPREO5zTY4d1xfQFNPpOWleQl9vpdmR2z1liliOcYlRX6rQ==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.7.0.tgz", + "integrity": "sha512-1C81zKxnQckYm2XGi37rPV4rN0bzUoWhydhKdOyshJn5gJKszEx5as9VLSZI0jp0ye49QxmnbU4TtMpcD+OmGQ==", "optional": true, "requires": { "@cypress/request": "^3.0.9", @@ -27789,7 +27788,6 @@ "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.7.1", "supports-color": "^8.1.1", "systeminformation": "5.27.7", "tmp": "~0.2.4", diff --git a/frontend/package.json b/frontend/package.json index 29a78cb08..7f3ec93f3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -111,7 +111,7 @@ }, "optionalDependencies": { "@cypress/schematic": "^2.5.0", - "cypress": "^15.6.0", + "cypress": "^15.7.0", "cypress-fail-on-console-error": "~5.1.1", "cypress-wait-until": "^3.0.1", "mock-socket": "~9.3.1", From 4cd6ef7e5c25e0137654832fc0728a1972513989 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 20 Nov 2025 09:12:25 -0300 Subject: [PATCH 490/534] Use a different sha for the pull request flow --- .github/workflows/docker.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d351fad39..22cadca05 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -68,7 +68,14 @@ jobs: run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV - name: Add SHORT_SHA env property with commit short sha - run: echo "SHORT_SHA=$(echo ${GITHUB_SHA} | cut -c1-8)" >> $GITHUB_ENV + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + SHA="${{ github.event.pull_request.head.sha }}" + else + SHA="${GITHUB_SHA}" + fi + echo "SHORT_SHA=${SHA:0:8}" >> $GITHUB_ENV + - name: Login to Docker for building run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin From 4049b4b09ca1f8096e91781b2e19c205eaa0a30d Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Thu, 20 Nov 2025 09:16:59 -0300 Subject: [PATCH 491/534] Pull the backend and frontend version string from the appropriate files --- .github/workflows/docker.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 22cadca05..22a86db56 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -84,10 +84,14 @@ jobs: uses: actions/checkout@v4 # For PRs: use package.json version + short sha as TAG - - name: Set TAG from package.json for pull requests + - name: Set TAG from service package.json for pull requests if: github.event_name == 'pull_request' run: | - VERSION=$(jq -r '.version' backend/package.json) + if [ "${{ matrix.service }}" = "frontend" ]; then + VERSION=$(jq -r '.version' frontend/package.json) + else + VERSION=$(jq -r '.version' backend/package.json) + fi echo "TAG=v${VERSION}-${SHORT_SHA}" >> $GITHUB_ENV - name: Show set environment variables From 65dce1f9dd2dccd5f96fcc81c3cb156802a8c5f3 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 20 Nov 2025 13:45:22 +0100 Subject: [PATCH 492/534] Fix bowtie tooltip output on electrum backend --- .../tx-bowtie-graph-tooltip.component.html | 2 +- .../tx-bowtie-graph-tooltip.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html index 3dfb2059d..b75fe9319 100644 --- a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html +++ b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html @@ -56,7 +56,7 @@ - + diff --git a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts index ad2d7a299..cf3daa61c 100644 --- a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts @@ -54,7 +54,7 @@ export class TxBowtieGraphTooltipComponent implements OnChanges { constructor( private priceService: PriceService, - private stateService: StateService, + public stateService: StateService, private apiService: ApiService, ) {} From 0315d3dc0622fad7be5e5e7ff9255f92f7780fff Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 22 Nov 2025 08:07:13 +0000 Subject: [PATCH 493/534] change handle --- frontend/custom-meta-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/custom-meta-config.json b/frontend/custom-meta-config.json index 6fa46192a..358a91da6 100644 --- a/frontend/custom-meta-config.json +++ b/frontend/custom-meta-config.json @@ -25,7 +25,7 @@ "component": "twitter", "mobileOrder": 5, "props": { - "handle": "Metaplanet_JP" + "handle": "Metaplanet" } }, { From bf7f780f142d93fe7e0f0c1424fd85d96f3c1ec6 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 27 Nov 2025 09:23:15 +0000 Subject: [PATCH 494/534] add missing trackBy fn to CPFP table --- .../src/app/components/transaction/cpfp-info.component.html | 4 ++-- .../src/app/components/transaction/cpfp-info.component.ts | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transaction/cpfp-info.component.html b/frontend/src/app/components/transaction/cpfp-info.component.html index 55945c388..c287a6165 100644 --- a/frontend/src/app/components/transaction/cpfp-info.component.html +++ b/frontend/src/app/components/transaction/cpfp-info.component.html @@ -16,7 +16,7 @@
    Descendant @@ -40,7 +40,7 @@
    Ancestor diff --git a/frontend/src/app/components/transaction/cpfp-info.component.ts b/frontend/src/app/components/transaction/cpfp-info.component.ts index 8407e0b22..09842cec6 100644 --- a/frontend/src/app/components/transaction/cpfp-info.component.ts +++ b/frontend/src/app/components/transaction/cpfp-info.component.ts @@ -20,4 +20,8 @@ export class CpfpInfoComponent implements OnInit { roundToOneDecimal(cpfpTx: any): number { return +(cpfpTx.fee / (cpfpTx.weight / 4)).toFixed(1); } + + trackByIndex(index: number): number { + return index; + } } From 1f3444aa1b372ca496cd67a813629230325f0049 Mon Sep 17 00:00:00 2001 From: natsoni <46578910+natsoni@users.noreply.github.com> Date: Thu, 27 Nov 2025 10:34:42 +0100 Subject: [PATCH 495/534] Don't schedule duplicate timeouts Co-authored-by: mononaut <83316221+mononaut@users.noreply.github.com> --- backend/src/indexer.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index cdb4654ae..7e41aae23 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -86,13 +86,12 @@ class Indexer { } private scheduleNextRun(timeout: number): void { - if (this.reindexTimeout) { // Only one future run should be planned, so always replace existing timer - clearTimeout(this.reindexTimeout); + if (!this.reindexTimeout) { // Only one future run should be planned, ignore if already scheduled + this.reindexTimeout = setTimeout(() => { + this.reindexTimeout = undefined; + this.reindex(); + }, timeout); } - this.reindexTimeout = setTimeout(() => { - this.reindexTimeout = undefined; - this.reindex(); - }, timeout); } /** From b418c41ae1b6a012a4205ef93a087bf4a668e4dd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 28 Nov 2025 06:06:34 +0000 Subject: [PATCH 496/534] update project manager --- .../src/app/components/about/about.component.html | 14 +++++--------- .../src/app/components/about/about.component.scss | 12 ++++++++++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 1f4aab850..1cd70568f 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -427,18 +427,14 @@ -
    -

    Project Maintainers

    +
    +

    Project Manager

    +

    Wiz & Associates

    @@ -188,7 +188,7 @@ - } @else if (windex === vin['taprootInfo']?.scriptIndex || (windex === vin.witness.length - 1 && vin.prevout?.scriptpubkey_type === 'v0_p2wsh')) { + } @else if (windex === vin['taprootInfo']?.scriptIndex || (windex === vin.witness.length - 1 && ['p2sh', 'v0_p2wsh'].includes(vin.prevout?.scriptpubkey_type))) { diff --git a/frontend/src/app/shared/components/asm/asm.component.html b/frontend/src/app/shared/components/asm/asm.component.html index 0a2610e77..23b6d91c0 100644 --- a/frontend/src/app/shared/components/asm/asm.component.html +++ b/frontend/src/app/shared/components/asm/asm.component.html @@ -1,7 +1,7 @@
    - @for (instruction of instructions; track instruction.instruction) { + @for (instruction of instructions; track instruction.instruction; let i = $index) { OP_{{instruction.instruction}} - @for (arg of instruction.args; track arg) { + @for (arg of instruction.args; track arg; let j = $index) { + @if (annotations.p2sh && i === instructions.length - 1) { + + + + } {{ arg }} } diff --git a/frontend/src/app/shared/components/asm/asm.component.scss b/frontend/src/app/shared/components/asm/asm.component.scss index ce9b2b22a..7e80652ef 100644 --- a/frontend/src/app/shared/components/asm/asm.component.scss +++ b/frontend/src/app/shared/components/asm/asm.component.scss @@ -50,4 +50,9 @@ margin-left: 4px; margin-right: -4px; } +} + +.script { + margin-left: 4px; + margin-right: -4px; } \ No newline at end of file diff --git a/frontend/src/app/shared/components/asm/asm.component.ts b/frontend/src/app/shared/components/asm/asm.component.ts index ba4eb88e7..9994c4f62 100644 --- a/frontend/src/app/shared/components/asm/asm.component.ts +++ b/frontend/src/app/shared/components/asm/asm.component.ts @@ -13,10 +13,12 @@ export class AsmComponent { @Input() crop: number = 0; @Input() annotations: { signatures: Record, - selectedSig: SigInfo | null + selectedSig: SigInfo | null, + p2sh: boolean } = { signatures: {}, - selectedSig: null + selectedSig: null, + p2sh: false }; @Output() showSigInfo = new EventEmitter(); @Output() hideSigInfo = new EventEmitter(); From 97ed9c0fdf2ac4e3fdbb5b0e621c62e18a6944a1 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 31 Oct 2025 14:36:37 +0000 Subject: [PATCH 503/534] annotate liquid simplicity scripts --- frontend/src/app/shared/transaction.utils.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index e4fedee52..bf5d4bffe 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -2164,6 +2164,7 @@ export interface ParsedTaproot { leafVersion: number; parity: number; script: string; + simplicityScript?: string; // liquid only stack: string[]; merkleBranches: string[]; internalKey: string; @@ -2211,6 +2212,12 @@ export function parseTaproot(witness: string[]): ParsedTaproot { for (let i = 66; (i + 64) <= controlblock.length; i += 64) { parsed.scriptPath.merkleBranches.push(controlblock.slice(i, i + 64)); } + + if (parsed.scriptPath.leafVersion === 0xbe) { + // override script stuff for simplicity + parsed.scriptIndex = 1; + parsed.scriptPath.simplicityScript = witness[parsed.scriptIndex]; + } } return parsed; } \ No newline at end of file From 7b94e3162628f7cc4d05f4793e77a243ea488094 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 31 Oct 2025 14:54:42 +0000 Subject: [PATCH 504/534] refactor taproot witness parsing --- .../components/address/address.component.ts | 6 +- .../taproot-address-scripts.component.ts | 12 +-- .../transactions-list.component.html | 14 ++-- .../transactions-list.component.ts | 27 +++---- .../src/app/interfaces/electrs.interface.ts | 3 + frontend/src/app/shared/address-utils.ts | 21 +++-- frontend/src/app/shared/script.utils.ts | 11 +-- frontend/src/app/shared/transaction.utils.ts | 80 ++++++++----------- 8 files changed, 80 insertions(+), 94 deletions(-) diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index c48cd496b..372771510 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -285,8 +285,8 @@ export class AddressComponent implements OnInit, OnDestroy { } this.isLoadingTransactions = false; - let addressVin: Vin[] = []; - let vinIds: string[] = []; + const addressVin: Vin[] = []; + const vinIds: string[] = []; for (const tx of this.transactions) { tx.vin.forEach((v, index) => { if (v.prevout?.scriptpubkey_address === this.address.address) { @@ -296,7 +296,7 @@ export class AddressComponent implements OnInit, OnDestroy { }); } this.addressTypeInfo.processInputs(addressVin, vinIds); - this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.scriptPath.length / 2 > 33; + this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.taprootInfo.scriptPath.merkleBranches.length > 1; // hack to trigger change detection this.addressTypeInfo = this.addressTypeInfo.clone(); diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts index 66c9d4c58..399efc257 100644 --- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts +++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts @@ -78,16 +78,12 @@ export class TaprootAddressScriptsComponent implements OnChanges { const merklePaths: { leafVersion: number, merklePath: string[] }[] = []; this.depth = 0; for (const script of scripts) { - const controlBlock = script.scriptPath; - const m = ((controlBlock.length / 2) - 33) / 32; - if (!Number.isInteger(m) || m <= 0) { + const scriptInfo = script.taprootInfo; + if (!scriptInfo.scriptPath?.merkleBranches?.length) { throw new Error("Merkle path length must be >= 1"); } - const leafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe; - const merklePath = []; - for (let i = 0; i < m; i++) { - merklePath.push(controlBlock.slice(66 + i * 64, 66 + (i + 1) * 64)); - } + const leafVersion = scriptInfo.scriptPath.leafVersion; + const merklePath = scriptInfo.scriptPath.merkleBranches.slice(); if (merklePath.length > this.depth) { this.depth = merklePath.length; } 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 2deac345a..77eea66ba 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -183,21 +183,21 @@ - @if (windex === vin['taprootInfo']?.controlBlockIndex) { + @if (windex === vin.taprootInfo?.controlBlockIndex) { - - } @else if (windex === vin['taprootInfo']?.scriptIndex || (windex === vin.witness.length - 1 && ['p2sh', 'v0_p2wsh'].includes(vin.prevout?.scriptpubkey_type))) { + + } @else if (windex === vin.taprootInfo?.scriptIndex || (windex === vin.witness.length - 1 && ['p2sh', 'v0_p2wsh'].includes(vin.prevout?.scriptpubkey_type))) { - } @else if (windex === vin['taprootInfo']?.annexIndex) { + } @else if (windex === vin.taprootInfo?.annexIndex) { } - @if (windex !== vin['taprootInfo']?.controlBlockIndex) { + @if (windex !== vin.taprootInfo?.controlBlockIndex) { @if (witness.length > 1000) { @if (!showFullWitness[vindex][windex]) { {{ witness | slice:0:1000 }} @@ -243,11 +243,11 @@
    P2SH redeem script
    P2TR control block - +
    P2SH redeem script
    P2TR control block diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 45832a021..c9f64e21b 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -161,6 +161,7 @@ position: relative; left: 0px; top: 0px; + cursor: pointer; } .mobile-bottomcol { diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 328fd0f68..9c386b00c 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -68,6 +68,7 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { showFullScriptPubkeyHex: { [voutIndex: number]: boolean } = {}; showFullOpReturnData: { [voutIndex: number]: boolean } = {}; showFullOpReturnPreview: { [voutIndex: number]: boolean } = {}; + showTaprootControlBlock: { [vinIndex: number]: boolean } = {}; showOrdData: { [key: string]: { show: boolean; inscriptions?: Inscription[]; runestone?: Runestone, runeInfo?: { [id: string]: { etching: Etching; txid: string; } }; } } = {}; similarityMatches: Map> = new Map(); @@ -605,6 +606,10 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy { this.showFullOpReturnPreview[voutIndex] = !this.showFullOpReturnPreview[voutIndex]; } + toggleTaprootControlBlock(vinIndex: number): void { + this.showTaprootControlBlock[vinIndex] = !this.showTaprootControlBlock[vinIndex]; + } + toggleOrdData(txid: string, type: 'vin' | 'vout', index: number) { const tx = this.transactions.find((tx) => tx.txid === txid); if (!tx) { From 42d9e5473549c5c206b65e78ae48ca1dc67f71ce Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 6 Nov 2025 11:03:01 +0000 Subject: [PATCH 506/534] fix script annotation on nested p2wpkh pubkey --- .../transactions-list/transactions-list.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a5a54211f..f7b584ae9 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -188,7 +188,7 @@ - } @else if (windex === vin.taprootInfo?.scriptIndex || (windex === vin.witness.length - 1 && ['p2sh', 'v0_p2wsh'].includes(vin.prevout?.scriptpubkey_type))) { + } @else if (windex === vin.taprootInfo?.scriptIndex || (windex === vin.witness.length - 1 && ['p2sh', 'v0_p2wsh'].includes(vin.prevout?.scriptpubkey_type) && vin.scriptsig.length !== 46)) { From 605c6bfd2820394f33319b97a95275d684c36993 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 6 Nov 2025 11:06:42 +0000 Subject: [PATCH 507/534] restore taptree component for depth = 1 --- frontend/src/app/components/address/address.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 372771510..90eca87d3 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -296,7 +296,7 @@ export class AddressComponent implements OnInit, OnDestroy { }); } this.addressTypeInfo.processInputs(addressVin, vinIds); - this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.taprootInfo.scriptPath.merkleBranches.length > 1; + this.hasTapTree = this.addressTypeInfo.tapscript && this.addressTypeInfo.scripts.values().next().value.taprootInfo.scriptPath.merkleBranches.length > 0; // hack to trigger change detection this.addressTypeInfo = this.addressTypeInfo.clone(); From 66b54746ab6fb3ecab3702ef8805054e854eff62 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 27 Nov 2025 05:37:04 +0000 Subject: [PATCH 508/534] handle unsigned p2tr inputs in parseTaproot --- frontend/src/app/shared/transaction.utils.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 8fac8f788..df268c61a 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -2167,9 +2167,13 @@ export interface ParsedTaproot { /** * Parse out the different parts of a taproot spend from a p2tr witness - * `witness` MUST be a valid p2tr witness stack, otherwise the result will be garbage + * if present, `witness` MUST be a valid p2tr witness stack, otherwise the result will be garbage + * otherwise assume this is an unsigned input from a non finalized PSBT */ -export function parseTaproot(witness: string[]): ParsedTaproot { +export function parseTaproot(witness: string[]): ParsedTaproot | null { + if (!witness?.length) { + return { keyPath: true, stack: [] }; + } const parsed: ParsedTaproot = { keyPath: true, stack: witness.slice(0, 1), // assume keyspend for now From 4fd056ccf9fc17bcd054871dd19e4f8d4fd6ff10 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 2 Nov 2025 08:10:56 +0000 Subject: [PATCH 509/534] fix stale block links --- .../src/app/components/stale-list/stale-list.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/stale-list/stale-list.component.html b/frontend/src/app/components/stale-list/stale-list.component.html index 8d3f5a793..5523eca8b 100644 --- a/frontend/src/app/components/stale-list/stale-list.component.html +++ b/frontend/src/app/components/stale-list/stale-list.component.html @@ -8,7 +8,7 @@

    - {{ chainTip.height }} + {{ chainTip.height }} Headers Only @@ -25,7 +25,7 @@

    Stale
    -
    +
    ~ @@ -71,7 +71,7 @@
    Winning
    -
    +
    ~ From 44364d9269025aae716c552b9709e4e4439e0cd0 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 2 Nov 2025 09:30:55 +0000 Subject: [PATCH 510/534] standardize unlimited opreturn --- backend/src/api/common.ts | 36 ++++++++++++++++---- frontend/src/app/shared/transaction.utils.ts | 36 ++++++++++++++++---- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 79cc65540..9bf003212 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -285,6 +285,7 @@ export class Common { // output validation let opreturnCount = 0; + let opreturnBytes = 0; for (const vout of tx.vout) { // scriptpubkey if (['nonstandard', 'provably_unspendable', 'empty'].includes(vout.scriptpubkey_type)) { @@ -308,10 +309,7 @@ export class Common { } } else if (vout.scriptpubkey_type === 'op_return') { opreturnCount++; - if ((vout.scriptpubkey.length / 2) > MAX_OP_RETURN_RELAY) { - // over default datacarrier limit - return true; - } + opreturnBytes += vout.scriptpubkey.length / 2; } // dust // (we could probably hardcode this for the different output types...) @@ -333,9 +331,11 @@ export class Common { } } - // multi-op-return - if (opreturnCount > 1) { - return true; + // op_return + if (opreturnCount > 0) { + if (!this.isStandardOpReturn(opreturnBytes, opreturnCount, height)) { + return true; + } } // TODO: non-mandatory-script-verify-flag @@ -428,6 +428,28 @@ export class Common { return false; } + // OP_RETURN size & count limits were lifted in v28.3/v29.2/v30.0 + static OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 108_000, + 'testnet': 4_750_000, + 'signet': 276_500, + '': 921_000, + }; + static MAX_DATACARRIER_BYTES = 83; + static isStandardOpReturn(bytes: number, outputs: number,height?: number): boolean { + if ( + (height == null || ( + this.OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + && height >= this.OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + )) // limits lifted + || // OR + (bytes <= this.MAX_DATACARRIER_BYTES && outputs <= 1) // below old limits + ) { + return true; + } + return false; + } + static getNonWitnessSize(tx: TransactionExtended): number { let weight = tx.weight; let hasWitness = false; diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 7336adcbc..fdbf5c6a8 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -544,6 +544,7 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string // output validation let opreturnCount = 0; + let opreturnBytes = 0; for (const vout of tx.vout) { // scriptpubkey if (['nonstandard', 'provably_unspendable', 'empty'].includes(vout.scriptpubkey_type)) { @@ -567,10 +568,7 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string } } else if (vout.scriptpubkey_type === 'op_return') { opreturnCount++; - if ((vout.scriptpubkey.length / 2) > MAX_OP_RETURN_RELAY) { - // over default datacarrier limit - return true; - } + opreturnBytes += vout.scriptpubkey.length / 2; } // dust // (we could probably hardcode this for the different output types...) @@ -592,9 +590,11 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string } } - // multi-op-return - if (opreturnCount > 1) { - return true; + // op_return + if (opreturnCount > 0) { + if (!isStandardOpReturn(opreturnBytes, opreturnCount, height, network)) { + return true; + } } // TODO: non-mandatory-script-verify-flag @@ -668,6 +668,28 @@ function isStandardEphemeralDust(tx: Transaction, height?: number, network?: str return false; } +// OP_RETURN size & count limits were lifted in v28.3/v29.2/v30.0 +const OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 108_000, + 'testnet': 4_750_000, + 'signet': 276_500, + '': 921_000, +}; +const MAX_DATACARRIER_BYTES = 83; +function isStandardOpReturn(bytes: number, outputs: number,height?: number, network?: string): boolean { + if ( + (height == null || ( + OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT[network] + && height >= OP_RETURN_STANDARDNESS_ACTIVATION_HEIGHT[network] + )) // limits lifted + || // OR + (bytes <= MAX_DATACARRIER_BYTES && outputs <= 1) // below old limits + ) { + return true; + } + return false; +} + // A witness program is any valid scriptpubkey that consists of a 1-byte push opcode // followed by a data push between 2 and 40 bytes. // https://github.com/bitcoin/bitcoin/blob/2c79abc7ad4850e9e3ba32a04c530155cda7f980/src/script/script.cpp#L224-L240 From dad3af5f85e9565fa6c9705fa7cb3c1c88736212 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 15 Nov 2025 06:27:03 +0000 Subject: [PATCH 511/534] update frontend dependencies --- frontend/package-lock.json | 229 +++++++++++-------------------------- frontend/package.json | 5 +- 2 files changed, 70 insertions(+), 164 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c1e4f2ebe..0c0c9f9e0 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,7 +26,7 @@ "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", - "@mempool/mempool.js": "2.3.0", + "@mempool/mempool.js": "github:mempool/mempool.js#v3.0.0-beta", "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", @@ -5757,24 +5757,25 @@ ] }, "node_modules/@mempool/mempool.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.3.0.tgz", - "integrity": "sha512-FrN9WjZCEyyLodrTPQxmlWDh8B/UGK0jlKfVNzJxqzQ1IMPo/Hpdws8xwYEcsks5JqsaxbjLwaC3GAtJ6Brd0A==", + "version": "3.0.0", + "resolved": "git+ssh://git@github.com/mempool/mempool.js.git#a27b4a61e813b2382f927659fae3c437b7369597", + "license": "MIT", "dependencies": { - "axios": "0.24.0", - "ws": "8.3.0" + "axios": "1.13.2", + "ws": "^8.18.3" } }, "node_modules/@mempool/mempool.js/node_modules/ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -8629,9 +8630,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT", - "optional": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -8711,13 +8710,22 @@ "optional": true }, "node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, + "node_modules/axios/node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/babel-loader": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", @@ -10235,8 +10243,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "optional": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -11096,8 +11102,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "optional": true, "engines": { "node": ">=0.4.0" } @@ -11663,8 +11667,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "optional": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -13068,8 +13070,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "license": "MIT", - "optional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -14463,9 +14463,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -15416,22 +15416,6 @@ "node": ">= 6" } }, - "node_modules/minify-stream/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -19365,13 +19349,13 @@ } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -19547,11 +19531,6 @@ "unassertify": "^3.0.1" } }, - "node_modules/tinyify/node_modules/commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, "node_modules/tinyify/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -19565,22 +19544,6 @@ "node": ">= 6" } }, - "node_modules/tinyify/node_modules/terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "dependencies": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" - }, - "bin": { - "terser": "bin/uglifyjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/tinyify/node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -20324,25 +20287,6 @@ "node": ">=12.0.0" } }, - "node_modules/wait-on/node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "optional": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "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", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT", - "optional": true - }, "node_modules/watchpack": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", @@ -21436,7 +21380,7 @@ "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.43.1", + "terser": "^5.14.2", "tree-kill": "1.2.2", "tslib": "2.8.1", "webpack": "5.101.2", @@ -23501,7 +23445,7 @@ "requires": { "convert-source-map": "^1.9.0", "minimatch": "^3.0.2", - "terser": "^5.15.1", + "terser": "^5.14.2", "through2": "^4.0.2", "xtend": "^4.0.1" }, @@ -24421,18 +24365,17 @@ "optional": true }, "@mempool/mempool.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.3.0.tgz", - "integrity": "sha512-FrN9WjZCEyyLodrTPQxmlWDh8B/UGK0jlKfVNzJxqzQ1IMPo/Hpdws8xwYEcsks5JqsaxbjLwaC3GAtJ6Brd0A==", + "version": "git+ssh://git@github.com/mempool/mempool.js.git#a27b4a61e813b2382f927659fae3c437b7369597", + "from": "@mempool/mempool.js@github:mempool/mempool.js#v3.0.0-beta", "requires": { - "axios": "0.24.0", - "ws": "8.3.0" + "axios": "1.13.2", + "ws": "^8.18.3" }, "dependencies": { "ws": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.3.0.tgz", - "integrity": "sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "requires": {} } } @@ -26211,8 +26154,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "optional": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", @@ -26254,11 +26196,20 @@ "optional": true }, "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "requires": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + } } }, "babel-loader": { @@ -27368,7 +27319,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -27983,8 +27933,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "optional": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegate": { "version": "3.2.0", @@ -28425,7 +28374,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "optional": true, "requires": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -29424,7 +29372,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -30351,9 +30298,9 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "requires": { "argparse": "^2.0.1" } @@ -31024,7 +30971,7 @@ "convert-source-map": "^1.5.0", "duplexify": "^4.1.1", "from2-string": "^1.1.0", - "terser": "^4.7.0", + "terser": "^5.14.2", "xtend": "^4.0.1" }, "dependencies": { @@ -31059,16 +31006,6 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } } } }, @@ -33841,12 +33778,12 @@ } }, "terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "requires": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -33867,7 +33804,7 @@ "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" + "terser": "^5.14.2" }, "dependencies": { "@jridgewell/trace-mapping": { @@ -33951,16 +33888,11 @@ "common-shakeify": "^1.1.1", "minify-stream": "^2.0.1", "multisplice": "^1.0.0", - "terser": "3.16.1", + "terser": "^5.14.2", "through2": "^4.0.2", "unassertify": "^3.0.1" }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -33971,16 +33903,6 @@ "util-deprecate": "^1.0.1" } }, - "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" - } - }, "through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -34478,25 +34400,6 @@ "lodash": "^4.17.21", "minimist": "^1.2.8", "rxjs": "^7.8.2" - }, - "dependencies": { - "axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "optional": true, - "requires": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "optional": true - } } }, "watchpack": { diff --git a/frontend/package.json b/frontend/package.json index 29a78cb08..6b84d157e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -77,7 +77,7 @@ "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", - "@mempool/mempool.js": "2.3.0", + "@mempool/mempool.js": "github:mempool/mempool.js#v3.0.0-beta", "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", @@ -117,6 +117,9 @@ "mock-socket": "~9.3.1", "start-server-and-test": "~2.1.2" }, + "overrides": { + "terser": "^5.14.2" + }, "scarfSettings": { "enabled": false } From 546a65e7e417db9be8741532a069bb3e3ac1004e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 15 Nov 2025 10:27:18 +0000 Subject: [PATCH 512/534] fix mempool.js build --- frontend/package-lock.json | 358 +++++++++++++++++++++++++++++++++---- frontend/package.json | 13 +- 2 files changed, 334 insertions(+), 37 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 0c0c9f9e0..2d717c6bf 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -30,11 +30,12 @@ "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", - "browserify": "^17.0.0", + "browserify": "^17.0.1", "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.4.0", "esbuild": "^0.25.8", + "esmify": "^2.1.1", "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", @@ -2968,6 +2969,30 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", @@ -2998,6 +3023,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -8788,6 +8825,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/babel-plugin-import-to-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", + "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", + "license": "MIT", + "dependencies": { + "babel-template": "^6.26.0" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", @@ -8836,6 +8882,95 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-template/node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-template/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/babel-template/node_modules/babel-traverse": { + "name": "@babel/traverse", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "license": "MIT", + "bin": { + "babylon": "bin/babylon.js" + } + }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -9306,9 +9441,10 @@ } }, "node_modules/browserify": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", - "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.1.tgz", + "integrity": "sha512-pxhT00W3ylMhCHwG5yfqtZjNnFuX5h2IJdaBfSo4ChaaBsIp9VLrEMQ1bHV+Xr1uLPXuNDDM1GlJkjli0qkRsw==", + "license": "MIT", "dependencies": { "assert": "^1.4.0", "browser-pack": "^6.0.1", @@ -9326,7 +9462,7 @@ "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", - "has": "^1.0.0", + "hasown": "^2.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", @@ -10555,6 +10691,14 @@ "node": ">=10.13.0" } }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", @@ -12083,6 +12227,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esmify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", + "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.2.2", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "babel-plugin-import-to-require": "^1.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "^1.6.2", + "duplexer2": "^0.1.4", + "through2": "^2.0.5" + } + }, "node_modules/esniff": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", @@ -13412,17 +13574,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "license": "MIT" }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -14985,8 +15136,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "devOptional": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -17678,6 +17828,12 @@ "node": ">=4" } }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" + }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -19609,6 +19765,15 @@ } ] }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -22744,6 +22909,22 @@ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "requires": {} }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, "@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", @@ -22760,6 +22941,14 @@ "@babel/helper-plugin-utils": "^7.27.1" } }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, "@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -26247,6 +26436,14 @@ } } }, + "babel-plugin-import-to-require": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", + "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", + "requires": { + "babel-template": "^6.26.0" + } + }, "babel-plugin-polyfill-corejs2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", @@ -26281,6 +26478,80 @@ "@babel/helper-define-polyfill-provider": "^0.6.5" } }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "npm:@babel/traverse@^7.23.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "requires": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + } + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "babel-traverse": { + "version": "npm:@babel/traverse@7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "requires": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + } + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -26641,9 +26912,9 @@ } }, "browserify": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", - "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.1.tgz", + "integrity": "sha512-pxhT00W3ylMhCHwG5yfqtZjNnFuX5h2IJdaBfSo4ChaaBsIp9VLrEMQ1bHV+Xr1uLPXuNDDM1GlJkjli0qkRsw==", "requires": { "assert": "^1.4.0", "browser-pack": "^6.0.1", @@ -26661,7 +26932,7 @@ "duplexer2": "~0.1.2", "events": "^3.0.0", "glob": "^7.1.0", - "has": "^1.0.0", + "hasown": "^2.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", "inherits": "~2.0.1", @@ -27540,6 +27811,11 @@ } } }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, "core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", @@ -28670,6 +28946,23 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, + "esmify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", + "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", + "requires": { + "@babel/core": "^7.2.2", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "babel-plugin-import-to-require": "^1.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "^1.6.2", + "duplexer2": "^0.1.4", + "through2": "^2.0.5" + } + }, "esniff": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", @@ -29605,14 +29898,6 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -30685,8 +30970,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "devOptional": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -32595,6 +32879,11 @@ "regenerate": "^1.4.2" } }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -33950,6 +34239,11 @@ } } }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6b84d157e..4a0568956 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -36,9 +36,10 @@ "sync-assets": "rsync -av ./src/resources ./dist/mempool/browser && node sync-assets.js 'dist/mempool/browser/resources/'", "sync-assets-dev": "node sync-assets.js 'src/resources/'", "generate-config": "node generate-config.js", - "build-mempool.js": "npm run build-mempool-js && npm run build-mempool-liquid-js", - "build-mempool-js": "browserify -p tinyify ./node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.js", - "build-mempool-liquid-js": "browserify -p tinyify ./node_modules/@mempool/mempool.js/lib/index-liquid.js --standalone liquidJS > ./dist/mempool/browser/en-US/liquid.js", + "build-mempool.js": "npm run build-mempool-js", + "build-mempool-js": "browserify -p esmify node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.js | browserify -p tinyify -p esmify node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.min.js && npm run copy-mempool-js", + "build-mempool-liquid-js": "npm run build-mempool-js", + "copy-mempool-js": "cp ./dist/mempool/browser/en-US/mempool.js ./dist/mempool/browser/en-US/liquid.js && cp ./dist/mempool/browser/en-US/mempool.min.js ./dist/mempool/browser/en-US/liquid.min.js", "test": "npm run ng -- test", "lint": "./node_modules/.bin/eslint . --ext .ts", "lint:fix": "./node_modules/.bin/eslint . --ext .ts --fix", @@ -81,7 +82,8 @@ "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", - "browserify": "^17.0.0", + "browserify": "^17.0.1", + "esmify": "^2.1.1", "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.4.0", @@ -118,7 +120,8 @@ "start-server-and-test": "~2.1.2" }, "overrides": { - "terser": "^5.14.2" + "terser": "^5.14.2", + "babel-traverse": "npm:@babel/traverse@^7.23.2" }, "scarfSettings": { "enabled": false From 25b9d0dcf094b97ac256c9f9e502f967a9b19aaa Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 23 Nov 2025 05:29:54 +0000 Subject: [PATCH 513/534] update frontend glob --- frontend/package-lock.json | 267 ++++++++++--------------------------- frontend/package.json | 3 +- 2 files changed, 70 insertions(+), 200 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2d717c6bf..c188fe7f8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6451,35 +6451,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/package-json/node_modules/hosted-git-info": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", @@ -6507,21 +6478,6 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/promise-spawn": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", @@ -9847,15 +9803,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/cacache/node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -9865,47 +9812,12 @@ "node": ">=18" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/p-map": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -13323,11 +13235,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -13449,19 +13356,20 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -13499,6 +13407,30 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -14095,15 +14027,6 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -24891,7 +24814,7 @@ "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "requires": { "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", + "glob": "^10.5.0", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", @@ -24899,27 +24822,6 @@ "validate-npm-package-license": "^3.0.4" }, "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, "hosted-git-info": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", @@ -24937,14 +24839,6 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "requires": { - "brace-expansion": "^2.0.1" - } } } }, @@ -26931,7 +26825,7 @@ "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", "events": "^3.0.0", - "glob": "^7.1.0", + "glob": "^10.5.0", "hasown": "^2.0.0", "htmlescape": "^1.1.0", "https-browserify": "^1.0.0", @@ -27223,7 +27117,7 @@ "requires": { "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", - "glob": "^10.2.2", + "glob": "^10.5.0", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", @@ -27235,45 +27129,16 @@ "unique-filename": "^4.0.0" }, "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "requires": { - "balanced-match": "^1.0.0" - } - }, "chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, "lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, "p-map": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", @@ -29731,11 +29596,6 @@ "minipass": "^7.0.3" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -29815,16 +29675,34 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "glob-parent": { @@ -30243,15 +30121,6 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "optional": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -30701,7 +30570,7 @@ "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "glob": "^7.1.7", + "glob": "^10.5.0", "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", @@ -33025,7 +32894,7 @@ "optional": true, "peer": true, "requires": { - "glob": "^7.1.3" + "glob": "^10.5.0" } }, "ripemd160": { diff --git a/frontend/package.json b/frontend/package.json index 4a0568956..f05b4dbf3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -121,7 +121,8 @@ }, "overrides": { "terser": "^5.14.2", - "babel-traverse": "npm:@babel/traverse@^7.23.2" + "babel-traverse": "npm:@babel/traverse@^7.23.2", + "glob": "^10.5.0" }, "scarfSettings": { "enabled": false From 4f7ee18c74534239fa0b31917bc393b97aa6db75 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 26 Nov 2025 07:07:56 +0000 Subject: [PATCH 514/534] remove mempool-js build and deps from frontend --- frontend/package-lock.json | 4723 ++---------------------------------- frontend/package.json | 15 +- 2 files changed, 265 insertions(+), 4473 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c188fe7f8..1e7cd7b88 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -26,21 +26,17 @@ "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", - "@mempool/mempool.js": "github:mempool/mempool.js#v3.0.0-beta", "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", - "browserify": "^17.0.1", "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.4.0", "esbuild": "^0.25.8", - "esmify": "^2.1.1", "ngx-echarts": "~20.0.2", "ngx-infinite-scroll": "^20.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", - "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", "zone.js": "~0.15.1" @@ -577,6 +573,18 @@ } } }, + "node_modules/@angular-devkit/build-angular/node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@angular-devkit/build-angular/node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -739,6 +747,24 @@ "node": ">= 12" } }, + "node_modules/@angular-devkit/build-angular/node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@angular-devkit/build-webpack": { "version": "0.2003.8", "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.8.tgz", @@ -2969,30 +2995,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", @@ -3023,18 +3025,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -4072,89 +4062,6 @@ "node": ">=6.9.0" } }, - "node_modules/@browserify/envify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", - "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", - "dependencies": { - "acorn-node": "^2.0.1", - "dash-ast": "^2.0.1", - "multisplice": "^1.0.0", - "through2": "^4.0.2" - }, - "bin": { - "envify": "bin/envify" - } - }, - "node_modules/@browserify/envify/node_modules/acorn-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", - "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/@browserify/envify/node_modules/dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" - }, - "node_modules/@browserify/envify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@browserify/envify/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/@browserify/uglifyify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", - "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", - "dependencies": { - "convert-source-map": "^1.9.0", - "minimatch": "^3.0.2", - "terser": "^5.15.1", - "through2": "^4.0.2", - "xtend": "^4.0.1" - } - }, - "node_modules/@browserify/uglifyify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@browserify/uglifyify/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dependencies": { - "readable-stream": "3" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -4907,24 +4814,6 @@ "node": ">=6" } }, - "node_modules/@goto-bus-stop/common-shake": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", - "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", - "dependencies": { - "acorn-walk": "^7.0.0", - "debug": "^3.2.6", - "escope": "^3.6.0" - } - }, - "node_modules/@goto-bus-stop/common-shake/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/@hapi/address": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", @@ -5793,36 +5682,6 @@ "win32" ] }, - "node_modules/@mempool/mempool.js": { - "version": "3.0.0", - "resolved": "git+ssh://git@github.com/mempool/mempool.js.git#a27b4a61e813b2382f927659fae3c437b7369597", - "license": "MIT", - "dependencies": { - "axios": "1.13.2", - "ws": "^8.18.3" - } - }, - "node_modules/@mempool/mempool.js/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "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/@modelcontextprotocol/sdk": { "version": "1.17.3", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", @@ -8266,6 +8125,8 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8283,24 +8144,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -8414,14 +8257,6 @@ "node": ">= 14.0.0" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -8530,11 +8365,6 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, - "node_modules/array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -8545,31 +8375,6 @@ "safer-buffer": "~2.1.0" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -8580,19 +8385,6 @@ "node": ">=0.8" } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dependencies": { - "inherits": "2.0.1" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -8623,7 +8415,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true }, "node_modules/at-least-node": { "version": "1.0.0", @@ -8671,20 +8464,6 @@ "postcss": "^8.1.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -8707,6 +8486,7 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", "license": "MIT", + "optional": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -8717,7 +8497,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/babel-loader": { "version": "10.0.0", @@ -8781,15 +8562,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-import-to-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", - "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", - "license": "MIT", - "dependencies": { - "babel-template": "^6.26.0" - } - }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", @@ -8838,95 +8610,6 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-template/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/babel-template/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/babel-template/node_modules/babel-traverse": { - "name": "@babel/traverse", - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "license": "MIT", - "bin": { - "babylon": "bin/babylon.js" - } - }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -8949,7 +8632,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "optional": true }, "node_modules/base64id": { "version": "2.0.0", @@ -9031,11 +8715,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "optional": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -9122,6 +8801,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -9139,60 +8819,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dependencies": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-pack-flat": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.4.2.tgz", - "integrity": "sha512-TrUo6n2fGSOCYFAKkt/EkgenytAuuCI88fmXFA60aNFVHvz3CZEBTXYSvvXVpU6xpjM8lj/6vkC6Exn8KPjtPw==", - "dependencies": { - "combine-source-map": "^0.8.0", - "convert-source-map": "^1.5.1", - "count-lines": "^0.1.2", - "dedent": "^0.7.0", - "estree-is-member-expression": "^1.0.0", - "estree-is-require": "^1.0.0", - "esutils": "^2.0.2", - "JSONStream": "^1.3.2", - "path-parse": "^1.0.5", - "scope-analyzer": "^2.0.0", - "stream-combiner": "^0.2.2", - "through2": "^2.0.3", - "transform-ast": "^2.4.2", - "umd": "^3.0.3", - "wrap-comment": "^1.0.0" - }, - "bin": { - "browser-pack-flat": "cli.js" - } - }, - "node_modules/browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "dependencies": { - "resolve": "^1.17.0" - } - }, "node_modules/browser-sync": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", @@ -9383,277 +9009,6 @@ "node": ">=12" } }, - "node_modules/browser-unpack": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", - "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", - "dependencies": { - "acorn-node": "^1.5.2", - "concat-stream": "^1.5.0", - "minimist": "^1.1.1" - }, - "bin": { - "browser-unpack": "bin/cmd.js" - } - }, - "node_modules/browserify": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.1.tgz", - "integrity": "sha512-pxhT00W3ylMhCHwG5yfqtZjNnFuX5h2IJdaBfSo4ChaaBsIp9VLrEMQ1bHV+Xr1uLPXuNDDM1GlJkjli0qkRsw==", - "license": "MIT", - "dependencies": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.1", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^3.0.0", - "glob": "^7.1.0", - "hasown": "^2.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.2.1", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "^1.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum-object": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^3.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.12.0", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserify/node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/browserify/node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/browserify/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/browserify/node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/browserify/node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify/node_modules/stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/browserify/node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify/node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/browserify/node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "node_modules/browserify/node_modules/util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "node_modules/browserslist": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", @@ -9731,32 +9086,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "node_modules/bundle-collapser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", - "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", - "dependencies": { - "browser-pack": "^6.0.2", - "browser-unpack": "^1.1.0", - "concat-stream": "^1.5.0", - "falafel": "^2.1.0", - "minimist": "^1.1.1", - "through2": "^2.0.0" - }, - "bin": { - "bundle-collapser": "bin/cmd.js" - } - }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -9855,11 +9184,6 @@ "node": ">=18" } }, - "node_modules/cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" - }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -9869,23 +9193,6 @@ "node": ">=6" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -10086,37 +9393,6 @@ "node": ">=8" } }, - "node_modules/cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cipher-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -10258,39 +9534,11 @@ "node": ">=0.1.90" } }, - "node_modules/combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "node_modules/combine-source-map/node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "node_modules/combine-source-map/node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "node_modules/combine-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -10303,18 +9551,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "node_modules/common-shakeify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.1.tgz", - "integrity": "sha512-M9hTU14RkpKvNggSU4zJIzgm89inwjnhipxvKxCNms/gM77R7keRqOqGYIM/Jr4BBhtbZB8ZF//raYqAbHk/DA==", - "dependencies": { - "@goto-bus-stop/common-shake": "^2.3.0", - "convert-source-map": "^1.5.1", - "through2": "^2.0.3", - "transform-ast": "^2.4.3", - "wrap-comment": "^1.0.1" - } - }, "node_modules/common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", @@ -10401,21 +9637,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "devOptional": true }, "node_modules/connect": { "version": "3.6.6", @@ -10483,16 +9706,6 @@ "node": ">= 0.6" } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, "node_modules/content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", @@ -10603,14 +9816,6 @@ "node": ">=10.13.0" } }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true, - "license": "MIT" - }, "node_modules/core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", @@ -10666,53 +9871,6 @@ } } }, - "node_modules/count-lines": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", - "integrity": "sha1-4zST+2hgqC9xWdgjeEP7+u/uWWI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -10733,27 +9891,6 @@ "node": ">= 8" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, "node_modules/css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", @@ -11002,20 +10139,6 @@ "node": ">=14.14" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -11069,11 +10192,6 @@ "node": ">=0.10.0" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -11121,22 +10239,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -11149,15 +10251,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true, "engines": { "node": ">=0.4.0" } @@ -11175,29 +10273,6 @@ "node": ">= 0.8" } }, - "node_modules/deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "dependencies": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -11223,22 +10298,6 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "license": "MIT" }, - "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", @@ -11267,21 +10326,6 @@ "node": ">=0.3.1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/dijkstrajs": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", @@ -11326,15 +10370,6 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -11397,15 +10432,8 @@ "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dependencies": { - "readable-stream": "^2.0.2" - } + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "optional": true }, "node_modules/eastasianwidth": { "version": "0.2.0", @@ -11474,26 +10502,6 @@ "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==", "license": "ISC" }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -11547,6 +10555,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, "dependencies": { "once": "^1.4.0" } @@ -11723,6 +10732,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "optional": true, "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -11733,85 +10743,6 @@ "node": ">= 0.4" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "node_modules/es6-set/node_modules/es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/esbuild": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", @@ -11883,52 +10814,11 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "optional": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", - "dependencies": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/eslint": { "version": "9.39.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.0.tgz", @@ -12139,43 +11029,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esmify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", - "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.2.2", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "babel-plugin-import-to-require": "^1.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "^1.6.2", - "duplexer2": "^0.1.4", - "through2": "^2.0.5" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esniff/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -12220,18 +11073,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -12282,29 +11123,6 @@ "node": ">=4.0" } }, - "node_modules/estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" - }, - "node_modules/estree-is-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", - "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==" - }, - "node_modules/estree-is-member-expression": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", - "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==" - }, - "node_modules/estree-is-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", - "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", - "dependencies": { - "estree-is-identifier": "^1.0.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -12321,15 +11139,6 @@ "node": ">= 0.6" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "node_modules/event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -12394,15 +11203,6 @@ "node": ">=18.0.0" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -12524,23 +11324,27 @@ } }, "node_modules/express/node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -12579,15 +11383,19 @@ } }, "node_modules/express/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/media-typer": { @@ -12677,22 +11485,6 @@ "node": ">= 0.10" } }, - "node_modules/express/node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/express/node_modules/send": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", @@ -12753,19 +11545,6 @@ "node": ">= 0.6" } }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -12817,20 +11596,6 @@ "license": "MIT", "optional": true }, - "node_modules/falafel": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", - "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", - "dependencies": { - "acorn": "^7.1.1", - "foreach": "^2.0.5", - "isarray": "^2.0.1", - "object-keys": "^1.0.6" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -12864,11 +11629,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "node_modules/fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -13083,25 +11843,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -13144,6 +11885,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "optional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -13191,23 +11933,6 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "optional": true }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", - "integrity": "sha1-GCgrJ9CKJnyzAwzSuLSw8hKvdSo=", - "dependencies": { - "from2": "^2.0.3" - } - }, "node_modules/fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -13235,6 +11960,14 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC", + "optional": true, + "peer": true + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -13264,11 +11997,6 @@ "node": ">=6.9.0" } }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -13506,25 +12234,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "license": "MIT" }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -13534,17 +12243,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -13560,6 +12258,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "optional": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -13570,60 +12269,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -13662,16 +12307,6 @@ "node": ">= 0.4" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hosted-git-info": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", @@ -13705,14 +12340,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "engines": { - "node": ">=0.10" - } - }, "node_modules/htmlparser2": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", @@ -13850,11 +12477,6 @@ "node": ">=0.10" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -13926,7 +12548,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "optional": true }, "node_modules/ignore": { "version": "7.0.5", @@ -14027,6 +12650,19 @@ "node": ">=8" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -14041,42 +12677,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dependencies": { - "source-map": "~0.5.3" - } - }, - "node_modules/inline-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/insert-module-globals": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "dependencies": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, "node_modules/ip-address": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", @@ -14095,21 +12695,6 @@ "node": ">= 0.10" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -14126,22 +12711,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -14188,17 +12757,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -14335,20 +12893,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -14389,11 +12933,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -14642,21 +13181,6 @@ "node >= 0.2.0" ] }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -14782,6 +13306,29 @@ "ms": "2.0.0" } }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/karma/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14819,15 +13366,6 @@ "node": ">=0.10.0" } }, - "node_modules/labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "dependencies": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, "node_modules/launch-editor": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", @@ -15059,7 +13597,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -15263,16 +13802,6 @@ "node": ">= 0.4" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -15345,23 +13874,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/mime": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", @@ -15435,74 +13947,16 @@ "webpack": "^5.0.0" } }, - "node_modules/minify-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", - "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", - "dependencies": { - "concat-stream": "^2.0.0", - "convert-source-map": "^1.5.0", - "duplexify": "^4.1.1", - "from2-string": "^1.1.0", - "terser": "^4.7.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minify-stream/node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/minify-stream/node_modules/duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/minify-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15514,6 +13968,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15659,11 +14114,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/mock-socket": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", @@ -15673,34 +14123,6 @@ "node": ">= 8" } }, - "node_modules/module-deps": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "dependencies": { - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -15747,25 +14169,6 @@ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" } }, - "node_modules/multi-stage-sourcemap": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", - "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", - "dependencies": { - "source-map": "^0.1.34" - } - }, - "node_modules/multi-stage-sourcemap/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -15779,11 +14182,6 @@ "multicast-dns": "cli.js" } }, - "node_modules/multisplice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", - "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" - }, "node_modules/mute-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", @@ -15793,81 +14191,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/mutexify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.3.1.tgz", - "integrity": "sha512-nU7mOEuaXiQIB/EgTIjYZJ7g8KqMm2D8l4qp+DqA4jxWOb/tnb1KEoqp+tlbdQIDIAiC1i7j7X/3yHDFXLxr9g==" - }, - "node_modules/nanobench": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", - "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", - "dependencies": { - "browser-process-hrtime": "^0.1.2", - "chalk": "^1.1.3", - "mutexify": "^1.1.0", - "pretty-hrtime": "^1.0.2" - }, - "bin": { - "nanobench": "run.js", - "nanobench-compare": "compare.js" - } - }, - "node_modules/nanobench/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanobench/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanobench/node_modules/browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" - }, - "node_modules/nanobench/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanobench/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanobench/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -15936,11 +14259,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "node_modules/ngx-echarts": { "version": "20.0.2", "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-20.0.2.tgz", @@ -16387,14 +14705,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -16692,11 +15002,6 @@ "license": "MIT", "optional": true }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -16861,11 +15166,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -16877,26 +15177,6 @@ "node": ">=6" } }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -17005,6 +15285,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -17022,14 +15304,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -17080,69 +15354,6 @@ "through": "~2.3" } }, - "node_modules/pbkdf2": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", - "dependencies": { - "create-hash": "~1.1.3", - "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" - } - }, - "node_modules/pbkdf2/node_modules/hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", - "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -17245,14 +15456,6 @@ "lodash": "^4.17.14" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -17432,14 +15635,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/proc-log": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", @@ -17453,6 +15648,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "optional": true, "engines": { "node": ">= 0.6.0" } @@ -17516,24 +15712,6 @@ "node": ">= 0.10" } }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -17614,23 +15792,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -17658,15 +15819,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -17689,14 +15841,6 @@ "node": ">= 0.8" } }, - "node_modules/read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -17751,12 +15895,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "license": "MIT" - }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -17949,13 +16087,27 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "peer": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { @@ -18251,20 +16403,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/scope-analyzer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.1.tgz", - "integrity": "sha512-azEAihtQ9mEyZGhfgTJy3IbOWEzeOrYbg7NcYEshPKnKd+LZmC3TNd5dmDxbLBsTG/JVWmCp+vDJ03vJjeXMHg==", - "dependencies": { - "array-from": "^2.1.1", - "dash-ast": "^1.0.0", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -18476,65 +16614,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sha.js/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -18547,14 +16631,6 @@ "node": ">=8" } }, - "node_modules/shasum-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "dependencies": { - "fast-safe-stringify": "^2.0.7" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18681,25 +16757,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/sinon": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", @@ -18913,11 +16970,6 @@ "source-map": "^0.6.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, "node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -19120,38 +17172,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, "node_modules/stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", @@ -19265,14 +17285,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dependencies": { - "minimist": "^1.1.0" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -19297,14 +17309,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dependencies": { - "acorn-node": "^1.2.0" - } - }, "node_modules/systeminformation": { "version": "5.27.7", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", @@ -19526,16 +17530,8 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "optional": true }, "node_modules/thunky": { "version": "1.1.0", @@ -19593,44 +17589,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tinyify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", - "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", - "dependencies": { - "@browserify/envify": "^6.0.0", - "@browserify/uglifyify": "^6.0.0", - "browser-pack-flat": "^3.0.9", - "bundle-collapser": "^1.3.0", - "common-shakeify": "^1.1.1", - "minify-stream": "^2.0.1", - "multisplice": "^1.0.0", - "terser": "3.16.1", - "through2": "^4.0.2", - "unassertify": "^3.0.1" - } - }, - "node_modules/tinyify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tinyify/node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dependencies": { - "readable-stream": "3" - } - }, "node_modules/tldts": { "version": "6.1.86", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", @@ -19656,47 +17614,6 @@ "resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.9.tgz", "integrity": "sha512-5QOBAvDxZZwW1i+2YXMgF6/PuV/KhA0LyE9PyVi8Ywr3bfIPziZcQD+RpdJaQurCU8zIGtBo/XuPCEHdvyeFuQ==" }, - "node_modules/to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-buffer/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19729,66 +17646,6 @@ "node": ">=16" } }, - "node_modules/transform-ast": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", - "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", - "dependencies": { - "acorn-node": "^1.3.0", - "convert-source-map": "^1.5.1", - "dash-ast": "^1.0.0", - "is-buffer": "^2.0.0", - "magic-string": "^0.23.2", - "merge-source-map": "1.0.4", - "nanobench": "^2.1.1" - } - }, - "node_modules/transform-ast/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/transform-ast/node_modules/magic-string": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", - "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", - "dependencies": { - "sourcemap-codec": "^1.4.1" - } - }, - "node_modules/transform-ast/node_modules/merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/transform-ast/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/tree-dump": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", @@ -19953,11 +17810,6 @@ "license": "Unlicense", "optional": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -20004,29 +17856,11 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/typed-assert": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -20060,69 +17894,6 @@ "node": "*" } }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "bin": { - "umd": "bin/cli.js" - } - }, - "node_modules/unassert": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", - "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", - "dependencies": { - "estraverse": "^5.0.0" - } - }, - "node_modules/unassert/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/unassertify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", - "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", - "dependencies": { - "acorn": "^8.0.0", - "convert-source-map": "^1.1.1", - "escodegen": "^2.0.0", - "multi-stage-sourcemap": "^0.3.1", - "through": "^2.3.7", - "unassert": "^2.0.0" - } - }, - "node_modules/unassertify/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dependencies": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" - } - }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -20257,20 +18028,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -20340,11 +18097,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -20869,26 +18621,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -20936,11 +18668,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-comment": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", - "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==" - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -21000,14 +18727,6 @@ "node": ">=0.4.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", @@ -21468,7 +19187,7 @@ "semver": "7.7.2", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "^5.14.2", + "terser": "5.43.1", "tree-kill": "1.2.2", "tslib": "2.8.1", "webpack": "5.101.2", @@ -21491,6 +19210,11 @@ "source-map": "0.7.6" } }, + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" + }, "ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -21582,6 +19306,17 @@ "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==" + }, + "terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } } } }, @@ -22832,22 +20567,6 @@ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "requires": {} }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, "@babel/plugin-syntax-import-assertions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", @@ -22864,14 +20583,6 @@ "@babel/helper-plugin-utils": "^7.27.1" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, "@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", @@ -23504,84 +21215,6 @@ "@babel/helper-validator-identifier": "^7.28.5" } }, - "@browserify/envify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@browserify/envify/-/envify-6.0.0.tgz", - "integrity": "sha512-ovxHR0KTsRCyMNwD7MGV0+VCU1sT6Ds+itC4DaQHM41eUId+w5Jd0qlhLVoDkkIVBnkY3BAAM8yb2QfpBlHkPw==", - "requires": { - "acorn-node": "^2.0.1", - "dash-ast": "^2.0.1", - "multisplice": "^1.0.0", - "through2": "^4.0.2" - }, - "dependencies": { - "acorn-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-2.0.1.tgz", - "integrity": "sha512-VLR5sHqjk+8c5hrKeP2fWaIHb8eewsoxnZ8r2qpwRHXMHuC7KyOPflnOx9dLssVQUurzJ7rO0OzIFjHcndafWw==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "dash-ast": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", - "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - } - } - }, - "@browserify/uglifyify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@browserify/uglifyify/-/uglifyify-6.0.0.tgz", - "integrity": "sha512-48M2a3novsgKhUSo/B3ja10awc7unliK1HfW6aYBJdLFQj3wXDx9BBJVfj6MVYERSQVEVjNHQQ7IK89h4MpCLw==", - "requires": { - "convert-source-map": "^1.9.0", - "minimatch": "^3.0.2", - "terser": "^5.14.2", - "through2": "^4.0.2", - "xtend": "^4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - } - } - }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -23980,26 +21613,6 @@ "@fortawesome/fontawesome-common-types": "6.7.2" } }, - "@goto-bus-stop/common-shake": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@goto-bus-stop/common-shake/-/common-shake-2.4.0.tgz", - "integrity": "sha512-LO+7v+UbxE3IyAS4Suf/KYB7Zq9DEIHibwDe6Wph4apNEfDyyxP7BSxzRS/Qa9lUH5gsm9eL9nF8EE1E0/nQkQ==", - "requires": { - "acorn-walk": "^7.0.0", - "debug": "^3.2.6", - "escope": "^3.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "@hapi/address": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", @@ -24476,22 +22089,6 @@ "integrity": "sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g==", "optional": true }, - "@mempool/mempool.js": { - "version": "git+ssh://git@github.com/mempool/mempool.js.git#a27b4a61e813b2382f927659fae3c437b7369597", - "from": "@mempool/mempool.js@github:mempool/mempool.js#v3.0.0-beta", - "requires": { - "axios": "1.13.2", - "ws": "^8.18.3" - }, - "dependencies": { - "ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "requires": {} - } - } - }, "@modelcontextprotocol/sdk": { "version": "1.17.3", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", @@ -24814,7 +22411,7 @@ "integrity": "sha512-rCNLSB/JzNvot0SEyXqWZ7tX2B5dD2a1br2Dp0vSYVo5jh8Z0EZ7lS9TsZ1UtziddB1UfNUaMCc538/HztnJGA==", "requires": { "@npmcli/git": "^6.0.0", - "glob": "^10.5.0", + "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", "proc-log": "^5.0.0", @@ -25980,7 +23577,9 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -25989,21 +23588,6 @@ "dev": true, "requires": {} }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - }, "adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -26086,11 +23670,6 @@ "@algolia/requester-node-http": "5.35.0" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" - }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -26154,11 +23733,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" - }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -26168,48 +23742,6 @@ "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -26237,7 +23769,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "optional": true }, "at-least-node": { "version": "1.0.0", @@ -26258,14 +23791,6 @@ "postcss-value-parser": "^4.2.0" } }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -26282,6 +23807,7 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "optional": true, "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", @@ -26291,7 +23817,8 @@ "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "optional": true } } }, @@ -26330,14 +23857,6 @@ } } }, - "babel-plugin-import-to-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-import-to-require/-/babel-plugin-import-to-require-1.0.0.tgz", - "integrity": "sha512-dc843CwrFivjO8AVgxcHvxl0cb7J7Ed8ZGFP8+PjH3X1CnyzYtAU1WL1349m9Wc/+oqk4ETx2+cIEO2jlp3XyQ==", - "requires": { - "babel-template": "^6.26.0" - } - }, "babel-plugin-polyfill-corejs2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", @@ -26372,80 +23891,6 @@ "@babel/helper-define-polyfill-provider": "^0.6.5" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "npm:@babel/traverse@^7.23.2", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "requires": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - } - }, - "@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "babel-traverse": { - "version": "npm:@babel/traverse@7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "requires": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - } - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -26454,7 +23899,8 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "optional": true }, "base64id": { "version": "2.0.0", @@ -26518,11 +23964,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "optional": true }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, "body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -26589,6 +24030,7 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -26602,54 +24044,6 @@ "fill-range": "^7.1.1" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "requires": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - } - }, - "browser-pack-flat": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.4.2.tgz", - "integrity": "sha512-TrUo6n2fGSOCYFAKkt/EkgenytAuuCI88fmXFA60aNFVHvz3CZEBTXYSvvXVpU6xpjM8lj/6vkC6Exn8KPjtPw==", - "requires": { - "combine-source-map": "^0.8.0", - "convert-source-map": "^1.5.1", - "count-lines": "^0.1.2", - "dedent": "^0.7.0", - "estree-is-member-expression": "^1.0.0", - "estree-is-require": "^1.0.0", - "esutils": "^2.0.2", - "JSONStream": "^1.3.2", - "path-parse": "^1.0.5", - "scope-analyzer": "^2.0.0", - "stream-combiner": "^0.2.2", - "through2": "^2.0.3", - "transform-ast": "^2.4.2", - "umd": "^3.0.3", - "wrap-comment": "^1.0.0" - } - }, - "browser-resolve": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", - "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", - "requires": { - "resolve": "^1.17.0" - } - }, "browser-sync": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", @@ -26795,246 +24189,6 @@ "stream-throttle": "^0.1.3" } }, - "browser-unpack": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/browser-unpack/-/browser-unpack-1.4.2.tgz", - "integrity": "sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==", - "requires": { - "acorn-node": "^1.5.2", - "concat-stream": "^1.5.0", - "minimist": "^1.1.1" - } - }, - "browserify": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.1.tgz", - "integrity": "sha512-pxhT00W3ylMhCHwG5yfqtZjNnFuX5h2IJdaBfSo4ChaaBsIp9VLrEMQ1bHV+Xr1uLPXuNDDM1GlJkjli0qkRsw==", - "requires": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^2.0.0", - "browserify-zlib": "~0.2.0", - "buffer": "~5.2.1", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.1", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^3.0.0", - "glob": "^10.5.0", - "hasown": "^2.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.2.1", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp-classic": "^0.5.2", - "module-deps": "^6.2.3", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "^1.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum-object": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^3.0.0", - "stream-http": "^3.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.12.0", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-http": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", - "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "~0.11.0" - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "requires": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, "browserslist": { "version": "4.27.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", @@ -27074,29 +24228,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bundle-collapser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/bundle-collapser/-/bundle-collapser-1.4.0.tgz", - "integrity": "sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==", - "requires": { - "browser-pack": "^6.0.2", - "browser-unpack": "^1.1.0", - "concat-stream": "^1.5.0", - "falafel": "^2.1.0", - "minimist": "^1.1.1", - "through2": "^2.0.0" - } - }, "bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", @@ -27117,7 +24248,7 @@ "requires": { "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", - "glob": "^10.5.0", + "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", "minipass-collect": "^2.0.1", @@ -27163,28 +24294,12 @@ } } }, - "cached-path-relative": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", - "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==" - }, "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "optional": true }, - "call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "requires": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - } - }, "call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -27308,22 +24423,6 @@ "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", "optional": true }, - "cipher-base": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -27423,38 +24522,11 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "optional": true }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - }, - "dependencies": { - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -27464,18 +24536,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, - "common-shakeify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/common-shakeify/-/common-shakeify-1.1.1.tgz", - "integrity": "sha512-M9hTU14RkpKvNggSU4zJIzgm89inwjnhipxvKxCNms/gM77R7keRqOqGYIM/Jr4BBhtbZB8ZF//raYqAbHk/DA==", - "requires": { - "@goto-bus-stop/common-shake": "^2.3.0", - "convert-source-map": "^1.5.1", - "through2": "^2.0.3", - "transform-ast": "^2.4.3", - "wrap-comment": "^1.0.1" - } - }, "common-tags": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", @@ -27532,18 +24592,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "devOptional": true }, "connect": { "version": "3.6.6", @@ -27601,16 +24651,6 @@ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "devOptional": true }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, "content-disposition": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", @@ -27676,11 +24716,6 @@ } } }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, "core-js-compat": { "version": "3.46.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", @@ -27714,52 +24749,6 @@ "parse-json": "^5.2.0" } }, - "count-lines": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/count-lines/-/count-lines-0.1.2.tgz", - "integrity": "sha1-4zST+2hgqC9xWdgjeEP7+u/uWWI=" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -27776,24 +24765,6 @@ "which": "^2.0.1" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", @@ -27968,20 +24939,6 @@ "integrity": "sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==", "optional": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -28017,11 +24974,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - }, "deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -28051,30 +25003,16 @@ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==" }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, "define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "optional": true }, "delegate": { "version": "3.2.0", @@ -28086,26 +25024,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "deps-sort": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", - "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", - "requires": { - "JSONStream": "^1.0.3", - "shasum-object": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -28122,16 +25040,6 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, "dev-ip": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", @@ -28151,23 +25059,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "dijkstrajs": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", @@ -28204,11 +25095,6 @@ "entities": "^4.2.0" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, "domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -28250,15 +25136,8 @@ "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "optional": true }, "eastasianwidth": { "version": "0.2.0", @@ -28319,27 +25198,6 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.244.tgz", "integrity": "sha512-OszpBN7xZX4vWMPJwB9illkN/znA8M36GQqQxi6MNy9axWxhOfJyZZJtSLQCpEFLHP2xK33BiWx9aIuIEXVCcw==" }, - "elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -28384,6 +25242,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "optional": true, "requires": { "once": "^1.4.0" } @@ -28515,6 +25374,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "optional": true, "requires": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -28522,83 +25382,6 @@ "hasown": "^2.0.2" } }, - "es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "esbuild": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", @@ -28650,36 +25433,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "optional": true }, "eslint": { "version": "9.39.0", @@ -28811,41 +25566,6 @@ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, - "esmify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/esmify/-/esmify-2.1.1.tgz", - "integrity": "sha512-GyOVgjG7sNyYB5Mbo15Ll4aGrcXZzZ3LI22rbLOjCI7L/wYelzQpBHRZkZkqbPNZ/QIRilcaHqzgNCLcEsi1lQ==", - "requires": { - "@babel/core": "^7.2.2", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "babel-plugin-import-to-require": "^1.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "^1.6.2", - "duplexer2": "^0.1.4", - "through2": "^2.0.5" - } - }, - "esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "requires": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, "espree": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", @@ -28871,11 +25591,6 @@ } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, "esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -28913,29 +25628,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, - "estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" - }, - "estree-is-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-identifier/-/estree-is-identifier-1.0.0.tgz", - "integrity": "sha512-2BDRGrkQJV/NhCAmmE33A35WAaxq3WQaGHgQuD//7orGWfpFqj8Srkwvx0TH+20yIdOF1yMQwi8anv5ISec2AQ==" - }, - "estree-is-member-expression": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-member-expression/-/estree-is-member-expression-1.0.0.tgz", - "integrity": "sha512-Ec+X44CapIGExvSZN+pGkmr5p7HwUVQoPQSd458Lqwvaf4/61k/invHSh4BYK8OXnCkfEhWuIoG5hayKLQStIg==" - }, - "estree-is-require": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-require/-/estree-is-require-1.0.0.tgz", - "integrity": "sha512-oWxQdSEmnUwNZsDQYiBNpVxKEhMmsJQSSxnDrwsr1MWtooCLfhgzsNGzmokdmfK0EzEIS5V4LPvqxv1Kmb1vvA==", - "requires": { - "estree-is-identifier": "^1.0.0" - } - }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -28946,15 +25638,6 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", @@ -29010,15 +25693,6 @@ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==" }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -29102,19 +25776,19 @@ } }, "body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "requires": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" } }, "debug": { @@ -29136,9 +25810,9 @@ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" }, "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -29196,16 +25870,6 @@ "http-errors": "2.0.0", "iconv-lite": "0.7.0", "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } } }, "send": { @@ -29260,21 +25924,6 @@ "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "requires": {} }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==" - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -29310,17 +25959,6 @@ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "optional": true }, - "falafel": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", - "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", - "requires": { - "acorn": "^7.1.1", - "foreach": "^2.0.5", - "isarray": "^2.0.1", - "object-keys": "^1.0.6" - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -29349,11 +25987,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" - }, "fast-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", @@ -29491,19 +26124,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, - "for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "requires": { - "is-callable": "^1.2.7" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -29530,6 +26150,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "optional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -29559,23 +26180,6 @@ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "optional": true }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "from2-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/from2-string/-/from2-string-1.1.0.tgz", - "integrity": "sha1-GCgrJ9CKJnyzAwzSuLSw8hKvdSo=", - "requires": { - "from2": "^2.0.3" - } - }, "fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -29596,6 +26200,13 @@ "minipass": "^7.0.3" } }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "optional": true, + "peer": true + }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -29612,11 +26223,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -29776,34 +26382,11 @@ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - } - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { - "es-define-property": "^1.0.0" - } - }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -29813,46 +26396,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "optional": true, "requires": { "has-symbols": "^1.0.3" } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -29879,16 +26427,6 @@ "function-bind": "^1.1.2" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "hosted-git-info": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", @@ -29915,11 +26453,6 @@ "wbuf": "^1.1.0" } }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" - }, "htmlparser2": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", @@ -30014,11 +26547,6 @@ "sshpk": "^1.18.0" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, "https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -30056,7 +26584,8 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "optional": true }, "ignore": { "version": "7.0.5", @@ -30121,6 +26650,17 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "optional": true }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "optional": true, + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -30131,38 +26671,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==" }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "requires": { - "source-map": "~0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "insert-module-globals": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", - "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", - "requires": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - } - }, "ip-address": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", @@ -30173,15 +26681,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -30195,16 +26694,6 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, "is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -30228,11 +26717,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==" - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -30313,14 +26797,6 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "optional": true }, - "is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "requires": { - "which-typed-array": "^1.1.16" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -30346,11 +26822,6 @@ "is-inside-container": "^1.0.0" } }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -30529,15 +27000,6 @@ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -30570,7 +27032,7 @@ "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "glob": "^10.5.0", + "glob": "^7.1.7", "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.8", @@ -30642,6 +27104,21 @@ } } }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -30680,15 +27157,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, - "labeled-stream-splicer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", - "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", - "requires": { - "inherits": "^2.0.1", - "stream-splicer": "^2.0.0" - } - }, "launch-editor": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", @@ -30839,7 +27307,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "devOptional": true }, "lodash.debounce": { "version": "4.0.8", @@ -31002,16 +27471,6 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -31059,22 +27518,6 @@ "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "mime": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", @@ -31115,67 +27558,16 @@ "tapable": "^2.2.1" } }, - "minify-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minify-stream/-/minify-stream-2.1.0.tgz", - "integrity": "sha512-P5xE4EQRkn7Td54VGcgfDMFx1jmKPPIXCdcMfrbXS6cNHK4dO1LXwtYFb48hHrSmZfT+jlGImvHgSZEkbpNtCw==", - "requires": { - "concat-stream": "^2.0.0", - "convert-source-map": "^1.5.0", - "duplexify": "^4.1.1", - "from2-string": "^1.1.0", - "terser": "^5.14.2", - "xtend": "^4.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -31183,7 +27575,8 @@ "minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "optional": true }, "minipass": { "version": "7.1.2", @@ -31287,39 +27680,12 @@ "minimist": "^1.2.5" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "mock-socket": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", "optional": true }, - "module-deps": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", - "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", - "requires": { - "browser-resolve": "^2.0.0", - "cached-path-relative": "^1.0.2", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.2.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, "mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -31354,24 +27720,6 @@ "node-gyp-build-optional-packages": "5.2.2" } }, - "multi-stage-sourcemap": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", - "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", - "requires": { - "source-map": "^0.1.34" - }, - "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", @@ -31381,74 +27729,11 @@ "thunky": "^1.0.2" } }, - "multisplice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/multisplice/-/multisplice-1.0.0.tgz", - "integrity": "sha512-KU5tVjIdTGsMb92JlWwEZCGrvtI1ku9G9GuNbWdQT/Ici1ztFXX0L8lWpbbC3pISVMfBNL56wdqplHvva2XSlA==" - }, "mute-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==" }, - "mutexify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mutexify/-/mutexify-1.3.1.tgz", - "integrity": "sha512-nU7mOEuaXiQIB/EgTIjYZJ7g8KqMm2D8l4qp+DqA4jxWOb/tnb1KEoqp+tlbdQIDIAiC1i7j7X/3yHDFXLxr9g==" - }, - "nanobench": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nanobench/-/nanobench-2.1.1.tgz", - "integrity": "sha512-z+Vv7zElcjN+OpzAxAquUayFLGK3JI/ubCl0Oh64YQqsTGG09CGqieJVQw4ui8huDnnAgrvTv93qi5UaOoNj8A==", - "requires": { - "browser-process-hrtime": "^0.1.2", - "chalk": "^1.1.3", - "mutexify": "^1.1.0", - "pretty-hrtime": "^1.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, "nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -31491,11 +27776,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, "ngx-echarts": { "version": "20.0.2", "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-20.0.2.tgz", @@ -31821,11 +28101,6 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -32012,11 +28287,6 @@ "integrity": "sha512-IQh2aMfMIDbPjI/8a3Edr+PiOpcsB7yo8NdW7aHWVaoR/pcDldunMvnnwbk/auPGqmKeAdxtZl7MHX/QmPwhvQ==", "optional": true }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, "ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -32135,11 +28405,6 @@ } } }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -32148,26 +28413,6 @@ "callsites": "^3.0.0" } }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -32237,7 +28482,9 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "optional": true, + "peer": true }, "path-key": { "version": "3.1.1", @@ -32249,11 +28496,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" - }, "path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -32290,54 +28532,6 @@ "through": "~2.3" } }, - "pbkdf2": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", - "requires": { - "create-hash": "~1.1.3", - "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" - }, - "dependencies": { - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", - "requires": { - "inherits": "^2.0.1" - } - }, - "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", - "requires": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -32411,11 +28605,6 @@ } } }, - "possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" - }, "postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -32505,11 +28694,6 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "optional": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" - }, "proc-log": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", @@ -32518,7 +28702,8 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "optional": true }, "process-nextick-args": { "version": "2.0.1", @@ -32564,26 +28749,6 @@ "event-stream": "=3.3.4" } }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -32645,16 +28810,6 @@ "side-channel": "^1.0.6" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -32668,15 +28823,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -32693,14 +28839,6 @@ "unpipe": "1.0.0" } }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "requires": { - "readable-stream": "^2.0.2" - } - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -32748,11 +28886,6 @@ "regenerate": "^1.4.2" } }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -32894,16 +29027,24 @@ "optional": true, "peer": true, "requires": { - "glob": "^10.5.0" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "optional": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "rollup": { @@ -33083,20 +29224,6 @@ } } }, - "scope-analyzer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.1.tgz", - "integrity": "sha512-azEAihtQ9mEyZGhfgTJy3IbOWEzeOrYbg7NcYEshPKnKd+LZmC3TNd5dmDxbLBsTG/JVWmCp+vDJ03vJjeXMHg==", - "requires": { - "array-from": "^2.1.1", - "dash-ast": "^1.0.0", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } - }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -33273,41 +29400,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -33316,14 +29413,6 @@ "kind-of": "^6.0.2" } }, - "shasum-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", - "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", - "requires": { - "fast-safe-stringify": "^2.0.7" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -33405,11 +29494,6 @@ "@sigstore/verify": "^2.1.0" } }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, "sinon": { "version": "17.0.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", @@ -33569,11 +29653,6 @@ "source-map": "^0.6.0" } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, "spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -33722,38 +29801,6 @@ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==" }, - "stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "requires": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", - "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, "stream-throttle": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", @@ -33832,14 +29879,6 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "requires": { - "minimist": "^1.1.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -33854,14 +29893,6 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "requires": { - "acorn-node": "^1.2.0" - } - }, "systeminformation": { "version": "5.27.7", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.7.tgz", @@ -33962,7 +29993,7 @@ "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "serialize-javascript": "^6.0.2", - "terser": "^5.14.2" + "terser": "^5.31.1" }, "dependencies": { "@jridgewell/trace-mapping": { @@ -33991,16 +30022,8 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "optional": true }, "thunky": { "version": "1.1.0", @@ -34034,43 +30057,6 @@ } } }, - "tinyify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tinyify/-/tinyify-4.0.0.tgz", - "integrity": "sha512-jNDxImwUrJJAU2NyGG144J8aWx2ni39UuBo7ppCXFRmhSH0CbpWL4HgjNvrsAW05WQAgNZePwAlEemNuB+byaA==", - "requires": { - "@browserify/envify": "^6.0.0", - "@browserify/uglifyify": "^6.0.0", - "browser-pack-flat": "^3.0.9", - "bundle-collapser": "^1.3.0", - "common-shakeify": "^1.1.1", - "minify-stream": "^2.0.1", - "multisplice": "^1.0.0", - "terser": "^5.14.2", - "through2": "^4.0.2", - "unassertify": "^3.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "requires": { - "readable-stream": "3" - } - } - } - }, "tldts": { "version": "6.1.86", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", @@ -34091,28 +30077,6 @@ "resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.9.tgz", "integrity": "sha512-5QOBAvDxZZwW1i+2YXMgF6/PuV/KhA0LyE9PyVi8Ywr3bfIPziZcQD+RpdJaQurCU8zIGtBo/XuPCEHdvyeFuQ==" }, - "to-buffer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", - "requires": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -34135,48 +30099,6 @@ "tldts": "^6.1.32" } }, - "transform-ast": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", - "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", - "requires": { - "acorn-node": "^1.3.0", - "convert-source-map": "^1.5.1", - "dash-ast": "^1.0.0", - "is-buffer": "^2.0.0", - "magic-string": "^0.23.2", - "merge-source-map": "1.0.4", - "nanobench": "^2.1.1" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "magic-string": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.23.2.tgz", - "integrity": "sha512-oIUZaAxbcxYIp4AyLafV6OVKoB3YouZs0UTCJ8mOKBHNyJgGDaMJ4TgA+VylJh6fx7EQCC52XkbURxxG9IoJXA==", - "requires": { - "sourcemap-codec": "^1.4.1" - } - }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, "tree-dump": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", @@ -34275,11 +30197,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "optional": true }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -34310,26 +30227,11 @@ "mime-types": "~2.1.24" } }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - } - }, "typed-assert": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -34342,58 +30244,6 @@ "optional": true, "peer": true }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" - }, - "unassert": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unassert/-/unassert-2.0.2.tgz", - "integrity": "sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==", - "requires": { - "estraverse": "^5.0.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "unassertify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unassertify/-/unassertify-3.0.1.tgz", - "integrity": "sha512-461ykSPY3oWU+39J5haiq7S/hcYy1oGJ2nHU92lqdL3jft+pSU6oAbb7o6VVmM7nZGLqppszgyzfpCnRBFgFtw==", - "requires": { - "acorn": "^8.0.0", - "convert-source-map": "^1.1.1", - "escodegen": "^2.0.0", - "multi-stage-sourcemap": "^0.3.1", - "through": "^2.3.7", - "unassert": "^2.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==" - } - } - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, "undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -34473,22 +30323,6 @@ "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -34540,11 +30374,6 @@ "extsprintf": "^1.2.0" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -34876,20 +30705,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, - "which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - } - }, "wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -34921,11 +30736,6 @@ "strip-ansi": "^6.0.0" } }, - "wrap-comment": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrap-comment/-/wrap-comment-1.0.1.tgz", - "integrity": "sha512-APccrMwl/ont0RHFTXNAQfM647duYYEfs6cngrIyTByTI0xbWnDnPSptFZhS68L4WCjt2ZxuhCFwuY6Pe88KZQ==" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -34957,11 +30767,6 @@ "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "devOptional": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index f05b4dbf3..1ebe46b05 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,14 +32,10 @@ "start:local-esplora": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-esplora", "start:local-prod": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-prod", "start:mixed": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c mixed", - "build": "npm run generate-config && npm run ng -- build --configuration production --localize && npm run sync-assets-dev && npm run sync-assets && npm run build-mempool.js", + "build": "npm run generate-config && npm run ng -- build --configuration production --localize && npm run sync-assets-dev && npm run sync-assets", "sync-assets": "rsync -av ./src/resources ./dist/mempool/browser && node sync-assets.js 'dist/mempool/browser/resources/'", "sync-assets-dev": "node sync-assets.js 'src/resources/'", "generate-config": "node generate-config.js", - "build-mempool.js": "npm run build-mempool-js", - "build-mempool-js": "browserify -p esmify node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.js | browserify -p tinyify -p esmify node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.min.js && npm run copy-mempool-js", - "build-mempool-liquid-js": "npm run build-mempool-js", - "copy-mempool-js": "cp ./dist/mempool/browser/en-US/mempool.js ./dist/mempool/browser/en-US/liquid.js && cp ./dist/mempool/browser/en-US/mempool.min.js ./dist/mempool/browser/en-US/liquid.min.js", "test": "npm run ng -- test", "lint": "./node_modules/.bin/eslint . --ext .ts", "lint:fix": "./node_modules/.bin/eslint . --ext .ts --fix", @@ -78,12 +74,9 @@ "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", "@fortawesome/free-solid-svg-icons": "~6.7.2", - "@mempool/mempool.js": "github:mempool/mempool.js#v3.0.0-beta", "@ng-bootstrap/ng-bootstrap": "^19.0.0", "@types/qrcode": "~1.5.0", "bootstrap": "~4.6.2", - "browserify": "^17.0.1", - "esmify": "^2.1.1", "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.4.0", @@ -92,7 +85,6 @@ "qrcode": "1.5.1", "rxjs": "~7.8.1", "esbuild": "^0.25.8", - "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.8.0", "zone.js": "~0.15.1" @@ -119,11 +111,6 @@ "mock-socket": "~9.3.1", "start-server-and-test": "~2.1.2" }, - "overrides": { - "terser": "^5.14.2", - "babel-traverse": "npm:@babel/traverse@^7.23.2", - "glob": "^10.5.0" - }, "scarfSettings": { "enabled": false } From 62ca942e67d43330ba835a7537151887d038ad0e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 28 Nov 2025 01:58:53 +0000 Subject: [PATCH 515/534] bump angular/common & node-forge --- frontend/package-lock.json | 924 +++++++++++++++++-------------------- frontend/package.json | 30 +- 2 files changed, 439 insertions(+), 515 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1e7cd7b88..a9a3927e7 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,19 +9,19 @@ "version": "3.3-dev", "license": "GNU Affero General Public License v3.0", "dependencies": { - "@angular-devkit/build-angular": "^20.3.7", - "@angular/animations": "^20.3.9", - "@angular/cli": "^20.3.7", - "@angular/common": "^20.3.9", - "@angular/compiler": "^20.3.9", - "@angular/core": "^20.3.9", - "@angular/forms": "^20.3.9", - "@angular/localize": "^20.3.9", - "@angular/platform-browser": "^20.3.9", - "@angular/platform-browser-dynamic": "^20.3.9", - "@angular/platform-server": "^20.3.9", - "@angular/router": "^20.3.9", - "@angular/ssr": "^20.3.7", + "@angular-devkit/build-angular": "^20.3.12", + "@angular/animations": "^20.3.14", + "@angular/cli": "^20.3.12", + "@angular/common": "^20.3.14", + "@angular/compiler": "^20.3.14", + "@angular/core": "^20.3.14", + "@angular/forms": "^20.3.14", + "@angular/localize": "^20.3.14", + "@angular/platform-browser": "^20.3.14", + "@angular/platform-browser-dynamic": "^20.3.14", + "@angular/platform-server": "^20.3.14", + "@angular/router": "^20.3.14", + "@angular/ssr": "^20.3.12", "@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", @@ -42,8 +42,8 @@ "zone.js": "~0.15.1" }, "devDependencies": { - "@angular/compiler-cli": "^20.3.9", - "@angular/language-service": "^20.3.9", + "@angular/compiler-cli": "^20.3.14", + "@angular/language-service": "^20.3.14", "@types/node": "^24.9.2", "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", @@ -281,12 +281,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2003.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.8.tgz", - "integrity": "sha512-pbXQ2NlZQwzjsSIEoRQMGB1WrgZFCyM0zoD9h+rDjyR8PEB1Evl4evZ4Q5CJzjEBxC8IEG61PHKHjh8GdLb+sg==", + "version": "0.2003.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.12.tgz", + "integrity": "sha512-5H40lAFF4CKY32C4HOp6bTlOF1f4WsGCwe7FjFQp9A+T7yoCBiHpIWt2JKTwV4sBoTKVDZOnuf0GG+UVKjQT4A==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.8", + "@angular-devkit/core": "20.3.12", "rxjs": "7.8.2" }, "engines": { @@ -296,9 +296,9 @@ } }, "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -415,16 +415,16 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.8.tgz", - "integrity": "sha512-U+dSQL/M9orZFPHGgkW/MoAWVGc65TMRChvQ+W4iGB8jQ4z3gE91tTrsKnaJn7D+vW95nAkdGWAVCl7YRf1hhA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.12.tgz", + "integrity": "sha512-HPepPbJA5vprYTWJaSCfpk0s1bPT6Ui6VjFOSb9oY+p9iq+MGkuB1I+swNcRcMLttyMD+FpbMd27F8jSeX5XVw==", "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.8", - "@angular-devkit/build-webpack": "0.2003.8", - "@angular-devkit/core": "20.3.8", - "@angular/build": "20.3.8", + "@angular-devkit/architect": "0.2003.12", + "@angular-devkit/build-webpack": "0.2003.12", + "@angular-devkit/core": "20.3.12", + "@angular/build": "20.3.12", "@babel/core": "7.28.3", "@babel/generator": "7.28.3", "@babel/helper-annotate-as-pure": "7.27.3", @@ -435,7 +435,7 @@ "@babel/preset-env": "7.28.3", "@babel/runtime": "7.28.3", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "20.3.8", + "@ngtools/webpack": "20.3.12", "ansi-colors": "4.1.3", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", @@ -490,7 +490,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.8", + "@angular/ssr": "^20.3.12", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^29.5.0 || ^30.2.0", @@ -547,9 +547,9 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -573,18 +573,6 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -766,12 +754,12 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2003.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.8.tgz", - "integrity": "sha512-IKLQCe7BgV8XRl9m6oirU5XQ9ojq214GH6GKw8dvGg1MCIxv/TfB3pRTPexgOqPaWk6SONyXj6tshB+Nluk3nw==", + "version": "0.2003.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.12.tgz", + "integrity": "sha512-IkhCU0nAsXYBQOfHu2gQBcYBKhaV1c8wYtu7MmelBcN/iUrG8hRf1sZx+ppUgsdZuBYxCiDiLpcfRVRCIASkvw==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/architect": "0.2003.12", "rxjs": "7.8.2" }, "engines": { @@ -785,12 +773,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.8.tgz", - "integrity": "sha512-Ymv7nWLTDB1gBh2laRveO912eUpQ/rUIzKRr8VQFMVG/wNipL88vzyrlKhJa7WhQ3CdKxLD7kplFIjdev7XUVg==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.12.tgz", + "integrity": "sha512-JqJ1u59y+Ud51k/8MHYzSP+aQOeC2PJBaDmMnvqfWVaIt6n3x4gc/VtuhqhpJ0SKulbFuOWgAfI6QbPFrgUYQQ==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.8", + "@angular-devkit/core": "20.3.12", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -803,9 +791,9 @@ } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -922,9 +910,9 @@ } }, "node_modules/@angular/animations": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", - "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.14.tgz", + "integrity": "sha512-Sx3/XNu2rR+R8T8JkJEaIpZDZPk0IecS0Ayt6HTanNUZXuw0HVou3vkjR5B2St5nM4MXs0gh+S6aLNuArtqJTQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -933,17 +921,17 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.3.9" + "@angular/core": "20.3.14" } }, "node_modules/@angular/build": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.8.tgz", - "integrity": "sha512-wE6/T1FIjDSXljyNPh7KEwK5ysH3/uq2h8ZB5UCAAUkPHcQ/Y1unk27TUYePO7++KjkYXUX6XwwYZksXCZFJjA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.12.tgz", + "integrity": "sha512-iAZve4VPviC8y6RFctyh3qFXSlP5mth9K46/0zasB4LV4pcmu8BrzIHERxIn/jCDNdVdPh973kxo1ksO4WpyuA==", "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/architect": "0.2003.12", "@babel/core": "7.28.3", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -985,7 +973,7 @@ "@angular/platform-browser": "^20.0.0", "@angular/platform-server": "^20.0.0", "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.8", + "@angular/ssr": "^20.3.12", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "^20.0.0", @@ -1034,22 +1022,10 @@ } } }, - "node_modules/@angular/build/node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", - "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", - "license": "MIT", - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "peerDependencies": { - "vite": "^6.0.0 || ^7.0.0" - } - }, "node_modules/@angular/build/node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "license": "MIT", "dependencies": { "environment": "^1.0.0" @@ -1128,23 +1104,6 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, - "node_modules/@angular/build/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, "node_modules/@angular/build/node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -1339,96 +1298,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@angular/build/node_modules/vite": { - "version": "7.1.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", - "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/@angular/build/node_modules/vite/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, "node_modules/@angular/build/node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", @@ -1447,18 +1316,18 @@ } }, "node_modules/@angular/cli": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.8.tgz", - "integrity": "sha512-UUNmwDCrRknE+50Gwwt66o4T/l0KfLWOzxlYdLn9l2PIVNhpspg+5CUkO0juRyRyCxCnojic1s9pPTD1Eq4rtg==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.12.tgz", + "integrity": "sha512-vqVyVjbFPCRMjA5evL7tV2JeR6Anuzb9WcXTMB17fr7uzKNNAvo7KyRaOJjp+TU4JDARTNyGPy0aywfPx7R60A==", "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2003.8", - "@angular-devkit/core": "20.3.8", - "@angular-devkit/schematics": "20.3.8", + "@angular-devkit/architect": "0.2003.12", + "@angular-devkit/core": "20.3.12", + "@angular-devkit/schematics": "20.3.12", "@inquirer/prompts": "7.8.2", "@listr2/prompt-adapter-inquirer": "3.0.1", "@modelcontextprotocol/sdk": "1.17.3", - "@schematics/angular": "20.3.8", + "@schematics/angular": "20.3.12", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.35.0", "ini": "5.0.0", @@ -1481,9 +1350,9 @@ } }, "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -1557,9 +1426,9 @@ } }, "node_modules/@angular/cli/node_modules/ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "license": "MIT", "dependencies": { "environment": "^1.0.0" @@ -1946,9 +1815,9 @@ } }, "node_modules/@angular/common": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", - "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.14.tgz", + "integrity": "sha512-OOUvjTtnpktJLsNupA+GFT2q5zNocPdpOENA8aSrXvAheNybLjgi+otO3U3sQsvB1VwaoEZ9GT5O3lZlstnA/A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1957,14 +1826,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.3.9", + "@angular/core": "20.3.14", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", - "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.14.tgz", + "integrity": "sha512-KFbfPPAbclzGDujCVruflCD9j4Zwwxvrg7Y4C9GJYs3LZ85t+BfIMDDnvpBUM07ZLnfY4TO4gQdHmJAcaGGXDQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1974,9 +1843,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", - "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.14.tgz", + "integrity": "sha512-lFg9ikwRClzDPjdFiwynbVFIi1RJZf/0i+OHa3Ns2gzXxJeHNKMJrHHjWZ2DU4N2UpxH0YAPe22N9Bie28IuQQ==", "license": "MIT", "dependencies": { "@babel/core": "7.28.3", @@ -1996,7 +1865,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.9", + "@angular/compiler": "20.3.14", "typescript": ">=5.8 <6.0" }, "peerDependenciesMeta": { @@ -2162,9 +2031,9 @@ } }, "node_modules/@angular/core": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", - "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.14.tgz", + "integrity": "sha512-rpyEbhWF6Fj/xI9IvNLZh5QBUYnoXuF7vX54CCtyQ2MHALxRR/aa1WRxjRM96cF2OqodQ/Gj3oYW8ei8hlBh4w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2173,7 +2042,7 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.9", + "@angular/compiler": "20.3.14", "rxjs": "^6.5.3 || ^7.4.0", "zone.js": "~0.15.0" }, @@ -2187,9 +2056,9 @@ } }, "node_modules/@angular/forms": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", - "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.14.tgz", + "integrity": "sha512-fGrJ589tU+AKoxf+kaRrEw7wlSfVr1/z/Fz625ggFCc6ySQEityKW3JsnLfNkh5qGrdxib4BOfF78f9J7Pyk+w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2198,16 +2067,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.9", - "@angular/core": "20.3.9", - "@angular/platform-browser": "20.3.9", + "@angular/common": "20.3.14", + "@angular/core": "20.3.14", + "@angular/platform-browser": "20.3.14", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.9.tgz", - "integrity": "sha512-aCsuzlFx8a/VMBNgXMfwai97j2QHZ8PhQwzwodDNb2X3eQsaUO+nCgs5kNIZmQ/rJESH+fY9ZdlZcrYbVp+nBA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.14.tgz", + "integrity": "sha512-3Jvi60WzLUe6jQJEw1xi/35uW7ynzxOS7iyZlwYfl2v8RljeLyyQsm0WNVpq6tXt80ppDeD59JvYTguEQ283Og==", "dev": true, "license": "MIT", "engines": { @@ -2215,9 +2084,9 @@ } }, "node_modules/@angular/localize": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", - "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.14.tgz", + "integrity": "sha512-tSYZmFhjCHwifWE+R1VHg3zaemUX2tNjpQd9Ha6BvISyzyGWw/sQirIAxC4uoa2RVZ3jexos5sbw8rFT6iIEYg==", "license": "MIT", "dependencies": { "@babel/core": "7.28.3", @@ -2234,8 +2103,8 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.9", - "@angular/compiler-cli": "20.3.9" + "@angular/compiler": "20.3.14", + "@angular/compiler-cli": "20.3.14" } }, "node_modules/@angular/localize/node_modules/ansi-regex": { @@ -2367,9 +2236,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", - "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.14.tgz", + "integrity": "sha512-Lviz9GfsIyOIBDal8QhIBKU8OMH29A0RhFw2opTC50sqKadXLN9CD7iSaAwQbNLc4mc3JAF4zth0AzKdHLbz7Q==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2378,9 +2247,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.3.9", - "@angular/common": "20.3.9", - "@angular/core": "20.3.9" + "@angular/animations": "20.3.14", + "@angular/common": "20.3.14", + "@angular/core": "20.3.14" }, "peerDependenciesMeta": { "@angular/animations": { @@ -2389,9 +2258,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.9.tgz", - "integrity": "sha512-XLGDmloD25eEeQM3hrCnU+2TqXpFLp36xOPqVSyBNso0YFXBtAX/lc2tcOFX3fLslje3LT0nyObAlV45YfBiGA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.14.tgz", + "integrity": "sha512-g9z/g8gIOrBCX1SQ/GWwB0+JXBC6CKe0+yRyy9GGeBLm/YXWZHxTkmnDmueXXfPtUl8TOAInE22wlLcfunWTrg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2400,16 +2269,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.9", - "@angular/compiler": "20.3.9", - "@angular/core": "20.3.9", - "@angular/platform-browser": "20.3.9" + "@angular/common": "20.3.14", + "@angular/compiler": "20.3.14", + "@angular/core": "20.3.14", + "@angular/platform-browser": "20.3.14" } }, "node_modules/@angular/platform-server": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", - "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.14.tgz", + "integrity": "sha512-CTc/K3AdOKjtU3PzK5cH8aRjpUZ2p7PVZ3JaVf9KMUHdRwNkPjMuRugoU4Adm5S3lGW4PsDuP49I6GkMsVDN6w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0", @@ -2419,17 +2288,17 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.9", - "@angular/compiler": "20.3.9", - "@angular/core": "20.3.9", - "@angular/platform-browser": "20.3.9", + "@angular/common": "20.3.14", + "@angular/compiler": "20.3.14", + "@angular/core": "20.3.14", + "@angular/platform-browser": "20.3.14", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/router": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", - "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.14.tgz", + "integrity": "sha512-gi7/NuHRS9n9RCwh03VuVFizVMa2lKL/s+7yP3Ecq2nQ5uSeTMWb/91OmGEBwncI3wKPkYdQ9g3n6PvK/O8uDQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2438,16 +2307,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.3.9", - "@angular/core": "20.3.9", - "@angular/platform-browser": "20.3.9", + "@angular/common": "20.3.14", + "@angular/core": "20.3.14", + "@angular/platform-browser": "20.3.14", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/ssr": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", - "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.12.tgz", + "integrity": "sha512-liIxrlozOkcx+6qkMb0rFcKjo32aRtUI/U7TQ+1KA1XZrIk97aTjHEpq0KhBMjNlOt/xwrlUARDXjS5au5kP5g==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -6137,9 +6006,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.8.tgz", - "integrity": "sha512-hwmpnUKHpC89rne9t/OBeoPM9MBiD9rAfVwnntK+d13/v44U2jWVON7ogIcyjWb+PyAn8VNn1/G404+YmOvxCA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.12.tgz", + "integrity": "sha512-ePuofHOtbgvEq2t+hcmL30s4q9HQ/nv9ABwpLiELdVIObcWUnrnizAvM7hujve/9CQL6gRCeEkxPLPS4ZrK9AQ==", "license": "MIT", "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", @@ -7046,13 +6915,13 @@ ] }, "node_modules/@schematics/angular": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.8.tgz", - "integrity": "sha512-lmdh1JywRl0BK1VcYwGDrNre78OpduNhsV4N5afELvrNPKSk/ixCb3iZq4MCY3yBZ3RV5Uso+vrJwwEeqe02JQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.12.tgz", + "integrity": "sha512-ikl+nkWUab/Z4eSkBHgq9FLIUH8qh4OcYKeBQ0fyWqIUFHyjjK0JOfwmH1g/3zAmuUMtkthHCehAtyKzCTQjVA==", "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.8", - "@angular-devkit/schematics": "20.3.8", + "@angular-devkit/core": "20.3.12", + "@angular-devkit/schematics": "20.3.12", "jsonc-parser": "3.3.1" }, "engines": { @@ -7062,9 +6931,9 @@ } }, "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -7937,6 +7806,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -8122,11 +8003,10 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "peer": true, + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -11047,19 +10927,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -14348,9 +14215,9 @@ "optional": true }, "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" @@ -17493,18 +17360,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -17726,18 +17581,6 @@ } } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ts-node/node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -18097,6 +17940,125 @@ "extsprintf": "^1.2.0" } }, + "node_modules/vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vite/node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -18555,18 +18517,6 @@ } } }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/webpack/node_modules/acorn-import-phases": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", @@ -19061,18 +19011,18 @@ } }, "@angular-devkit/architect": { - "version": "0.2003.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.8.tgz", - "integrity": "sha512-pbXQ2NlZQwzjsSIEoRQMGB1WrgZFCyM0zoD9h+rDjyR8PEB1Evl4evZ4Q5CJzjEBxC8IEG61PHKHjh8GdLb+sg==", + "version": "0.2003.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.12.tgz", + "integrity": "sha512-5H40lAFF4CKY32C4HOp6bTlOF1f4WsGCwe7FjFQp9A+T7yoCBiHpIWt2JKTwV4sBoTKVDZOnuf0GG+UVKjQT4A==", "requires": { - "@angular-devkit/core": "20.3.8", + "@angular-devkit/core": "20.3.12", "rxjs": "7.8.2" }, "dependencies": { "@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "requires": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -19136,15 +19086,15 @@ } }, "@angular-devkit/build-angular": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.8.tgz", - "integrity": "sha512-U+dSQL/M9orZFPHGgkW/MoAWVGc65TMRChvQ+W4iGB8jQ4z3gE91tTrsKnaJn7D+vW95nAkdGWAVCl7YRf1hhA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.12.tgz", + "integrity": "sha512-HPepPbJA5vprYTWJaSCfpk0s1bPT6Ui6VjFOSb9oY+p9iq+MGkuB1I+swNcRcMLttyMD+FpbMd27F8jSeX5XVw==", "requires": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.8", - "@angular-devkit/build-webpack": "0.2003.8", - "@angular-devkit/core": "20.3.8", - "@angular/build": "20.3.8", + "@angular-devkit/architect": "0.2003.12", + "@angular-devkit/build-webpack": "0.2003.12", + "@angular-devkit/core": "20.3.12", + "@angular/build": "20.3.12", "@babel/core": "7.28.3", "@babel/generator": "7.28.3", "@babel/helper-annotate-as-pure": "7.27.3", @@ -19155,7 +19105,7 @@ "@babel/preset-env": "7.28.3", "@babel/runtime": "7.28.3", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "20.3.8", + "@ngtools/webpack": "20.3.12", "ansi-colors": "4.1.3", "autoprefixer": "10.4.21", "babel-loader": "10.0.0", @@ -19198,9 +19148,9 @@ }, "dependencies": { "@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "requires": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -19210,11 +19160,6 @@ "source-map": "0.7.6" } }, - "acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" - }, "ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -19321,20 +19266,20 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.2003.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.8.tgz", - "integrity": "sha512-IKLQCe7BgV8XRl9m6oirU5XQ9ojq214GH6GKw8dvGg1MCIxv/TfB3pRTPexgOqPaWk6SONyXj6tshB+Nluk3nw==", + "version": "0.2003.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.12.tgz", + "integrity": "sha512-IkhCU0nAsXYBQOfHu2gQBcYBKhaV1c8wYtu7MmelBcN/iUrG8hRf1sZx+ppUgsdZuBYxCiDiLpcfRVRCIASkvw==", "requires": { - "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/architect": "0.2003.12", "rxjs": "7.8.2" } }, "@angular-devkit/schematics": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.8.tgz", - "integrity": "sha512-Ymv7nWLTDB1gBh2laRveO912eUpQ/rUIzKRr8VQFMVG/wNipL88vzyrlKhJa7WhQ3CdKxLD7kplFIjdev7XUVg==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.3.12.tgz", + "integrity": "sha512-JqJ1u59y+Ud51k/8MHYzSP+aQOeC2PJBaDmMnvqfWVaIt6n3x4gc/VtuhqhpJ0SKulbFuOWgAfI6QbPFrgUYQQ==", "requires": { - "@angular-devkit/core": "20.3.8", + "@angular-devkit/core": "20.3.12", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "8.2.0", @@ -19342,9 +19287,9 @@ }, "dependencies": { "@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "requires": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -19408,20 +19353,20 @@ } }, "@angular/animations": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.9.tgz", - "integrity": "sha512-ckpRdtRV16u96ULipXTF0ZTMSe3kBZL7+Q6OYi2AsNPlrO4CUhdM8XWH0CE2lZVDkg7XNstjswfikeH8UaQVTw==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.3.14.tgz", + "integrity": "sha512-Sx3/XNu2rR+R8T8JkJEaIpZDZPk0IecS0Ayt6HTanNUZXuw0HVou3vkjR5B2St5nM4MXs0gh+S6aLNuArtqJTQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/build": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.8.tgz", - "integrity": "sha512-wE6/T1FIjDSXljyNPh7KEwK5ysH3/uq2h8ZB5UCAAUkPHcQ/Y1unk27TUYePO7++KjkYXUX6XwwYZksXCZFJjA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.12.tgz", + "integrity": "sha512-iAZve4VPviC8y6RFctyh3qFXSlP5mth9K46/0zasB4LV4pcmu8BrzIHERxIn/jCDNdVdPh973kxo1ksO4WpyuA==", "requires": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.8", + "@angular-devkit/architect": "0.2003.12", "@babel/core": "7.28.3", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", @@ -19449,16 +19394,10 @@ "watchpack": "2.4.4" }, "dependencies": { - "@vitejs/plugin-basic-ssl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", - "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", - "requires": {} - }, "ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "requires": { "environment": "^1.0.0" } @@ -19500,12 +19439,6 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, - "fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "requires": {} - }, "is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -19614,31 +19547,6 @@ "ansi-regex": "^6.0.1" } }, - "vite": { - "version": "7.1.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", - "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", - "requires": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "fsevents": "~2.3.3", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "dependencies": { - "tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "requires": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - } - } - } - }, "wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", @@ -19652,17 +19560,17 @@ } }, "@angular/cli": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.8.tgz", - "integrity": "sha512-UUNmwDCrRknE+50Gwwt66o4T/l0KfLWOzxlYdLn9l2PIVNhpspg+5CUkO0juRyRyCxCnojic1s9pPTD1Eq4rtg==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-20.3.12.tgz", + "integrity": "sha512-vqVyVjbFPCRMjA5evL7tV2JeR6Anuzb9WcXTMB17fr7uzKNNAvo7KyRaOJjp+TU4JDARTNyGPy0aywfPx7R60A==", "requires": { - "@angular-devkit/architect": "0.2003.8", - "@angular-devkit/core": "20.3.8", - "@angular-devkit/schematics": "20.3.8", + "@angular-devkit/architect": "0.2003.12", + "@angular-devkit/core": "20.3.12", + "@angular-devkit/schematics": "20.3.12", "@inquirer/prompts": "7.8.2", "@listr2/prompt-adapter-inquirer": "3.0.1", "@modelcontextprotocol/sdk": "1.17.3", - "@schematics/angular": "20.3.8", + "@schematics/angular": "20.3.12", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.35.0", "ini": "5.0.0", @@ -19677,9 +19585,9 @@ }, "dependencies": { "@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "requires": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -19717,9 +19625,9 @@ } }, "ansi-escapes": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", - "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", "requires": { "environment": "^1.0.0" } @@ -19942,25 +19850,25 @@ } }, "@angular/common": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.9.tgz", - "integrity": "sha512-PgKEnv30TxvpfTJ3d4h5LEjUHpKSYcs3Rc4OvK7p5A7waBkXzfqCBmy54nomzfcf4dlEjb6wSoXxlJbR7Y34Iw==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.14.tgz", + "integrity": "sha512-OOUvjTtnpktJLsNupA+GFT2q5zNocPdpOENA8aSrXvAheNybLjgi+otO3U3sQsvB1VwaoEZ9GT5O3lZlstnA/A==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.9.tgz", - "integrity": "sha512-nfzR/JpI77Yr4opRimnnTys//taZiibEco1ihV1C02eM4FDCQMOEp8WB+DT/yUESb6MRBlZe1MjeelwSfHlB7g==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.14.tgz", + "integrity": "sha512-KFbfPPAbclzGDujCVruflCD9j4Zwwxvrg7Y4C9GJYs3LZ85t+BfIMDDnvpBUM07ZLnfY4TO4gQdHmJAcaGGXDQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.9.tgz", - "integrity": "sha512-Fe7MIg2NWXoK+M4GtclxaYNoTdZX2U8f/Fd3N8zxtEMcRsvliJOnJ4oQtpx5kqMAuZVO4zY3wuIY1wAGXYCUbQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.3.14.tgz", + "integrity": "sha512-lFg9ikwRClzDPjdFiwynbVFIi1RJZf/0i+OHa3Ns2gzXxJeHNKMJrHHjWZ2DU4N2UpxH0YAPe22N9Bie28IuQQ==", "requires": { "@babel/core": "7.28.3", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -20064,31 +19972,31 @@ } }, "@angular/core": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.9.tgz", - "integrity": "sha512-zZb7wUexBIIUojr1helzXsL25ilAoASm8aPOjBNHPLYr4ndDjMD/wogmH/dA7EzuCdmZf30ZmZZpuX149WdrpA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.14.tgz", + "integrity": "sha512-rpyEbhWF6Fj/xI9IvNLZh5QBUYnoXuF7vX54CCtyQ2MHALxRR/aa1WRxjRM96cF2OqodQ/Gj3oYW8ei8hlBh4w==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.9.tgz", - "integrity": "sha512-jSlhU1IyuxxSYNN5Gg3oBb0nAqIl5Mwf1hywtkbyMay+3sENYGvBRseWp00R308isKe+n8bKi6hF54A1lhozzg==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.3.14.tgz", + "integrity": "sha512-fGrJ589tU+AKoxf+kaRrEw7wlSfVr1/z/Fz625ggFCc6ySQEityKW3JsnLfNkh5qGrdxib4BOfF78f9J7Pyk+w==", "requires": { "tslib": "^2.3.0" } }, "@angular/language-service": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.9.tgz", - "integrity": "sha512-aCsuzlFx8a/VMBNgXMfwai97j2QHZ8PhQwzwodDNb2X3eQsaUO+nCgs5kNIZmQ/rJESH+fY9ZdlZcrYbVp+nBA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.3.14.tgz", + "integrity": "sha512-3Jvi60WzLUe6jQJEw1xi/35uW7ynzxOS7iyZlwYfl2v8RljeLyyQsm0WNVpq6tXt80ppDeD59JvYTguEQ283Og==", "dev": true }, "@angular/localize": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.9.tgz", - "integrity": "sha512-YtjsOIOUChGCb1XUNb0CLQQVFTQjxgAR8ihLVHQb0M1pJhhkTJGWJAvf3Qr1+1aLJjyAC4wve+zkj5Z9eR9A1A==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-20.3.14.tgz", + "integrity": "sha512-tSYZmFhjCHwifWE+R1VHg3zaemUX2tNjpQd9Ha6BvISyzyGWw/sQirIAxC4uoa2RVZ3jexos5sbw8rFT6iIEYg==", "requires": { "@babel/core": "7.28.3", "@types/babel__core": "7.20.5", @@ -20175,42 +20083,42 @@ } }, "@angular/platform-browser": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.9.tgz", - "integrity": "sha512-q9uyNIKto3PmIh3q9/OX0HYN/SMYqCJ7MyQHBuF9Rel0vXi0gWyk2dgsWAl/tSTLlqHWtGZZ3rvJyxYQmxFo4w==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.3.14.tgz", + "integrity": "sha512-Lviz9GfsIyOIBDal8QhIBKU8OMH29A0RhFw2opTC50sqKadXLN9CD7iSaAwQbNLc4mc3JAF4zth0AzKdHLbz7Q==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.9.tgz", - "integrity": "sha512-XLGDmloD25eEeQM3hrCnU+2TqXpFLp36xOPqVSyBNso0YFXBtAX/lc2tcOFX3fLslje3LT0nyObAlV45YfBiGA==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.3.14.tgz", + "integrity": "sha512-g9z/g8gIOrBCX1SQ/GWwB0+JXBC6CKe0+yRyy9GGeBLm/YXWZHxTkmnDmueXXfPtUl8TOAInE22wlLcfunWTrg==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-server": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.9.tgz", - "integrity": "sha512-rLE3hFxEs2D0wmKcrNiVLUajEyHBZvHN/YDt7ujaZNR0gVSj45CJOWn2/V2+AnP/73RjmvZgukh15sqFR2j6LQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-20.3.14.tgz", + "integrity": "sha512-CTc/K3AdOKjtU3PzK5cH8aRjpUZ2p7PVZ3JaVf9KMUHdRwNkPjMuRugoU4Adm5S3lGW4PsDuP49I6GkMsVDN6w==", "requires": { "tslib": "^2.3.0", "xhr2": "^0.2.0" } }, "@angular/router": { - "version": "20.3.9", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.9.tgz", - "integrity": "sha512-wsilSrTtR85OFd6XP0b9rMakx1pEw5sHEYBrfoSQc+NfYCsP5a5qFBJ5CWOQKgWjKlfPgpkaheD6JdqN9WpFoQ==", + "version": "20.3.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.3.14.tgz", + "integrity": "sha512-gi7/NuHRS9n9RCwh03VuVFizVMa2lKL/s+7yP3Ecq2nQ5uSeTMWb/91OmGEBwncI3wKPkYdQ9g3n6PvK/O8uDQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/ssr": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.8.tgz", - "integrity": "sha512-7xPDwF6uyHSo1cLJO4YJZiNPtuuK5Ujz4B17NCSvYaEFGYbaZa/K9OXdUyrY56C6r4iU9V1gfEHXBuhCajMN0Q==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-20.3.12.tgz", + "integrity": "sha512-liIxrlozOkcx+6qkMb0rFcKjo32aRtUI/U7TQ+1KA1XZrIk97aTjHEpq0KhBMjNlOt/xwrlUARDXjS5au5kP5g==", "requires": { "tslib": "^2.3.0" } @@ -22301,9 +22209,9 @@ } }, "@ngtools/webpack": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.8.tgz", - "integrity": "sha512-hwmpnUKHpC89rne9t/OBeoPM9MBiD9rAfVwnntK+d13/v44U2jWVON7ogIcyjWb+PyAn8VNn1/G404+YmOvxCA==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.12.tgz", + "integrity": "sha512-ePuofHOtbgvEq2t+hcmL30s4q9HQ/nv9ABwpLiELdVIObcWUnrnizAvM7hujve/9CQL6gRCeEkxPLPS4ZrK9AQ==", "requires": {} }, "@nodelib/fs.scandir": { @@ -22757,19 +22665,19 @@ "optional": true }, "@schematics/angular": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.8.tgz", - "integrity": "sha512-lmdh1JywRl0BK1VcYwGDrNre78OpduNhsV4N5afELvrNPKSk/ixCb3iZq4MCY3yBZ3RV5Uso+vrJwwEeqe02JQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.3.12.tgz", + "integrity": "sha512-ikl+nkWUab/Z4eSkBHgq9FLIUH8qh4OcYKeBQ0fyWqIUFHyjjK0JOfwmH1g/3zAmuUMtkthHCehAtyKzCTQjVA==", "requires": { - "@angular-devkit/core": "20.3.8", - "@angular-devkit/schematics": "20.3.8", + "@angular-devkit/core": "20.3.12", + "@angular-devkit/schematics": "20.3.12", "jsonc-parser": "3.3.1" }, "dependencies": { "@angular-devkit/core": { - "version": "20.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.8.tgz", - "integrity": "sha512-+YFpJdvlL4gxnMm/++8rseE7ZNRHlYPmOqpoiXSuP5eGPSmdklEoQGTQvpMw42S3bll1g6/029DmV2FCZ/dtEQ==", + "version": "20.3.12", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.12.tgz", + "integrity": "sha512-ReFxd/UOoVDr3+kIUjmYILQZF89qg62POdY7a7OqBH7plmInFlYVSEDouJvGqj3LVCPiqTk2ZOSChbhS/eLxXA==", "requires": { "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -23414,6 +23322,12 @@ } } }, + "@vitejs/plugin-basic-ssl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", + "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "requires": {} + }, "@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -23575,11 +23489,9 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "peer": true + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" }, "acorn-jsx": { "version": "5.3.2", @@ -25577,12 +25489,6 @@ "eslint-visitor-keys": "^4.2.1" }, "dependencies": { - "acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true - }, "eslint-visitor-keys": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", @@ -27858,9 +27764,9 @@ "optional": true }, "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", + "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==" }, "node-gyp": { "version": "11.5.0", @@ -29975,13 +29881,6 @@ "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" - } } }, "terser-webpack-plugin": { @@ -30138,12 +30037,6 @@ "yn": "3.1.1" }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -30374,6 +30267,42 @@ "extsprintf": "^1.2.0" } }, + "vite": { + "version": "7.1.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", + "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "fsevents": "~2.3.3", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" + }, + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + } + } + } + }, "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", @@ -30449,11 +30378,6 @@ "webpack-sources": "^3.3.3" }, "dependencies": { - "acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" - }, "acorn-import-phases": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1ebe46b05..8a0d7778c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -57,19 +57,19 @@ "cypress:run:ci:parameterized": "node update-config.js TESTNET_ENABLED=true TESTNET4_ENABLED=true SIGNET_ENABLED=true LIQUID_ENABLED=true ITEMS_PER_PAGE=25 && npm run generate-config && start-server-and-test serve:parameterized 4200 cypress:run:record" }, "dependencies": { - "@angular-devkit/build-angular": "^20.3.7", - "@angular/animations": "^20.3.9", - "@angular/cli": "^20.3.7", - "@angular/common": "^20.3.9", - "@angular/compiler": "^20.3.9", - "@angular/core": "^20.3.9", - "@angular/forms": "^20.3.9", - "@angular/localize": "^20.3.9", - "@angular/platform-browser": "^20.3.9", - "@angular/platform-browser-dynamic": "^20.3.9", - "@angular/platform-server": "^20.3.9", - "@angular/router": "^20.3.9", - "@angular/ssr": "^20.3.7", + "@angular-devkit/build-angular": "^20.3.12", + "@angular/animations": "^20.3.14", + "@angular/cli": "^20.3.12", + "@angular/common": "^20.3.14", + "@angular/compiler": "^20.3.14", + "@angular/core": "^20.3.14", + "@angular/forms": "^20.3.14", + "@angular/localize": "^20.3.14", + "@angular/platform-browser": "^20.3.14", + "@angular/platform-browser-dynamic": "^20.3.14", + "@angular/platform-server": "^20.3.14", + "@angular/router": "^20.3.14", + "@angular/ssr": "^20.3.12", "@fortawesome/angular-fontawesome": "^3.0.0", "@fortawesome/fontawesome-common-types": "~6.7.2", "@fortawesome/fontawesome-svg-core": "~6.7.2", @@ -90,8 +90,8 @@ "zone.js": "~0.15.1" }, "devDependencies": { - "@angular/compiler-cli": "^20.3.9", - "@angular/language-service": "^20.3.9", + "@angular/compiler-cli": "^20.3.14", + "@angular/language-service": "^20.3.14", "@types/node": "^24.9.2", "@typescript-eslint/eslint-plugin": "^8.46.2", "@typescript-eslint/parser": "^8.46.2", From 07f0a138c1ec5f51905b64cb4eb7ce7af91c6b5f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 15 Nov 2025 06:34:44 +0000 Subject: [PATCH 516/534] update backend dependencies --- backend/package-lock.json | 8524 ++++++++++++++++--------------------- backend/package.json | 9 +- 2 files changed, 3696 insertions(+), 4837 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index fac723c86..24155046e 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -28,15 +28,15 @@ "@types/compression": "^1.7.2", "@types/crypto-js": "^4.1.1", "@types/express": "^4.17.17", - "@types/jest": "^29.5.0", + "@types/jest": "^30.0.0", "@types/ws": "~8.5.10", "@typescript-eslint/eslint-plugin": "^5.55.0", "@typescript-eslint/parser": "^5.55.0", "eslint": "^8.36.0", "eslint-config-prettier": "^8.8.0", - "jest": "^29.5.0", + "jest": "^30.0.0", "prettier": "^3.0.0", - "ts-jest": "^29.1.1", + "ts-jest": "^29.4.5", "ts-node": "^10.9.1" } }, @@ -56,57 +56,48 @@ "node": ">=0.10.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "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==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.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", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -121,50 +112,33 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "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.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -172,29 +146,40 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-module-imports": { - "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==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "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==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, + "license": "MIT", "dependencies": { - "@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-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -204,87 +189,68 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "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/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "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.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -297,6 +263,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -309,6 +276,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -321,6 +289,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -328,11 +297,44 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -345,6 +347,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -353,12 +356,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -372,6 +376,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -384,6 +389,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -396,6 +402,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -408,6 +415,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -420,6 +428,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -432,6 +441,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -439,11 +449,28 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -455,12 +482,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -470,46 +498,48 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, + "license": "MIT", "dependencies": { - "@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/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -519,7 +549,8 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", @@ -543,6 +574,64 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -659,11 +748,115 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -675,20 +868,12 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -697,24 +882,12 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -727,6 +900,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -742,6 +916,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -754,6 +929,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -768,650 +944,414 @@ } }, "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "30.2.0", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/node": "*", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", - "dev": true, - "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.2.0", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/snapshot-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "write-file-atomic": "^5.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1423,26 +1363,19 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "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" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1456,6 +1389,19 @@ "node": ">=6" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@noble/hashes": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", @@ -1502,6 +1448,30 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@redis/bloom": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", @@ -1561,27 +1531,30 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "dev": true, + "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@tsconfig/node10": { @@ -1608,11 +1581,31 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tybys/wasm-util/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1622,31 +1615,34 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { @@ -1706,47 +1702,42 @@ "@types/range-parser": "*" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", "dev": true, + "license": "MIT", "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "expect": "^30.0.0", + "pretty-format": "^30.0.0" } }, "node_modules/@types/json-schema": { @@ -1766,12 +1757,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -1801,10 +1786,11 @@ } }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.10", @@ -1816,19 +1802,21 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.57.0", @@ -2117,6 +2105,282 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2191,6 +2455,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2211,15 +2476,19 @@ } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -2227,6 +2496,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2285,164 +2555,102 @@ } }, "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", "dev": true, + "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@types/babel__core": "^7.20.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", "dev": true, + "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/balanced-match": { @@ -2456,6 +2664,16 @@ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.28", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.28.tgz", + "integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", @@ -2522,31 +2740,33 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", "dev": true, "funding": [ { @@ -2562,11 +2782,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" @@ -2609,6 +2831,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -2617,7 +2840,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", @@ -2671,14 +2895,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", "dev": true, "funding": [ { @@ -2693,20 +2918,24 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/char-regex": { @@ -2714,14 +2943,15 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, "funding": [ { @@ -2729,21 +2959,24 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", + "dev": true, + "license": "MIT" }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2766,31 +2999,38 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2829,10 +3069,11 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", @@ -2854,10 +3095,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2889,10 +3131,19 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", @@ -2905,6 +3156,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2963,6 +3215,7 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2976,15 +3229,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3022,22 +3266,31 @@ "node": ">= 0.4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "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 + "version": "1.5.253", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.253.tgz", + "integrity": "sha512-O0tpQ/35rrgdiGQ0/OFWhy1itmd9A6TY9uQzlqj3hKSu/aYpe7UIn5d7CU2N9myH6biZiWF3VMZVuup8pw5U9w==", + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3049,7 +3302,8 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", @@ -3060,10 +3314,11 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3110,10 +3365,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3124,12 +3380,13 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, "node_modules/eslint": { @@ -3226,55 +3483,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3324,27 +3532,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3374,19 +3561,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -3460,6 +3634,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3478,35 +3653,39 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -3527,7 +3706,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -3542,6 +3721,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -3617,6 +3800,7 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -3634,10 +3818,11 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3729,6 +3914,36 @@ } } }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -3767,11 +3982,12 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3818,6 +4034,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3850,6 +4067,7 @@ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -3871,6 +4089,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3910,15 +4129,6 @@ "node": ">=10.13.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -3962,25 +4172,36 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">= 0.4.0" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { @@ -4034,7 +4255,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", @@ -4056,6 +4278,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -4097,10 +4320,11 @@ } }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -4139,10 +4363,14 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -4156,19 +4384,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/is-extglob": { "version": "2.1.1", @@ -4184,6 +4401,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4193,6 +4411,7 @@ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4214,6 +4433,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4237,6 +4457,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4260,75 +4481,71 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=8" + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4337,22 +4554,39 @@ "node": ">=8" } }, - "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", + "import-local": "^3.2.0", + "jest-cli": "30.2.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4364,143 +4598,75 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0", + "execa": "^5.1.1", + "jest-util": "30.2.0", "p-limit": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "stack-utils": "^2.0.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "yargs": "^17.7.2" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4511,625 +4677,259 @@ } } }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { "@types/node": "*", + "esbuild-register": ">=3.4.0", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "esbuild-register": { + "optional": true + }, "ts-node": { "optional": true } } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=8" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-config/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, + "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "detect-newline": "^3.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "30.2.0", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", "walker": "^1.0.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "optionalDependencies": { - "fsevents": "^2.3.2" + "fsevents": "^2.3.3" } }, "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "stack-utils": "^2.0.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "^29.5.0" + "jest-util": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-pnp-resolver": { @@ -5137,6 +4937,7 @@ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5150,434 +4951,203 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", "dev": true, + "license": "MIT", "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=8" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5585,141 +5155,53 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-util/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-validate/node_modules/camelcase": { @@ -5727,6 +5209,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5734,172 +5217,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" + "jest-util": "30.2.0", + "string-length": "^4.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", - "jest-util": "^29.5.0", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "supports-color": "^8.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -5907,6 +5259,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5931,13 +5284,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5946,22 +5301,24 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -5987,20 +5344,12 @@ "node": ">=6" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6022,7 +5371,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", @@ -6061,6 +5411,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -6081,20 +5432,34 @@ } }, "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -6106,6 +5471,7 @@ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -6151,7 +5517,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -6171,12 +5538,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -6218,6 +5586,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6234,6 +5603,26 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mmdb-lib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz", @@ -6297,6 +5686,22 @@ "node": ">=12" } }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6317,23 +5722,33 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "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 + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6343,6 +5758,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -6386,6 +5802,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -6448,10 +5865,18 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6469,6 +5894,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -6517,16 +5943,35 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -6538,10 +5983,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -6556,10 +6002,11 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -6569,6 +6016,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -6581,6 +6029,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6594,6 +6043,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -6606,6 +6056,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6621,6 +6072,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -6653,17 +6105,18 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -6671,6 +6124,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6678,19 +6132,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6718,9 +6159,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", - "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", "dev": true, "funding": [ { @@ -6731,7 +6172,8 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/qs": { "version": "6.13.0", @@ -6790,10 +6232,11 @@ } }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, "node_modules/redis": { "version": "4.7.0", @@ -6813,32 +6256,17 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -6851,6 +6279,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6864,15 +6293,6 @@ "node": ">=4" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7091,12 +6511,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7116,15 +6530,16 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, @@ -7146,6 +6561,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7155,17 +6571,12 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -7179,6 +6590,7 @@ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -7186,15 +6598,6 @@ "node": ">=10" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -7208,6 +6611,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -7221,6 +6625,23 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7242,11 +6663,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7256,6 +6692,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7273,27 +6710,32 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/synckit" } }, "node_modules/test-exclude": { @@ -7301,6 +6743,7 @@ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -7328,22 +6771,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -7360,37 +6796,44 @@ } }, "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -7399,29 +6842,18 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7429,11 +6861,18 @@ "node": ">=10" } }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/ts-node": { "version": "10.9.1", @@ -7516,6 +6955,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7525,6 +6965,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7561,6 +7002,20 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -7569,10 +7024,45 @@ "node": ">= 0.8" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", "dev": true, "funding": [ { @@ -7588,9 +7078,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7623,14 +7114,15 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" @@ -7657,6 +7149,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -7676,11 +7169,19 @@ "node": ">= 8" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7693,39 +7194,25 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7733,16 +7220,30 @@ "dev": true }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ws": { @@ -7770,6 +7271,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -7778,13 +7280,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7843,184 +7347,141 @@ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "@babel/code-frame": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, "requires": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" } }, "@babel/compat-data": { - "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==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "dev": true }, "@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "requires": { - "@ampproject/remapping": "^2.2.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", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" - }, - "dependencies": { - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - } } }, "@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "dev": true, "requires": { - "@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.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.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - } - } + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" } }, "@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, + "@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true + }, "@babel/helper-module-imports": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" } }, "@babel/helper-module-transforms": { - "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==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "requires": { - "@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-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" } }, "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true }, - "@babel/helper-simple-access": { - "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/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, "@babel/helper-string-parser": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true }, "@babel/helper-validator-option": { - "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==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true }, "@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "dev": true, "requires": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - } - }, - "@babel/highlight": { - "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.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" } }, "@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", - "dev": true + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.28.5" + } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -8049,6 +7510,24 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.27.1" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -8068,12 +7547,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -8130,6 +7609,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -8140,49 +7628,48 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.27.1" } }, "@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" } }, "@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "dev": true, "requires": { - "@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/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" } }, "@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" } }, "@bcoe/v8-coverage": { @@ -8212,6 +7699,64 @@ } } }, + "@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -8239,7 +7784,7 @@ "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -8290,6 +7835,71 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -8299,19 +7909,10 @@ "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.1", "resolve-from": "^5.0.0" }, "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -8322,16 +7923,6 @@ "path-exists": "^4.0.0" } }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8374,494 +7965,311 @@ "dev": true }, "@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", "dev": true, "requires": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz", + "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==", "dev": true, "requires": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "30.2.0", + "@jest/pattern": "30.0.1", + "@jest/reporters": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-changed-files": "30.2.0", + "jest-config": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-resolve-dependencies": "30.2.0", + "jest-runner": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "jest-watcher": "30.2.0", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0" } }, + "@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true + }, "@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", "dev": true, "requires": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "^29.5.0" + "jest-mock": "30.2.0" } }, "@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", "dev": true, "requires": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" + "expect": "30.2.0", + "jest-snapshot": "30.2.0" } }, "@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, "requires": { - "jest-get-type": "^29.4.3" + "@jest/get-type": "30.1.0" } }, "@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, "requires": { - "@jest/types": "^29.5.0", - "@sinonjs/fake-timers": "^10.0.2", + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" } }, + "@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true + }, "@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", "dev": true, "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" + } + }, + "@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-regex-util": "30.0.1" } }, "@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", + "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", + "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" } } } }, "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "requires": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.34.0" + } + }, + "@jest/snapshot-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", + "dev": true, + "requires": { + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" } }, "@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" } }, "@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", "dev": true, "requires": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" } }, "@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", "dev": true, "requires": { - "@jest/test-result": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.1", + "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "write-file-atomic": "^5.0.1" } }, "@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "requires": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" } }, "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -8870,22 +8278,16 @@ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, - "@jridgewell/set-array": { - "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": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -8897,6 +8299,18 @@ "resolved": "https://registry.npmjs.org/@mempool/electrum-client/-/electrum-client-1.1.9.tgz", "integrity": "sha512-mlvPiCzUlaETpYW3i6V87A24jjMYgsebaXtUo3WQyyLnYUuxs0KiXQ2mnKh3h15j8Xg/hfxeGIi+5OC9u0nftQ==" }, + "@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "@noble/hashes": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", @@ -8928,6 +8342,19 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true + }, "@redis/bloom": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", @@ -8976,27 +8403,27 @@ "requires": {} }, "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true }, "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "requires": { "type-detect": "4.0.8" } }, "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, "requires": { - "@sinonjs/commons": "^2.0.0" + "@sinonjs/commons": "^3.0.1" } }, "@tsconfig/node10": { @@ -9023,10 +8450,29 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "requires": { "@babel/parser": "^7.20.7", @@ -9037,18 +8483,18 @@ } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -9056,12 +8502,12 @@ } }, "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "requires": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.28.2" } }, "@types/body-parser": { @@ -9121,47 +8567,38 @@ "@types/range-parser": "*" } }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", + "version": "30.0.0", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz", + "integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==", "dev": true, "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "expect": "^30.0.0", + "pretty-format": "^30.0.0" } }, "@types/json-schema": { @@ -9181,12 +8618,6 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -9216,9 +8647,9 @@ } }, "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "@types/ws": { @@ -9231,18 +8662,18 @@ } }, "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { @@ -9422,6 +8853,148 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true + }, + "@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "dev": true, + "optional": true, + "requires": { + "@napi-rs/wasm-runtime": "^0.2.11" + } + }, + "@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "dev": true, + "optional": true + }, + "@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "dev": true, + "optional": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -9486,12 +9059,12 @@ "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { @@ -9548,124 +9121,73 @@ } }, "babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", "dev": true, "requires": { - "@jest/transform": "^29.5.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", "dev": true, "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@types/babel__core": "^7.20.5" } }, "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" } }, "babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" } }, "balanced-match": { @@ -9679,6 +9201,12 @@ "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==" }, + "baseline-browser-mapping": { + "version": "2.8.28", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.28.tgz", + "integrity": "sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==", + "dev": true + }, "bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", @@ -9737,9 +9265,9 @@ } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -9747,24 +9275,25 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" } }, "bs-logger": { @@ -9847,20 +9376,19 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001644", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", - "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", + "version": "1.0.30001754", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", + "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", "dev": true }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "char-regex": { @@ -9870,15 +9398,15 @@ "dev": true }, "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true }, "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.1.tgz", + "integrity": "sha512-+CmxIZ/L2vNcEfvNtLdU0ZQ6mbq3FZnwAP2PPTiKP+1QOoKwlKlPgb8UKV0Dds7QVaMnHm+FwSft2VB0s/SLjQ==", "dev": true }, "cliui": { @@ -9904,24 +9432,24 @@ "dev": true }, "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "combined-stream": { @@ -9952,9 +9480,9 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "cookie": { @@ -9974,9 +9502,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -9998,10 +9526,11 @@ } }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "dev": true, + "requires": {} }, "deep-is": { "version": "0.1.4", @@ -10057,12 +9586,6 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -10091,15 +9614,21 @@ "gopd": "^1.2.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "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==", + "version": "1.5.253", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.253.tgz", + "integrity": "sha512-O0tpQ/35rrgdiGQ0/OFWhy1itmd9A6TY9uQzlqj3hKSu/aYpe7UIn5d7CU2N9myH6biZiWF3VMZVuup8pw5U9w==", "dev": true }, "emittery": { @@ -10120,9 +9649,9 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -10158,9 +9687,9 @@ } }, "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-html": { @@ -10169,9 +9698,9 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, "eslint": { @@ -10210,7 +9739,7 @@ "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -10222,40 +9751,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -10287,21 +9782,6 @@ "type-fest": "^0.20.2" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -10344,12 +9824,6 @@ "eslint-visitor-keys": "^3.4.0" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, "esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -10418,29 +9892,30 @@ "strip-final-newline": "^2.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", "dev": true }, "expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, "requires": { - "@jest/expect-utils": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" } }, "express": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", - "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -10461,7 +9936,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -10560,9 +10035,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -10628,6 +10103,24 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, "form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -10657,9 +10150,9 @@ "dev": true }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, @@ -10754,12 +10247,6 @@ "is-glob": "^4.0.3" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -10791,19 +10278,23 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "requires": { - "function-bind": "^1.1.1" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-property-descriptors": { @@ -10884,9 +10375,9 @@ } }, "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -10914,10 +10405,10 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" + "ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==" }, "ipaddr.js": { "version": "1.9.1", @@ -10930,15 +10421,6 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11002,646 +10484,319 @@ "dev": true }, "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "semver": "^7.5.4" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "requires": { - "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" } }, "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, - "jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "requires": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", - "import-local": "^3.0.2", - "jest-cli": "^29.5.0" + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz", + "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==", + "dev": true, + "requires": { + "@jest/core": "30.2.0", + "@jest/types": "30.2.0", + "import-local": "^3.2.0", + "jest-cli": "30.2.0" } }, "jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz", + "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==", "dev": true, "requires": { - "execa": "^5.0.0", + "execa": "^5.1.1", + "jest-util": "30.2.0", "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", "dev": true, "requires": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", - "pure-rand": "^6.0.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "stack-utils": "^2.0.6" } }, "jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz", + "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==", "dev": true, "requires": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@jest/core": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "exit-x": "^0.2.2", + "import-local": "^3.2.0", + "jest-config": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "yargs": "^17.7.2" } }, "jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "micromatch": "^4.0.4", + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", + "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" } } } }, "jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" } }, "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, "requires": { - "detect-newline": "^3.0.0" + "detect-newline": "^3.1.0" } }, "jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, "requires": { - "@jest/types": "^29.5.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" } }, "jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" } }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, "jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, "requires": { - "@jest/types": "^29.5.0", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "30.2.0", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", - "micromatch": "^4.0.4", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "fsevents": "^2.3.3", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" } }, "jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" } }, "jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "stack-utils": "^2.0.6" } }, "jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "requires": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "^29.5.0" + "jest-util": "30.2.0" } }, "jest-pnp-resolver": { @@ -11652,577 +10807,241 @@ "requires": {} }, "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true }, "jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", "dev": true, "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" } }, "jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz", + "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==", "dev": true, "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "jest-regex-util": "30.0.1", + "jest-snapshot": "30.2.0" } }, "jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, "requires": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", + "chalk": "^4.1.2", "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", "dev": true, "requires": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "balanced-match": "^1.0.0" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" } } } }, "jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", "dev": true, "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.5.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true } } }, "jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", "dev": true, "requires": { - "@jest/types": "^29.5.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", "dev": true, "requires": { - "@jest/types": "^29.5.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "pretty-format": "30.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", "dev": true, "requires": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "^29.5.0", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "jest-util": "30.2.0", + "string-length": "^4.0.2" } }, "jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", "dev": true, "requires": { "@types/node": "*", - "jest-util": "^29.5.0", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "supports-color": "^8.1.1" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -12247,18 +11066,18 @@ "dev": true }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true }, "json-parse-even-better-errors": { @@ -12285,12 +11104,6 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -12354,12 +11167,20 @@ "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==" }, "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "requires": { - "semver": "^6.0.0" + "semver": "^7.5.3" + }, + "dependencies": { + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true + } } }, "make-error": { @@ -12419,12 +11240,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -12461,6 +11282,18 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, "mmdb-lib": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-2.0.2.tgz", @@ -12512,6 +11345,12 @@ } } }, + "napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12529,6 +11368,12 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -12536,9 +11381,9 @@ "dev": true }, "node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true }, "normalize-path": { @@ -12625,6 +11470,12 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -12669,16 +11520,28 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + } + } }, "path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "path-type": { "version": "4.0.0", @@ -12687,9 +11550,9 @@ "dev": true }, "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { @@ -12699,9 +11562,9 @@ "dev": true }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true }, "pkg-dir": { @@ -12765,14 +11628,14 @@ "dev": true }, "pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "dependencies": { "ansi-styles": { @@ -12783,16 +11646,6 @@ } } }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -12814,9 +11667,9 @@ "dev": true }, "pure-rand": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", - "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", "dev": true }, "qs": { @@ -12850,9 +11703,9 @@ } }, "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true }, "redis": { @@ -12874,17 +11727,6 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -12908,12 +11750,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13070,12 +11906,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -13088,11 +11918,11 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", "requires": { - "ip": "^2.0.0", + "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, @@ -13122,12 +11952,6 @@ "source-map": "^0.6.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, "sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -13140,14 +11964,6 @@ "dev": true, "requires": { "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } } }, "statuses": { @@ -13176,6 +11992,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -13185,6 +12012,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -13204,19 +12040,22 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "requires": { + "@pkgr/core": "^0.2.9" + } }, "test-exclude": { "version": "6.0.0", @@ -13246,12 +12085,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13267,43 +12100,32 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", "dev": true, "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true } } @@ -13384,19 +12206,54 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, + "uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "optional": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", "dev": true, "requires": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1", + "napi-postinstall": "^0.3.0" + } + }, + "update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, "uri-js": { @@ -13420,14 +12277,14 @@ "dev": true }, "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "convert-source-map": "^2.0.0" } }, "varuint-bitcoin": { @@ -13461,6 +12318,12 @@ "isexe": "^2.0.0" } }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -13470,32 +12333,17 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -13505,13 +12353,21 @@ "dev": true }, "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "ws": { @@ -13533,9 +12389,9 @@ "dev": true }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { "cliui": "^8.0.1", diff --git a/backend/package.json b/backend/package.json index 5a86f015f..c063c525b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -59,15 +59,18 @@ "@types/compression": "^1.7.2", "@types/crypto-js": "^4.1.1", "@types/express": "^4.17.17", - "@types/jest": "^29.5.0", + "@types/jest": "^30.0.0", "@types/ws": "~8.5.10", "@typescript-eslint/eslint-plugin": "^5.55.0", "@typescript-eslint/parser": "^5.55.0", "eslint": "^8.36.0", "eslint-config-prettier": "^8.8.0", - "jest": "^29.5.0", + "jest": "^30.0.0", "prettier": "^3.0.0", - "ts-jest": "^29.1.1", + "ts-jest": "^29.4.5", "ts-node": "^10.9.1" + }, + "overrides": { + "js-yaml": "^4.1.1" } } From 13468ce56aef283183834ea896cc3769a528844b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 23 Nov 2025 05:34:23 +0000 Subject: [PATCH 517/534] update backend glob --- backend/package-lock.json | 515 +++++++++----------------------------- backend/package.json | 3 +- 2 files changed, 126 insertions(+), 392 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 24155046e..1cab2025f 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -748,6 +748,29 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -1163,53 +1186,6 @@ } } }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jest/schemas": { "version": "30.0.5", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", @@ -1448,17 +1424,6 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@pkgr/core": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", @@ -3975,12 +3940,6 @@ "node": ">= 0.6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4098,20 +4057,24 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -4129,6 +4092,22 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -4348,16 +4327,6 @@ "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -4555,19 +4524,19 @@ } }, "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jest": { @@ -4729,53 +4698,6 @@ } } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-diff": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", @@ -5062,53 +4984,6 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/jest-snapshot": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", @@ -5788,15 +5663,6 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -5925,15 +5791,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -5944,28 +5801,31 @@ } }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, "node_modules/path-to-regexp": { "version": "0.1.12", @@ -7213,12 +7073,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", @@ -7835,6 +7689,21 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true + }, + "@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "requires": { + "@isaacs/balanced-match": "^4.0.1" + } + }, "@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -8109,7 +7978,7 @@ "chalk": "^4.1.2", "collect-v8-coverage": "^1.0.2", "exit-x": "^0.2.2", - "glob": "^10.3.10", + "glob": "^11.1.0", "graceful-fs": "^4.2.11", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^6.0.0", @@ -8122,40 +7991,6 @@ "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "@jest/schemas": { @@ -8342,13 +8177,6 @@ "fastq": "^1.6.0" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, "@pkgr/core": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", @@ -10143,12 +9971,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -10225,17 +10047,28 @@ "dev": true }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "dependencies": { + "minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "requires": { + "@isaacs/brace-expansion": "^5.0.0" + } + } } }, "glob-parent": { @@ -10390,16 +10223,6 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -10537,13 +10360,12 @@ } }, "jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" + "@isaacs/cliui": "^8.0.2" } }, "jest": { @@ -10630,7 +10452,7 @@ "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", - "glob": "^10.3.10", + "glob": "^11.1.0", "graceful-fs": "^4.2.11", "jest-circus": "30.2.0", "jest-docblock": "30.2.0", @@ -10645,40 +10467,6 @@ "pretty-format": "30.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "jest-diff": { @@ -10885,7 +10673,7 @@ "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", + "glob": "^11.1.0", "graceful-fs": "^4.2.11", "jest-haste-map": "30.2.0", "jest-message-util": "30.2.0", @@ -10896,40 +10684,6 @@ "jest-util": "30.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - } - }, - "minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } } }, "jest-snapshot": { @@ -11414,15 +11168,6 @@ "ee-first": "1.1.1" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", @@ -11508,12 +11253,6 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -11521,19 +11260,19 @@ "dev": true }, "path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "requires": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "dependencies": { "lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", "dev": true } } @@ -11762,7 +11501,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "^11.1.0" } }, "run-parallel": { @@ -12064,7 +11803,7 @@ "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", + "glob": "^11.1.0", "minimatch": "^3.0.4" } }, @@ -12346,12 +12085,6 @@ "strip-ansi": "^6.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, "write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", diff --git a/backend/package.json b/backend/package.json index c063c525b..0facd684b 100644 --- a/backend/package.json +++ b/backend/package.json @@ -71,6 +71,7 @@ "ts-node": "^10.9.1" }, "overrides": { - "js-yaml": "^4.1.1" + "js-yaml": "^4.1.1", + "glob": "^11.1.0" } } From 10ac042ee83ab8643c71f2a53152f93173d28e9e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 28 Nov 2025 09:01:48 +0000 Subject: [PATCH 518/534] switch standardness unit test from multi-opreturn to annex --- .../api/test-data/non-standard-txs.json | 99 ++++++++++--------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/backend/src/__tests__/api/test-data/non-standard-txs.json b/backend/src/__tests__/api/test-data/non-standard-txs.json index 286fe2945..c6b3ca51b 100644 --- a/backend/src/__tests__/api/test-data/non-standard-txs.json +++ b/backend/src/__tests__/api/test-data/non-standard-txs.json @@ -1,52 +1,55 @@ [ - { - "txid": "50136231cb7eeeffb17fc41d1cca213426abe5bf3760e3d6421cad0c0edad367", - "version": 1, - "locktime": 0, - "vin": [ - { - "txid": "c7f86fb7b830124057475b282809f3474ef3565daa3de0b599980fb9e84ab019", - "vout": 4217, - "prevout": { - "scriptpubkey": "001466197b5eadd8067ec194a457e1044b6d1fbdd3b3", - "scriptpubkey_asm": "OP_0 OP_PUSHBYTES_20 66197b5eadd8067ec194a457e1044b6d1fbdd3b3", - "scriptpubkey_type": "v0_p2wpkh", - "scriptpubkey_address": "bc1qvcvhkh4dmqr8asv553t7zpztd50mm5ang4na33", - "value": 106 - }, - "scriptsig": "", - "scriptsig_asm": "", - "witness": [ - "3043021f2af6060a142c6cfd7428adad6a50745d2424813d7ced5c0bbcca85e70de1be022021440ca1c8c3ed49ecd1b64dca6911adcd430c5d3dd60d77ffe0072953999f5b01", - "02ead5c34e3d2c506574b562f857576e11380b6ba15d9f0ad7b7303fdaa9c1513d" - ], - "is_coinbase": false, - "sequence": 4294967295 - } - ], - "vout": [ - { - "scriptpubkey": "6a023a29", - "scriptpubkey_asm": "OP_RETURN OP_PUSHBYTES_2 3a29", - "scriptpubkey_type": "op_return", - "value": 0 + { + "txid": "f859a4e6692c3f15a279449eac191ecb9d17d2d6c003bbae9a55e5da07147eab", + "version": 1, + "locktime": 0, + "size": 170, + "weight": 371, + "fee": 11586, + "vin": [ + { + "is_coinbase": false, + "prevout": { + "value": 11586, + "scriptpubkey": "512088939b42f2ed113dd4756055b179cd784c2cfa52cad29046411c28335aa2055c", + "scriptpubkey_address": "bc1p3zfekshja5gnm4r4vp2mz7wd0pxze7jjetffq3jprs5rxk4zq4wqesykl2", + "scriptpubkey_asm": "OP_PUSHNUM_1 OP_PUSHBYTES_32 88939b42f2ed113dd4756055b179cd784c2cfa52cad29046411c28335aa2055c", + "scriptpubkey_type": "v1_p2tr" + }, + "scriptsig": "", + "scriptsig_asm": "", + "sequence": 4294967295, + "txid": "9b93dab94a3334b6119f75d107da6bcef9435fa52ec6c0de14aa8a094794551a", + "vout": 0, + "witness": [ + "6840b6fa27a00ba001cc92797ce4f3ab7b7a32c21d1fce49e893b42e506bd92e8db187966a84ef799915cf671334cc59779915b192bfb66b2afcf384bb61d0f4", + "500049276d20616e20616e6e6578212041726520796f7520616e20616e6e65783f00" + ], + "inner_redeemscript_asm": "", + "inner_witnessscript_asm": "" + } + ], + "vout": [ + { + "value": 0, + "scriptpubkey": "6a05616e6e6578", + "scriptpubkey_address": "", + "scriptpubkey_asm": "OP_RETURN OP_PUSHBYTES_5 616e6e6578", + "scriptpubkey_type": "op_return" + } + ], + "status": { + "confirmed": true, + "block_height": 896088, + "block_hash": "0000000000000000000148370c6ad0eceb23d0de54ea86a362679cee7fcd3f4a", + "block_time": 1746868490 }, - { - "scriptpubkey": "6a036d7648", - "scriptpubkey_asm": "OP_RETURN OP_PUSHBYTES_3 6d7648", - "scriptpubkey_type": "op_return", - "value": 0 - } - ], - "size": 186, - "weight": 420, - "sigops": 1, - "fee": 106, - "status": { - "confirmed": true, - "block_height": 836361, - "block_hash": "0000000000000000000341cc26cda4af82cd25f7063c448772228cbf2836915b", - "block_time": 1711448028 + "order": 2877166599, + "vsize": 93, + "adjustedVsize": 92.75, + "sigops": 0, + "feePerVsize": 124.91644204851752, + "adjustedFeePerVsize": 124.91644204851752, + "effectiveFeePerVsize": 124.91644204851752 } - } ] \ No newline at end of file From 808055e57e99f02b1eb3b0963dc34a8b0febaafb Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 2 Nov 2025 10:08:01 +0000 Subject: [PATCH 519/534] Enforce legacy sigops policy limit --- backend/src/api/common.ts | 27 ++++++++ backend/src/api/transaction-utils.ts | 38 ++++++++++++ frontend/src/app/shared/transaction.utils.ts | 65 ++++++++++++++++++++ 3 files changed, 130 insertions(+) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 9bf003212..0f14e0c92 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -24,6 +24,7 @@ const MAX_STANDARD_SCRIPTSIG_SIZE = 1650; const DUST_RELAY_TX_FEE = 3; const MAX_OP_RETURN_RELAY = 83; const DEFAULT_PERMIT_BAREMULTISIG = true; +const MAX_TX_LEGACY_SIGOPS = 2_500 * 4; // witness-adjusted sigops export class Common { static nativeAssetId = config.MEMPOOL.NETWORK === 'liquidtestnet' ? @@ -224,6 +225,11 @@ export class Common { return true; } + // legacy sigops + if (this.isNonStandardLegacySigops(tx, height)) { + return true; + } + // input validation for (const vin of tx.vin) { if (vin.is_coinbase) { @@ -450,6 +456,27 @@ export class Common { return false; } + // New legacy sigops limit started to be enforced in v30.0 + static LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 108_000, + 'testnet': 4_750_000, + 'signet': 276_500, + '': 921_000, + }; + static isNonStandardLegacySigops(tx: TransactionExtended, height?: number): boolean { + if ( + height == null || ( + this.LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + && height >= this.LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + ) + ) { + if (!transactionUtils.checkSigopsBIP54(tx, MAX_TX_LEGACY_SIGOPS)) { + return true; + } + } + return false; + } + static getNonWitnessSize(tx: TransactionExtended): number { let weight = tx.weight; let hasWitness = false; diff --git a/backend/src/api/transaction-utils.ts b/backend/src/api/transaction-utils.ts index 519527d5c..dc1012aad 100644 --- a/backend/src/api/transaction-utils.ts +++ b/backend/src/api/transaction-utils.ts @@ -145,6 +145,9 @@ class TransactionUtils { return str; } + /** + * Calculate the witness-adjusted sigops cost of an asm script + */ public countScriptSigops(script: string, isRawScript: boolean = false, witness: boolean = false): number { if (!script?.length) { return 0; @@ -213,6 +216,41 @@ class TransactionUtils { return sigops; } + /** + * see https://github.com/bitcoin/bitcoin/blob/25c45bb0d0bd6618ec9296a1a43605657124e5de/src/policy/policy.cpp#L166-L193 + * returns true if the transactions is permitted under bip54 sigops rules + * + * "Unlike the existing block wide sigop limit which counts sigops present in the block + * itself (including the scriptPubKey which is not executed until spending later), BIP54 + * counts sigops in the block where they are potentially executed (only). + * This means sigops in the spent scriptPubKey count toward the limit. + * `fAccurate` means correctly accounting sigops for CHECKMULTISIGs(VERIFY) with 16 pubkeys + * or fewer. This method of accounting was introduced by BIP16, and BIP54 reuses it. + * The GetSigOpCount call on the previous scriptPubKey counts both bare and P2SH sigops." + */ + public checkSigopsBIP54(tx: TransactionExtended, limit): boolean { + let sigops = 0; + for (const input of tx.vin) { + if (input.scriptsig_asm) { + sigops += this.countScriptSigops(input.scriptsig_asm); + } + if (input.prevout) { + // P2SH redeem script + if (input.prevout.scriptpubkey_type === 'p2sh' && input.inner_redeemscript_asm) { + sigops += this.countScriptSigops(input.inner_redeemscript_asm); + } else { + // prevout scriptpubkey + sigops += this.countScriptSigops(input.prevout.scriptpubkey_asm); + } + } + + if (sigops > limit) { + return false; + } + } + return true; + } + // returns the most significant 4 bytes of the txid as an integer public txidToOrdering(txid: string): number { return parseInt( diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index fdbf5c6a8..ee0476a1d 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -20,7 +20,11 @@ const MAX_STANDARD_SCRIPTSIG_SIZE = 1650; const DUST_RELAY_TX_FEE = 3; const MAX_OP_RETURN_RELAY = 83; const DEFAULT_PERMIT_BAREMULTISIG = true; +const MAX_TX_LEGACY_SIGOPS = 2_500 * 4; // witness-adjusted sigops +/** + * Calculate the witness-adjusted sigops cost of an asm script + */ export function countScriptSigops(script: string, isRawScript: boolean = false, witness: boolean = false): number { if (!script?.length) { return 0; @@ -483,6 +487,11 @@ export function isNonStandard(tx: Transaction, height?: number, network?: string return true; } + // legacy sigops + if (isNonStandardLegacySigops(tx, height, network)) { + return true; + } + // input validation for (const vin of tx.vin) { if (vin.is_coinbase) { @@ -690,6 +699,27 @@ function isStandardOpReturn(bytes: number, outputs: number,height?: number, netw return false; } +// New legacy sigops limit started to be enforced in v30.0 +const LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 108_000, + 'testnet': 4_750_000, + 'signet': 276_500, + '': 921_000, +}; +function isNonStandardLegacySigops(tx: Transaction, height?: number, network?: string): boolean { + if ( + height == null || ( + LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT[network] + && height >= LEGACY_SIGOPS_STANDARDNESS_ACTIVATION_HEIGHT[network] + ) + ) { + if (!checkSigopsBIP54(tx, MAX_TX_LEGACY_SIGOPS)) { + return true; + } + } + return false; +} + // A witness program is any valid scriptpubkey that consists of a 1-byte push opcode // followed by a data push between 2 and 40 bytes. // https://github.com/bitcoin/bitcoin/blob/2c79abc7ad4850e9e3ba32a04c530155cda7f980/src/script/script.cpp#L224-L240 @@ -1675,6 +1705,41 @@ export function countSigops(transaction: Transaction): number { return sigops; } +/** + * see https://github.com/bitcoin/bitcoin/blob/25c45bb0d0bd6618ec9296a1a43605657124e5de/src/policy/policy.cpp#L166-L193 + * returns true if the transactions is permitted under bip54 sigops rules + * + * "Unlike the existing block wide sigop limit which counts sigops present in the block + * itself (including the scriptPubKey which is not executed until spending later), BIP54 + * counts sigops in the block where they are potentially executed (only). + * This means sigops in the spent scriptPubKey count toward the limit. + * `fAccurate` means correctly accounting sigops for CHECKMULTISIGs(VERIFY) with 16 pubkeys + * or fewer. This method of accounting was introduced by BIP16, and BIP54 reuses it. + * The GetSigOpCount call on the previous scriptPubKey counts both bare and P2SH sigops." + */ +function checkSigopsBIP54(tx: Transaction, limit: number = MAX_TX_LEGACY_SIGOPS): boolean { + let sigops = 0; + for (const input of tx.vin) { + if (input.scriptsig_asm) { + sigops += countScriptSigops(input.scriptsig_asm); + } + if (input.prevout) { + // P2SH redeem script + if (input.prevout.scriptpubkey_type === 'p2sh' && input.inner_redeemscript_asm) { + sigops += countScriptSigops(input.inner_redeemscript_asm); + } else { + // prevout scriptpubkey + sigops += countScriptSigops(input.prevout.scriptpubkey_asm); + } + } + + if (sigops > limit) { + return false; + } + } + return true; +} + function scriptPubKeyToAddress(scriptPubKey: string, network: string): { address: string, type: string } { // P2PKH if (/^76a914[0-9a-f]{40}88ac$/.test(scriptPubKey)) { From 13711b1e6f1895f40d2e9449c060a317b99aa299 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 28 Nov 2025 09:49:49 +0000 Subject: [PATCH 520/534] add wiz --- .../app/components/about/about.component.html | 5 ++--- .../app/components/about/about.component.scss | 2 +- frontend/src/resources/wiz.png | Bin 0 -> 142458 bytes 3 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 frontend/src/resources/wiz.png diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index c8599f550..7c4e11218 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -428,13 +428,12 @@
    -

    Project Manager

    +

    Powered By

    -

    Wiz & Associates

    +
    -
    +
    -
    +
    -
    +
    -
    +
    diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.html b/frontend/src/app/shared/components/fee-rate/fee-rate.component.html index 0f4491dd1..12020c64d 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.html +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.html @@ -1,7 +1,12 @@ - {{ fee / (weight / 4) | feeRounding:rounding:dp }} sat/vB - {{ fee / weight | feeRounding:rounding:dp }} sat/WU + @if (softDecimals) { + {{ getIntegerPart(fee / (weight / 4)) }}{{ getDecimalPart(fee / (weight / 4)) }} sat/vB + {{ getIntegerPart(fee / weight) }}{{ getDecimalPart(fee / weight) }} sat/WU + } @else { + {{ fee / (weight / 4) | feeRounding:rounding:dp }} sat/vB + {{ fee / weight | feeRounding:rounding:dp }} sat/WU + } - sat/vB diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss b/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss index e69de29bb..4487e5157 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss @@ -0,0 +1,4 @@ +.soft-decimals { + font-size: 0.8em; + vertical-align: text-bottom; +} 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 083065f1e..c71f5f5f9 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,7 @@ import { Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { StateService } from '@app/services/state.service'; +import { FeeRoundingPipe } from '@app/shared/pipes/fee-rounding/fee-rounding.pipe'; @Component({ selector: 'app-fee-rate', @@ -13,6 +14,7 @@ export class FeeRateComponent implements OnInit { @Input() weight: number = 4; @Input() rounding: string = null; @Input() dp: number = null; + @Input() softDecimals: boolean = false; @Input() showUnit: boolean = true; @Input() unitClass: string = 'symbol'; @Input() unitStyle: any; @@ -21,9 +23,22 @@ export class FeeRateComponent implements OnInit { constructor( private stateService: StateService, + private feeRoundingPipe: FeeRoundingPipe, ) { } ngOnInit() { this.rateUnits$ = this.stateService.rateUnits$; } + + getIntegerPart(rate: number): string { + const formatted = this.feeRoundingPipe.transform(rate, this.rounding, this.dp); + const decimalIndex = formatted.indexOf('.'); + return decimalIndex === -1 ? formatted : formatted.substring(0, decimalIndex); + } + + getDecimalPart(rate: number): string { + const formatted = this.feeRoundingPipe.transform(rate, this.rounding, this.dp); + const decimalIndex = formatted.indexOf('.'); + return decimalIndex === -1 ? ' ' : formatted.substring(decimalIndex) + ' '; + } } diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 6ac11ca90..146c4c9b6 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -279,6 +279,7 @@ import { GithubLogin } from '@components/github-login.component/github-login.com ShortenStringPipe, CapAddressPipe, AmountShortenerPipe, + FeeRoundingPipe, ], exports: [ MenuComponent, From 800824ae079493cb4db1db5d67a9cac811eff115 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Dec 2025 08:51:08 +0000 Subject: [PATCH 527/534] remove precise fee min query param --- backend/src/api/bitcoin/bitcoin.routes.ts | 12 +----------- backend/src/api/fee-api.ts | 8 ++++---- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 69d42f570..e6075ffa2 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -129,17 +129,7 @@ class BitcoinRoutes { res.send('Service Unavailable'); return; } - let minFee = 0; - if (req.query.min) { - try { - minFee = parseFloat(req.query.min as string); - } catch (e) { - res.statusCode = 400; - res.send('Invalid minimum fee'); - return; - } - } - const result = feeApi.getPreciseRecommendedFee(minFee); + const result = feeApi.getPreciseRecommendedFee(); res.json(result); } diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 2edb8c0e4..7f6608fbb 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -26,17 +26,17 @@ class FeeApi { return this.calculateRecommendedFee(pBlocks, mPool); } - public getPreciseRecommendedFee(minimum: number = 0): RecommendedFees { + public getPreciseRecommendedFee(): RecommendedFees { const pBlocks = projectedBlocks.getMempoolBlocks(); const mPool = mempool.getMempoolInfo(); // minimum non-zero minrelaytxfee / incrementalrelayfee is 1 sat/kvB = 0.001 sat/vB - return this.calculateRecommendedFee(pBlocks, mPool, minimum, 0.001); + return this.calculateRecommendedFee(pBlocks, mPool, 0.001); } - public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minimumRecommendation: number = 0, minIncrement: number = this.minimumIncrement): RecommendedFees { + public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minIncrement: number = this.minimumIncrement): RecommendedFees { const purgeRate = this.roundUpToNearest(mPool.mempoolminfee * 100000, minIncrement); - const minimumFee = Math.max(purgeRate, minimumRecommendation, minIncrement); + const minimumFee = Math.max(purgeRate, minIncrement); if (!pBlocks.length) { return { From b22891c467e2fe39c6bd9c696dcf1703ca60200c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Dec 2025 09:03:06 +0000 Subject: [PATCH 528/534] remove MIN_RECOMMENDED_FEE config option --- frontend/src/app/services/state.service.ts | 2 -- frontend/src/app/services/websocket.service.ts | 8 +------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 95eb68567..f4bed10af 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -87,7 +87,6 @@ export interface Env { SERVICES_API?: string; customize?: Customization; PROD_DOMAINS: string[]; - MIN_RECOMMENDED_FEE: number; } const defaultEnv: Env = { @@ -130,7 +129,6 @@ const defaultEnv: Env = { 'STRATUM_ENABLED': false, 'SERVICES_API': 'https://mempool.space/api/v1/services', 'PROD_DOMAINS': [], - 'MIN_RECOMMENDED_FEE': 1, }; @Injectable({ diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index 4eb7c3ed4..8979ce4cf 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -46,8 +46,6 @@ export class WebsocketService { private subscription: Subscription; private network = ''; - private minRecommendedFee = this.stateService.env.MIN_RECOMMENDED_FEE; - constructor( private stateService: StateService, private apiService: ApiService, @@ -431,11 +429,7 @@ export class WebsocketService { if (response.fees) { this.stateService.recommendedFees$.next({ - fastestFee: Math.max(response.fees.fastestFee, this.minRecommendedFee), - halfHourFee: Math.max(response.fees.halfHourFee, this.minRecommendedFee), - hourFee: Math.max(response.fees.hourFee, this.minRecommendedFee), - minimumFee: Math.max(response.fees.minimumFee, this.minRecommendedFee), - economyFee: Math.max(response.fees.economyFee, this.minRecommendedFee), + ...response.fees, }); } From 4c88b4f2bba611eb3b2cd93047d61d61f3c300d0 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Dec 2025 09:03:20 +0000 Subject: [PATCH 529/534] tweak precise fee algorithm for higher priority fees --- backend/src/api/fee-api.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 7f6608fbb..0914a1098 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -18,6 +18,9 @@ class FeeApi { constructor() { } minimumIncrement = isLiquid ? 0.1 : 1; + minFastestFee = isLiquid ? 0.1 : 1; + minHalfHourFee = isLiquid ? 0.1 : 0.5; + priorityFactor = isLiquid ? 0 : 0.5; public getRecommendedFee(): RecommendedFees { const pBlocks = projectedBlocks.getMempoolBlocks(); @@ -67,8 +70,8 @@ class FeeApi { hourFee = Math.max(hourFee, economyFee); return { - 'fastestFee': this.roundToNearest(fastestFee, minIncrement), - 'halfHourFee': this.roundToNearest(halfHourFee, minIncrement), + 'fastestFee': Math.max(this.roundToNearest(fastestFee + this.priorityFactor, minIncrement), this.minFastestFee), + 'halfHourFee': Math.max(this.roundToNearest(halfHourFee + (this.priorityFactor / 2), minIncrement), this.minHalfHourFee), 'hourFee': this.roundToNearest(hourFee, minIncrement), 'economyFee': this.roundToNearest(economyFee, minIncrement), 'minimumFee': this.roundToNearest(minimumFee, minIncrement), From e36fb3d4a186b7a9080add0553bba652873c70f4 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Dec 2025 09:25:01 +0000 Subject: [PATCH 530/534] remove soft decimals --- .../src/app/components/fees-box/fees-box.component.html | 8 ++++---- .../shared/components/fee-rate/fee-rate.component.html | 9 ++------- .../shared/components/fee-rate/fee-rate.component.scss | 4 ---- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/frontend/src/app/components/fees-box/fees-box.component.html b/frontend/src/app/components/fees-box/fees-box.component.html index 625764d5f..55e64d4c1 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.html +++ b/frontend/src/app/components/fees-box/fees-box.component.html @@ -14,23 +14,23 @@
    -
    +
    -
    +
    -
    +
    -
    +
    diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.html b/frontend/src/app/shared/components/fee-rate/fee-rate.component.html index 12020c64d..0f4491dd1 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.html +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.html @@ -1,12 +1,7 @@ - @if (softDecimals) { - {{ getIntegerPart(fee / (weight / 4)) }}{{ getDecimalPart(fee / (weight / 4)) }} sat/vB - {{ getIntegerPart(fee / weight) }}{{ getDecimalPart(fee / weight) }} sat/WU - } @else { - {{ fee / (weight / 4) | feeRounding:rounding:dp }} sat/vB - {{ fee / weight | feeRounding:rounding:dp }} sat/WU - } + {{ fee / (weight / 4) | feeRounding:rounding:dp }} sat/vB + {{ fee / weight | feeRounding:rounding:dp }} sat/WU - sat/vB diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss b/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss index 4487e5157..e69de29bb 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.scss @@ -1,4 +0,0 @@ -.soft-decimals { - font-size: 0.8em; - vertical-align: text-bottom; -} From 7b6bf4f9613603b1f9849ab413a6c400fe723221 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 2 Dec 2025 09:39:28 +0000 Subject: [PATCH 531/534] only 1 d.p --- .../src/app/components/fees-box/fees-box.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/fees-box/fees-box.component.html b/frontend/src/app/components/fees-box/fees-box.component.html index 55e64d4c1..a3b2a5286 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.html +++ b/frontend/src/app/components/fees-box/fees-box.component.html @@ -14,23 +14,23 @@
    -
    +
    -
    +
    -
    +
    -
    +
    From 1f3ae67fb3a0f6ff5809e0094361a744ba303fc8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 3 Dec 2025 02:01:11 +0000 Subject: [PATCH 532/534] fix recommended fee tests --- backend/src/api/fee-api.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 0914a1098..036acaa69 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -34,7 +34,11 @@ class FeeApi { const mPool = mempool.getMempoolInfo(); // minimum non-zero minrelaytxfee / incrementalrelayfee is 1 sat/kvB = 0.001 sat/vB - return this.calculateRecommendedFee(pBlocks, mPool, 0.001); + const recommendations = this.calculateRecommendedFee(pBlocks, mPool, 0.001); + // enforce floor & offset for highest priority recommendations while <100% hashrate accepts sub-sat fees + recommendations.fastestFee = Math.max(recommendations.fastestFee + this.priorityFactor, this.minFastestFee); + recommendations.halfHourFee = Math.max(recommendations.halfHourFee + (this.priorityFactor / 2), this.minHalfHourFee); + return recommendations; } public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minIncrement: number = this.minimumIncrement): RecommendedFees { @@ -70,8 +74,8 @@ class FeeApi { hourFee = Math.max(hourFee, economyFee); return { - 'fastestFee': Math.max(this.roundToNearest(fastestFee + this.priorityFactor, minIncrement), this.minFastestFee), - 'halfHourFee': Math.max(this.roundToNearest(halfHourFee + (this.priorityFactor / 2), minIncrement), this.minHalfHourFee), + 'fastestFee': this.roundToNearest(fastestFee, minIncrement), + 'halfHourFee': this.roundToNearest(halfHourFee, minIncrement), 'hourFee': this.roundToNearest(hourFee, minIncrement), 'economyFee': this.roundToNearest(economyFee, minIncrement), 'minimumFee': this.roundToNearest(minimumFee, minIncrement), From 3c9745be2f492ffb03649332871cc9dabd323152 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 3 Dec 2025 11:04:00 +0000 Subject: [PATCH 533/534] round precise fees to 3.d.p --- backend/src/api/fee-api.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/src/api/fee-api.ts b/backend/src/api/fee-api.ts index 036acaa69..56106c7f5 100644 --- a/backend/src/api/fee-api.ts +++ b/backend/src/api/fee-api.ts @@ -38,7 +38,13 @@ class FeeApi { // enforce floor & offset for highest priority recommendations while <100% hashrate accepts sub-sat fees recommendations.fastestFee = Math.max(recommendations.fastestFee + this.priorityFactor, this.minFastestFee); recommendations.halfHourFee = Math.max(recommendations.halfHourFee + (this.priorityFactor / 2), this.minHalfHourFee); - return recommendations; + return { + 'fastestFee': Math.round(recommendations.fastestFee * 1000) / 1000, + 'halfHourFee': Math.round(recommendations.halfHourFee * 1000) / 1000, + 'hourFee': Math.round(recommendations.hourFee * 1000) / 1000, + 'economyFee': Math.round(recommendations.economyFee * 1000) / 1000, + 'minimumFee': Math.round(recommendations.minimumFee * 1000) / 1000, + }; } public calculateRecommendedFee(pBlocks: MempoolBlock[], mPool: IBitcoinApi.MempoolInfo, minIncrement: number = this.minimumIncrement): RecommendedFees { From 56953c5221fd5eb93104f158b8df2d662ffc9494 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 5 Dec 2025 05:28:55 +0000 Subject: [PATCH 534/534] set indexer flags earlier --- backend/src/indexer.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index 7e41aae23..b733a6e2c 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -170,6 +170,9 @@ class Indexer { return; } + this.runIndexer = false; + this.indexerRunning = true; + if (config.FIAT_PRICE.ENABLED) { try { await priceUpdater.$run(); @@ -184,9 +187,6 @@ class Indexer { return; } - this.runIndexer = false; - this.indexerRunning = true; - logger.debug(`Running mining indexer`); await this.checkAvailableCoreIndexes();